0からの、超初心者C++相談室
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr 何にも知らない0からの出発、超初心者のためのC++相談室
389ハノン ◆QZaw55cn4c
2021/10/13(水) 02:24:33.63ID:YMzdF2UZ390デフォルトの名無しさん
2021/10/13(水) 03:03:01.45ID:gvBCET4D >>389
回答ありがとうございます。
ファイルの関連付けをメモ帳とVisualstudioしか選べなかったです。(後Microsoftストア)
Notepad++は初期設定結構大変な感じなんでしょうか?
https://imgur.com/a/V3jOiV0
回答ありがとうございます。
ファイルの関連付けをメモ帳とVisualstudioしか選べなかったです。(後Microsoftストア)
Notepad++は初期設定結構大変な感じなんでしょうか?
https://imgur.com/a/V3jOiV0
391ハノン ◆QZaw55cn4c
2021/10/13(水) 19:41:40.64ID:YMzdF2UZ >>390
たしかに「設定→アプリ→既定のアプリ→ファイルの種類ごとに」
はうまくいかないですね
では、
開きたい拡張子を持ったファイルを右クリック→プログラムから開く→別のプログラムを開く→その他のアプリ→このPCで別のアプリを探す
ではどうですか?
私は win7 メインで、うまいアドバイスができなくてすみません‥‥
たしかに「設定→アプリ→既定のアプリ→ファイルの種類ごとに」
はうまくいかないですね
では、
開きたい拡張子を持ったファイルを右クリック→プログラムから開く→別のプログラムを開く→その他のアプリ→このPCで別のアプリを探す
ではどうですか?
私は win7 メインで、うまいアドバイスができなくてすみません‥‥
392デフォルトの名無しさん
2021/10/19(火) 08:20:19.87ID:7/3R28mC C++でアプリを作る場合って、QTってやつかMFCって奴を勉強すればいいのでしょうか?
C++でWIN32APIを学ぶっていうのはないですか?
C++でWIN32APIを学ぶっていうのはないですか?
393デフォルトの名無しさん
2021/10/19(火) 10:04:52.66ID:emsejTNf ないです
394デフォルトの名無しさん
2021/10/19(火) 10:18:17.44ID:vPA5f3eX あります
395デフォルトの名無しさん
2021/10/19(火) 11:51:03.31ID:90qj1F6l メッセージループによるイベントドリブン型アプリケーション
「ウインドウ」と「メッセージ」というウインドウズの基本概念ぐらいは理解してもいい
「ウインドウ」と「メッセージ」というウインドウズの基本概念ぐらいは理解してもいい
396デフォルトの名無しさん
2021/10/19(火) 19:00:27.41ID:C9DkQou5 tcl/tk
wxWidgets
DXLib
Unity
wxWidgets
DXLib
Unity
397ハノン ◆QZaw55cn4c
2021/10/19(火) 20:20:27.92ID:KyySFZDA >>392
「C++でwin32api」ですか…
そういうのは c で win32api を理解した後、各自が独力で工夫して c++ と win32api とを辻褄あわせするものだと思っていましたが、それはそうと、そういう書籍は過去にありました
たしか leaf というライブラリと WOOL という lisp 処理系が掲載されていた記憶があります
「C++でwin32api」ですか…
そういうのは c で win32api を理解した後、各自が独力で工夫して c++ と win32api とを辻褄あわせするものだと思っていましたが、それはそうと、そういう書籍は過去にありました
たしか leaf というライブラリと WOOL という lisp 処理系が掲載されていた記憶があります
398デフォルトの名無しさん
2021/10/19(火) 22:23:42.02ID:P+gkhAFH MFC は何十年も前だけど、今もあるの?
QT は、Linux で聞くけど、Windows で使うの?
QT は、Linux で聞くけど、Windows で使うの?
399デフォルトの名無しさん
2021/10/20(水) 02:20:42.50ID:+2OzLQ7p >>398
Qt5Core.dllで検索する色々出てくるから、win/macとマルチのアプリなんかで割と使われてみたいね。
手元だとfusion360とかresolveとかで使われてるっぽい。商用ライセンスあるからかな?
Qt5Core.dllで検索する色々出てくるから、win/macとマルチのアプリなんかで割と使われてみたいね。
手元だとfusion360とかresolveとかで使われてるっぽい。商用ライセンスあるからかな?
400デフォルトの名無しさん
2021/10/20(水) 11:06:18.19ID:OEiI06HQ 5以前は良かったんだがな
401はちみつ餃子 ◆8X2XSCHEME
2021/10/20(水) 13:35:36.40ID:dLyN/sz8402デフォルトの名無しさん
2021/10/20(水) 18:01:15.01ID:oZqSjSwG403デフォルトの名無しさん
2021/10/20(水) 19:03:46.64ID:CkfuGqw9 知っておいた方が良いけど
避ける方法もある
避ける方法もある
404デフォルトの名無しさん
2021/10/20(水) 19:36:43.86ID:+2OzLQ7p406デフォルトの名無しさん
2021/10/20(水) 23:17:39.77ID:vkb7a42p >>405
C++でも出来るよう
C++でも出来るよう
407はちみつ餃子 ◆8X2XSCHEME
2021/10/21(木) 00:38:03.74ID:JAunV20A >>405
WinRT は Windows のモダンな API セットで、特定の言語に結びついたものではない。
WinRT は Windows のモダンな API セットで、特定の言語に結びついたものではない。
408デフォルトの名無しさん
2021/11/05(金) 12:47:56.16ID:dj6lZ6W1 無名クラスのメンバ関数の実装を宣言と別にすることって可能ですか
struct {
int func_hoge(int n);
} myClass;
(実装)?
struct {
int func_hoge(int n);
} myClass;
(実装)?
409デフォルトの名無しさん
2021/11/07(日) 08:51:29.08ID:+fO8/EKc std::vecotrのインスタンスを作ったとき、指定した要素数以上のメモリを確保しないようにはできますか??
410デフォルトの名無しさん
2021/11/07(日) 11:43:59.55ID:cdTTDz5e 実装依存
普通は出来ない
普通は出来ない
411デフォルトの名無しさん
2021/11/09(火) 14:46:05.51ID:t/ZCl1K7 普通でなく指定したバイト数以上のメモリを確保しようとしたら例外が上がる実装例
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T, class Alloc=allocator<T>>
class SizeLimitedAllocator {
public:
typedef T value_type;
T *allocate(size_t n) {
if (n > MAX_SIZE) throw bad_alloc();
return allocator_traits<Alloc>::allocate(allocator_, n);
}
void deallocate(T *p, size_t n) {
allocator_traits<Alloc>::deallocate(allocator_, p, n);
}
private:
Alloc allocator_;
};
int main()
{
vector<char,SizeLimitedAllocator<char>> vec(MAX_SIZE);
try { vec.resize(MAX_SIZE+1); }
catch (bad_alloc& e) { cerr << e.what() << endl; }
return 0;
}
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T, class Alloc=allocator<T>>
class SizeLimitedAllocator {
public:
typedef T value_type;
T *allocate(size_t n) {
if (n > MAX_SIZE) throw bad_alloc();
return allocator_traits<Alloc>::allocate(allocator_, n);
}
void deallocate(T *p, size_t n) {
allocator_traits<Alloc>::deallocate(allocator_, p, n);
}
private:
Alloc allocator_;
};
int main()
{
vector<char,SizeLimitedAllocator<char>> vec(MAX_SIZE);
try { vec.resize(MAX_SIZE+1); }
catch (bad_alloc& e) { cerr << e.what() << endl; }
return 0;
}
412デフォルトの名無しさん
2021/11/25(木) 04:15:10.15ID:0166A/na void *q = (void*)p;
void *r = reinterpert_cast<void *>(p);
void *s = static_cast<void *>(p);
どっちが良い?
void *r = reinterpert_cast<void *>(p);
void *s = static_cast<void *>(p);
どっちが良い?
413はちみつ餃子 ◆8X2XSCHEME
2021/11/25(木) 04:51:08.49ID:Mn8CZmYm >>412
static_cast で可能なものなら static_cast を使うのが行儀が良い。
Cスタイルのキャスト記法は適用範囲が広すぎて意図通りではない (危険な) 変換でもコンパイルが通るかもしれんということで
複数のキャストを用意しているので意図にあてまる限りなるべく狭い効果を持つキャストを用いるべき。
static_cast で可能なものなら static_cast を使うのが行儀が良い。
Cスタイルのキャスト記法は適用範囲が広すぎて意図通りではない (危険な) 変換でもコンパイルが通るかもしれんということで
複数のキャストを用意しているので意図にあてまる限りなるべく狭い効果を持つキャストを用いるべき。
414デフォルトの名無しさん
2022/02/10(木) 15:34:30.67ID:Ido/99Jv githubからcshogiというパッケージをインストールしようとしたところ
ビルド中に
src/mate.cpp:110:26: error: template parameter redefines default argument
というエラーが発生しました。
実行コマンドは
CPPFLAGS=-std=c++17 pip install git+https://github.com/TadaoYamaoka/cshogi
としているのですが、あれこれ調べてもう打つ手がなくなりそうです。なにが悪いでしょうか。
macOS12.2付属のclangでビルドしています。(他の人は使っているので、文法などは問題ないはずだと思っています。)
ビルド中に
src/mate.cpp:110:26: error: template parameter redefines default argument
というエラーが発生しました。
実行コマンドは
CPPFLAGS=-std=c++17 pip install git+https://github.com/TadaoYamaoka/cshogi
としているのですが、あれこれ調べてもう打つ手がなくなりそうです。なにが悪いでしょうか。
macOS12.2付属のclangでビルドしています。(他の人は使っているので、文法などは問題ないはずだと思っています。)
415デフォルトの名無しさん
2022/02/10(木) 15:42:07.23ID:J5PrGMnU そのエラーメッセージで検索すれば?
416デフォルトの名無しさん
2022/02/10(木) 15:46:35.62ID:Ido/99Jv >>415
とっくにやってますわ!と言うところでしたが、stackoverflowでぴったりなのがありました。
https://stackoverflow.com/questions/14197436/c11-template-parameter-redefines-default-argument
gccならよさそうですね。
とっくにやってますわ!と言うところでしたが、stackoverflowでぴったりなのがありました。
https://stackoverflow.com/questions/14197436/c11-template-parameter-redefines-default-argument
gccならよさそうですね。
417デフォルトの名無しさん
2022/03/15(火) 20:43:42.96ID:+mlS0n0o test
418デフォルトの名無しさん
2022/03/15(火) 21:05:11.63ID:q9dCXwxq Borland C++Builder 1が無料ダウンロードできるようですが
Borland C++ Compiler 5.5 freeとは全く別物でしょうか?
Borland C++ Compiler 5.5 freeとは全く別物でしょうか?
419デフォルトの名無しさん
2022/03/17(木) 11:44:12.82ID:Y2OAtTnf 1は大昔のを記念に無料DL可にしたやつじゃないかな
最新のやつもCommunity Editionていう無料版があるから、開発に使うならそっち
あとBuilderはVisual Studioのような統合開発環境でコンパイラも含まれる
最新のやつもCommunity Editionていう無料版があるから、開発に使うならそっち
あとBuilderはVisual Studioのような統合開発環境でコンパイラも含まれる
420デフォルトの名無しさん
2022/03/18(金) 12:32:15.10ID:Fw15ZxLZ ロベール読んでるけど、途中からコードとファイルを端折りすぎてどこに書いてるのか理解出来ない
421デフォルトの名無しさん
2022/03/19(土) 14:31:38.38ID:T81w77OE >>420
その本(サイト?)はあまり読んでないからわからないけど、こういう知識・技術系は複数の本やサイトを利用したほうがいいかも
基本はそのロベールで、曖昧な部分は他のテキストでみたいに
まあ逆でもいいけど
その本(サイト?)はあまり読んでないからわからないけど、こういう知識・技術系は複数の本やサイトを利用したほうがいいかも
基本はそのロベールで、曖昧な部分は他のテキストでみたいに
まあ逆でもいいけど
422デフォルトの名無しさん
2022/03/21(月) 11:12:55.05ID:Prmlj1K5 分割コンパイルの仕組みちゃんと理解しないまま雰囲気でヘッダインクルードしてるんですけど
cppファイルに#pragma once書かないのってどうしてですか??
cppファイルに#pragma once書かないのってどうしてですか??
423デフォルトの名無しさん
2022/03/21(月) 11:22:20.21ID:S8aTENmp >>422 書いても意味ないから。
424デフォルトの名無しさん
2022/03/21(月) 11:45:05.99ID:TlR/Mg8q425デフォルトの名無しさん
2022/04/07(木) 19:54:53.05ID:ozPVuLqH cppってインクルード出来たんだ
ヘッダーだけかと思った
ヘッダーだけかと思った
426デフォルトの名無しさん
2022/04/11(月) 15:54:11.00ID:LBY7PFnU 単にコピペしてくるだけだけだからなんでもいいぞ
ルックアップテーブル計算してテキストにダンプし、ソース中に#include "table.txt" で取り込むのを見たことがある
ルックアップテーブル計算してテキストにダンプし、ソース中に#include "table.txt" で取り込むのを見たことがある
427デフォルトの名無しさん
2022/04/11(月) 19:50:08.66ID:uaVZR/I2 IDEだと、プロジェクトに.cppを含めるとコンパイル対象になるので.inlとかにしておくのが無難
428デフォルトの名無しさん
2022/04/30(土) 07:28:15.03ID:2aZ7UOTr 前は中身がcppっぽいのはcppにしてたけど
インクルード前提のファイルはhにするようにした
#define ほにゃらら
#include ファイル名.h
##undef ほにゃらら
インクルードしても単体ソースとしても使えるヤツはcpp
ツールが吐き出したコードやデータでそのままincludeして使えるものは拡張子はそのまま
インクルード前提のファイルはhにするようにした
#define ほにゃらら
#include ファイル名.h
##undef ほにゃらら
インクルードしても単体ソースとしても使えるヤツはcpp
ツールが吐き出したコードやデータでそのままincludeして使えるものは拡張子はそのまま
429デフォルトの名無しさん
2022/06/11(土) 20:56:47.72ID:zBk/MBZO hpp
430デフォルトの名無しさん
2022/06/11(土) 21:01:36.29ID:N4H8T0pQ h と hpp どっちにするかの話じゃなくて
(h or hpp) にするか
(c or cpp) にするか
の話
(h or hpp) にするか
(c or cpp) にするか
の話
431デフォルトの名無しさん
2022/06/11(土) 21:02:37.04ID:N4H8T0pQ 初心者はトリッキーな使い方はしない方が良いから聞かなかった事にして
432デフォルトの名無しさん
2022/06/11(土) 21:20:49.53ID:kM12Kkyp トリッカーズ。
433デフォルトの名無しさん
2022/06/12(日) 10:33:13.76ID:cPTHwR7Q 三角形の秘密はね
434デフォルトの名無しさん
2022/06/12(日) 11:16:51.08ID:v0rlTKHd おなかがすいたら
435デフォルトの名無しさん
2022/06/12(日) 19:40:55.19ID:r44ApDPu ピーナッツ
436デフォルトの名無しさん
2022/06/23(木) 10:13:29.99ID:06mLNX8U なんか、すごい達者さんが並んでますけど、
ここって、
「プログラミング初めたいけど、なんにもわからないので、初めから教えてください。」
というスレです。
ここって、
「プログラミング初めたいけど、なんにもわからないので、初めから教えてください。」
というスレです。
437デフォルトの名無しさん
2022/06/23(木) 10:52:47.91ID:M4XLJX6g 最初からでも0からでも構わんが
自分で努力しないやつはだめ
自分で努力しないやつはだめ
438デフォルトの名無しさん
2022/06/23(木) 11:07:51.97ID:XRNmRbRA 俺は努力しなくてもできちゃうからなあ
439デフォルトの名無しさん
2022/06/23(木) 14:33:26.79ID:06mLNX8U 掛け算の*と、「何ですか?」の*と一緒なんですが、
区別する方法を教えてください。
区別する方法を教えてください。
440デフォルトの名無しさん
2022/06/23(木) 19:37:03.84ID:WbbET00J ポインターの事?
441デフォルトの名無しさん
2022/06/23(木) 19:47:14.20ID:hToQs/iZ は?何ですか?
442デフォルトの名無しさん
2022/06/24(金) 10:44:51.77ID:K2we1Lar オレオレ
443デフォルトの名無しさん
2022/06/24(金) 12:54:50.02ID:fYiV2rYB そうだよオレだよ
444デフォルトの名無しさん
2022/07/16(土) 16:13:36.70ID:2GuJXeRO445デフォルトの名無しさん
2022/07/16(土) 17:44:38.20ID:WOPsEo4E 数字の、xxxと、
数字の、AAAの掛け算は、
xxx*AAAで、いつも迷うんです・・・
数字の、AAAの掛け算は、
xxx*AAAで、いつも迷うんです・・・
446デフォルトの名無しさん
2022/07/16(土) 18:00:17.69ID:QRg/sabr *a+++ ++*b
で迷え
で迷え
447デフォルトの名無しさん
2022/07/16(土) 18:01:53.10ID:QRg/sabr +*a++*++*b
これも
これも
448デフォルトの名無しさん
2022/08/01(月) 07:12:02.16ID:yd/7YIgU map よりも unordered_map の方が高速ですか?
あと追加順が保障されないのが unordered_map ですか?
map は何順ですか?
あと追加順が保障されないのが unordered_map ですか?
map は何順ですか?
449デフォルトの名無しさん
2022/08/01(月) 13:52:12.46ID:jhXgj6wH おまいは何を言っておるのだ?
450はちみつ餃子 ◆8X2XSCHEME
2022/08/01(月) 15:12:11.10ID:YhL9Bhjt >>448
> map よりも unordered_map の方が高速ですか?
操作によるので一概には言えない。
一般的には unordered_map のほうが有利なことが多いとは言えるけれど。
> 追加順が保障されないのが unordered_map ですか?
map でも unordered_map でも追加した順序は保持されない。
C++ に限らず辞書的なデータ構造では格納順序を保持しないのが普通で、
保証があるのは Ruby の Hash くらいだと思う。
Go や Rust だと辿る順序を乱数でかき乱す実装になっているくらいだし。
> map は何順ですか?
キーの順序。
特に指示しなければデフォルトではキーを std::less で比較した順序。
> map よりも unordered_map の方が高速ですか?
操作によるので一概には言えない。
一般的には unordered_map のほうが有利なことが多いとは言えるけれど。
> 追加順が保障されないのが unordered_map ですか?
map でも unordered_map でも追加した順序は保持されない。
C++ に限らず辞書的なデータ構造では格納順序を保持しないのが普通で、
保証があるのは Ruby の Hash くらいだと思う。
Go や Rust だと辿る順序を乱数でかき乱す実装になっているくらいだし。
> map は何順ですか?
キーの順序。
特に指示しなければデフォルトではキーを std::less で比較した順序。
451デフォルトの名無しさん
2022/08/05(金) 04:26:17.70ID:ECXKpFJi そもそもmapの順序ってなんぞや
そりゃ内部表現としての順序(あるいは非順序という名の実装依存の順序)はあるけど
腹ワタ開腹して弄くり回したら、それはもうmapとは呼べねーよ
そりゃ内部表現としての順序(あるいは非順序という名の実装依存の順序)はあるけど
腹ワタ開腹して弄くり回したら、それはもうmapとは呼べねーよ
452デフォルトの名無しさん
2022/08/16(火) 01:02:16.19ID:pMrCsY/x vector<int*> xの特定の要素を削除したい場合
delete x[1];
してから
x.erase(x.begin()+1);
という手順であってますか?
deleteしないとメモリリークしますよね?
delete x[1];
してから
x.erase(x.begin()+1);
という手順であってますか?
deleteしないとメモリリークしますよね?
453はちみつ餃子 ◆8X2XSCHEME
2022/08/16(火) 01:10:03.51ID:+o+ePBjP454デフォルトの名無しさん
2022/08/18(木) 11:36:39.99ID:p/limWqp そもそも移動が大量に発生するのでそんな設計しない
455デフォルトの名無しさん
2022/10/14(金) 01:43:37.78ID:ps9ayw5X bitset<4>("1101")をsigned longに変換したいのですが
簡単な方法は無いでしょうか?
to_ulong()はあるのですが、to_long()が無いっぽいです
簡単な方法は無いでしょうか?
to_ulong()はあるのですが、to_long()が無いっぽいです
456デフォルトの名無しさん
2022/10/14(金) 01:50:46.72ID:cI3rl/qY unsigned longからlongにキャストすればいいだけでは?
457はちみつ餃子 ◆8X2XSCHEME
2022/10/14(金) 02:13:27.03ID:rgl2oNFZ 念のため補足すると、変換後の整数型が符号付きである場合にその型で表現できる範囲をからはずれたときの結果は定義されていない。
しかし bitset<4> を元にするという前提の元では signed long int の範囲からはずれるということはありえない
ので signed long int にキャストするという対処で正しい。
しかし bitset<4> を元にするという前提の元では signed long int の範囲からはずれるということはありえない
ので signed long int にキャストするという対処で正しい。
458デフォルトの名無しさん
2022/10/14(金) 02:13:45.28ID:ps9ayw5X すみません肝心なことを書き忘れていました
2の補数表現された2進数の文字列を
signed longに変換したかったのでした
文字列は諦めて、
-(signed long)bitset<4>(~0b1101+1).to_ulong()
だと一応期待した動作なのですがなんか野暮ったい…
2の補数表現された2進数の文字列を
signed longに変換したかったのでした
文字列は諦めて、
-(signed long)bitset<4>(~0b1101+1).to_ulong()
だと一応期待した動作なのですがなんか野暮ったい…
459デフォルトの名無しさん
2022/10/14(金) 20:52:11.42ID:IQ8pOIWW 4ビットだから符号無しなら0~15だろ
コレを-8~7の符号付きにしたいということか?
コレを-8~7の符号付きにしたいということか?
460デフォルトの名無しさん
2022/10/15(土) 16:23:31.27ID:B8kXjL18 普通に下駄履かせれば(引き算)
461デフォルトの名無しさん
2023/05/24(水) 23:52:31.95ID:lCJuR93r いやー今日はめっちゃ勉強したわ
詳しくなった
詳しくなった
462デフォルトの名無しさん
2023/06/04(日) 09:18:18.28ID:5jvZ+YKl 誘導されて来ますた、
質問なのですがstd::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい、と言う場合どうす
れば良いの?
ダチャい書き方ならできうるけど人類はいつまでstrtod()や&(str[0])……
質問なのですがstd::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい、と言う場合どうす
れば良いの?
ダチャい書き方ならできうるけど人類はいつまでstrtod()や&(str[0])……
463はちみつ餃子 ◆8X2XSCHEME
2023/06/04(日) 09:22:50.76ID:MHoxWKtY464デフォルトの名無しさん
2023/06/04(日) 09:28:48.33ID:5jvZ+YKl >>463
だって&(str[0])とかナマポやし……
文字列型がchar以外になったら(std::basic_string<TCHAR>とか)になることも見越したら
手でテンプレート書かないといけないから牛刀感があるし、
文字列が厳格に数値文字列なのか検査するとかアプリのコードであるあるなので
アプリレベル(高級アセンブラ的でない書き方)の手段が用意されていて然るべきな気がして仕方が無いし、
だって&(str[0])とかナマポやし……
文字列型がchar以外になったら(std::basic_string<TCHAR>とか)になることも見越したら
手でテンプレート書かないといけないから牛刀感があるし、
文字列が厳格に数値文字列なのか検査するとかアプリのコードであるあるなので
アプリレベル(高級アセンブラ的でない書き方)の手段が用意されていて然るべきな気がして仕方が無いし、
465デフォルトの名無しさん
2023/06/04(日) 09:30:18.23ID:5jvZ+YKl 無いというなら仕方が無いが、漏れはちょう初心者ですら……
466はちみつ餃子 ◆8X2XSCHEME
2023/06/04(日) 09:37:21.42ID:MHoxWKtY >>464
std::stod は std::string と std::wstring に対応してるよ。
std::stod は std::string と std::wstring に対応してるよ。
467デフォルトの名無しさん
2023/06/04(日) 09:39:47.38ID:5jvZ+YKl468はちみつ餃子 ◆8X2XSCHEME
2023/06/04(日) 09:52:59.20ID:MHoxWKtY469デフォルトの名無しさん
2023/06/04(日) 09:55:13.77ID:5jvZ+YKl 実は正規表現でも使えば何とかなる……
のか……
std::regex re("^\s*([\d.]+)\s*$");
std::smatch m;
if (std::regex_match(str, m, re)) {
return m[1].str().strtod();
} else {
エラー
}
のか……
std::regex re("^\s*([\d.]+)\s*$");
std::smatch m;
if (std::regex_match(str, m, re)) {
return m[1].str().strtod();
} else {
エラー
}
470デフォルトの名無しさん
2023/06/04(日) 09:56:15.54ID:5jvZ+YKl471はちみつ餃子 ◆8X2XSCHEME
2023/06/04(日) 10:00:50.19ID:MHoxWKtY >>470
続くものが何であるかは自分で確認してエラーにするという話をしてると思ったんやが。
続くものが何であるかは自分で確認してエラーにするという話をしてると思ったんやが。
472デフォルトの名無しさん
2023/06/04(日) 10:05:01.33ID:5jvZ+YKl473はちみつ餃子 ◆8X2XSCHEME
2023/06/04(日) 10:13:13.65ID:MHoxWKtY474デフォルトの名無しさん
2023/06/04(日) 11:40:09.61ID:bxWaSYac 単位でも確認したいの?
だったらstd::ends_withとかstd::rfindとstd::substrで数字の後ろ切り出すとかでチェックしてからstd::stodでよくね
チェックは自分の要件だから自分で書け標準ライブラリはお前のお母さんではない
だったらstd::ends_withとかstd::rfindとstd::substrで数字の後ろ切り出すとかでチェックしてからstd::stodでよくね
チェックは自分の要件だから自分で書け標準ライブラリはお前のお母さんではない
475デフォルトの名無しさん
2023/06/04(日) 11:51:26.73ID:xmEQJDCs 正規表現でチェックするのが1番自然な気がする
476デフォルトの名無しさん
2023/06/04(日) 22:03:06.86ID:5jvZ+YKl >>474
> 単位でも確認したいの?
> だったらstd::ends_withとかstd::rfindとstd::substrで数字の後ろ切り出すとかでチェックしてからstd::stodでよくね
std::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい(>>462
> チェックは自分の要件だから自分で書け標準ライブラリはお前のお母さんではない
チェックのためには(例えばstd::stodが)どこまで読んだのかの情報が要る
std::stodの裏側では文字列を数値解釈する枯れたコードが動いているわけで、
そいつにどこまで読んだのか、ただ1個の整数データを聞けさえすれば良い。
これはそれほど無茶な話ではないはずで実際strtod()ではできるから
どっちかというtライブラリにちょっち不備があるのでは案件であってお母さん案件ではない。
> 単位でも確認したいの?
> だったらstd::ends_withとかstd::rfindとstd::substrで数字の後ろ切り出すとかでチェックしてからstd::stodでよくね
std::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい(>>462
> チェックは自分の要件だから自分で書け標準ライブラリはお前のお母さんではない
チェックのためには(例えばstd::stodが)どこまで読んだのかの情報が要る
std::stodの裏側では文字列を数値解釈する枯れたコードが動いているわけで、
そいつにどこまで読んだのか、ただ1個の整数データを聞けさえすれば良い。
これはそれほど無茶な話ではないはずで実際strtod()ではできるから
どっちかというtライブラリにちょっち不備があるのでは案件であってお母さん案件ではない。
477デフォルトの名無しさん
2023/06/04(日) 22:20:35.13ID:5jvZ+YKl >>475
上に書いた通り(例えば)std::stodがどこまで読んだのかだけイブラリが返してくれさえしたら解決するのじゃ
正規表現は意味的には合目的的な手段やが、普通の正規表現エンジンの実装なら正規表現オブジェクトを作った際に
FSMを(表形式か何かで)生成する処理が中で動くので、そんなに軽い処理ではないからやっぱ牛刀感みある…
いったん作ったらマッチングは表駆動でやれるので速いことが気体できるのではないか、という香具師が居るかもしれないが、
実はstd::stod()に最大限仕事させたい(正規表現の側で数値文字列の書式についてわざわざ指定したっくない
場合は>>496の正規表現は正しくは "^\\s*(.*?)\s*$"にせねばならないからマッチング時にバックトラックが発生して遅い可能性がある
これもちょっちイヤソな理由
繰り返しになるが(例えば)std::stodがどこまで読んだのかだけイブラリが返してくれさえしたらこんな考慮は不要で完全に円満に解決するのじゃ……
上に書いた通り(例えば)std::stodがどこまで読んだのかだけイブラリが返してくれさえしたら解決するのじゃ
正規表現は意味的には合目的的な手段やが、普通の正規表現エンジンの実装なら正規表現オブジェクトを作った際に
FSMを(表形式か何かで)生成する処理が中で動くので、そんなに軽い処理ではないからやっぱ牛刀感みある…
いったん作ったらマッチングは表駆動でやれるので速いことが気体できるのではないか、という香具師が居るかもしれないが、
実はstd::stod()に最大限仕事させたい(正規表現の側で数値文字列の書式についてわざわざ指定したっくない
場合は>>496の正規表現は正しくは "^\\s*(.*?)\s*$"にせねばならないからマッチング時にバックトラックが発生して遅い可能性がある
これもちょっちイヤソな理由
繰り返しになるが(例えば)std::stodがどこまで読んだのかだけイブラリが返してくれさえしたらこんな考慮は不要で完全に円満に解決するのじゃ……
478デフォルトの名無しさん
2023/06/04(日) 22:30:29.50ID:bxWaSYac479デフォルトの名無しさん
2023/06/05(月) 00:32:44.63ID:8dockxGx 便乗質問していいですか
某所で似たような問題があったのだけど、付加条件として、数値がINT_MAXを超える場合は
INT_MAX、INT_MINを下回る場合はINT_MINを返す、がありました
stodを使う場合(stoll等でもいいですが)、これってどうやって処理すればいいですかね
某所で似たような問題があったのだけど、付加条件として、数値がINT_MAXを超える場合は
INT_MAX、INT_MINを下回る場合はINT_MINを返す、がありました
stodを使う場合(stoll等でもいいですが)、これってどうやって処理すればいいですかね
480デフォルトの名無しさん
2023/06/05(月) 00:38:04.95ID:8dockxGx 念の為「数値が」というのは元の文字列での、です。たとえば "1000000000000"みたいな
可能性としてはLONG_LONG_MAXを超えている場合もありますね
可能性としてはLONG_LONG_MAXを超えている場合もありますね
481デフォルトの名無しさん
2023/06/05(月) 00:46:19.80ID:oX+QCkCh stoi系は範囲越えたらstd::out_of_rangeを投げるはずだが
482デフォルトの名無しさん
2023/06/05(月) 01:19:48.15ID:8dockxGx _MAXで超えたか_MINで超えたかってわかりますかね
483デフォルトの名無しさん
2023/06/05(月) 01:31:31.21ID:oX+QCkCh 先頭文字が'-'かどうか見れば?
484デフォルトの名無しさん
2023/06/05(月) 01:54:42.53ID:yTJt/rkc >>478
どういうこっちゃkwsk、
どういうこっちゃkwsk、
485デフォルトの名無しさん
2023/06/05(月) 02:04:38.53ID:LZnxgWkc >>484
https://ja.cppreference.com/w/cpp/string/basic_string/stof
> pos がヌルポインタでなければ、ポインタ ptr (変換関数の内部的な変数) が str.c_str() 内の最初の変換されなかった文字のアドレスを受け取り、その文字のインデックスが計算されて *pos に格納されます。 これは変換によって処理された文字数になります。
> 引数
> str - 変換する文字列
> pos - 処理された文字数を格納する整数のアドレス
https://ja.cppreference.com/w/cpp/string/basic_string/stof
> pos がヌルポインタでなければ、ポインタ ptr (変換関数の内部的な変数) が str.c_str() 内の最初の変換されなかった文字のアドレスを受け取り、その文字のインデックスが計算されて *pos に格納されます。 これは変換によって処理された文字数になります。
> 引数
> str - 変換する文字列
> pos - 処理された文字数を格納する整数のアドレス
486デフォルトの名無しさん
2023/06/05(月) 02:37:23.50ID:yTJt/rkc >>485
㌧クスわかりたorz
㌧クスわかりたorz
487デフォルトの名無しさん
2023/06/05(月) 06:49:34.05ID:8dockxGx >>483
そうですね、でも文字列の先頭とは限らないですよね。やはりこの場合はある程度は
自力で文字列をパースする必要がある感じですかね
ちなみに数字以外が含まれるときの挙動は "hoge 123"みたいに数字より前に非数字
がくるのは駄目だけど逆に"123 hoge"みたいのはおkなんですね
そうですね、でも文字列の先頭とは限らないですよね。やはりこの場合はある程度は
自力で文字列をパースする必要がある感じですかね
ちなみに数字以外が含まれるときの挙動は "hoge 123"みたいに数字より前に非数字
がくるのは駄目だけど逆に"123 hoge"みたいのはおkなんですね
488デフォルトの名無しさん
2023/06/20(火) 19:02:06.99ID:mbwsU8Mq 話題がないから質問してみる
struct Summer {};
Summer summer;
Summer *const summerConstPtr{};
const_cast<Summer*>(summerConstPtr) = &summer; // だめ
const_cast<Summer*&>(summerConstPtr) = &summer; // いける
質問1) 最後のいけるやつのconst_cast<Summer*&>の「&」はどういう意味なんでしょう? 参照のことかいな?
質問2) なんでconst_cast<Summer*>ではだめなのかな?
struct Summer {};
Summer summer;
Summer *const summerConstPtr{};
const_cast<Summer*>(summerConstPtr) = &summer; // だめ
const_cast<Summer*&>(summerConstPtr) = &summer; // いける
質問1) 最後のいけるやつのconst_cast<Summer*&>の「&」はどういう意味なんでしょう? 参照のことかいな?
質問2) なんでconst_cast<Summer*>ではだめなのかな?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★3 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 小野田氏、”中国経済への依存“に警戒感 高市首相の国会答弁巡り [煮卵★]
- 【サッカー】独占入手 最年長JリーガーにW不倫疑惑 『お風呂覗きたいんですが笑』LINE流出も… 慰謝料トラブルを本人に直撃 [冬月記者★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 【なぜ】安倍晋三の評価、地味に上がってる模様… [343591364]
- 【画像】セクシー女優・天沢りんさん「お休み頂いてた半年間でこんな体になりました🪽🤍」👉予想通りの展開に [242521385]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- とうすこ🏡愛され絵文字♡🤥👊😅👊👶♡
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
