次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part141
■ このスレッドは過去ログ倉庫に格納されています
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
142デフォルトの名無しさん
2019/03/03(日) 10:26:03.14ID:0vjeZZiI143デフォルトの名無しさん
2019/03/03(日) 10:31:40.12ID:8Bef4COm よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ
Boehm GCでも使ってみたらどうだ
145デフォルトの名無しさん
2019/03/03(日) 10:35:19.96ID:oO/57lY2 make_uniqueがやりたいってことかね
>>142
内容を誤解していました、すみません
あらためて回答します
プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
内容を誤解していました、すみません
あらためて回答します
プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
148デフォルトの名無しさん
2019/03/03(日) 10:53:36.82ID:rOejoJLo149デフォルトの名無しさん
2019/03/03(日) 10:59:02.77ID:kd4WdA4I javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが
classpath共用が何を意味しているのかは分からんが
150デフォルトの名無しさん
2019/03/03(日) 11:02:05.72ID:AQaNwhGs ・繰り返し構文とgotoの全廃
151デフォルトの名無しさん
2019/03/03(日) 11:24:20.63ID:0vjeZZiI152デフォルトの名無しさん
2019/03/03(日) 11:44:43.82ID:lodoh91K >>151
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
154デフォルトの名無しさん
2019/03/03(日) 12:18:50.69ID:kd4WdA4I >>139
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず
生のnew使わせるなんて今時のc++ではとんでもない悪手
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず
生のnew使わせるなんて今時のc++ではとんでもない悪手
155デフォルトの名無しさん
2019/03/03(日) 13:13:27.54ID:5kJ1RFDr VS2017は十分な出来なんだがテンプレートの展開中に内部エラーで転けることがあってそこだけは不満
156デフォルトの名無しさん
2019/03/03(日) 15:47:18.29ID:5EsDLzeQ shared_ptr でJavaやC#のガーベージ・コレクションとほぼ同じ役目が期待できるから別にいいのでは。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
157デフォルトの名無しさん
2019/03/03(日) 15:57:24.31ID:8Bef4COm 循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない
もちろんナマポよりは遥かにマシだけど
もちろんナマポよりは遥かにマシだけど
158デフォルトの名無しさん
2019/03/03(日) 15:59:19.15ID:rOejoJLo >>155
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
159デフォルトの名無しさん
2019/03/03(日) 16:11:53.27ID:E4UxtVYi unique_ptr<hoge> up0(new hoge());
や
shared_ptr<hoge> sp0(new hoge());
と書いたときと
unique_ptr<hoge> up1 = new hoge();
や
shared_ptr<hoge> sp1 = new hoge();
と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
や
shared_ptr<hoge> sp0(new hoge());
と書いたときと
unique_ptr<hoge> up1 = new hoge();
や
shared_ptr<hoge> sp1 = new hoge();
と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
160デフォルトの名無しさん
2019/03/03(日) 16:19:53.78ID:D2G4oQ9F 副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
161デフォルトの名無しさん
2019/03/03(日) 17:35:34.30ID:8Bef4COm162デフォルトの名無しさん
2019/03/03(日) 17:53:40.63ID:E4UxtVYi make_shared使った方が良い?
163デフォルトの名無しさん
2019/03/03(日) 19:22:53.95ID:8Bef4COm うん
164デフォルトの名無しさん
2019/03/04(月) 04:26:14.48ID:FZO2lxM7 new 呼び出しが少なければ少ないほど精神衛生に良い。
165デフォルトの名無しさん
2019/03/04(月) 06:09:53.20ID:eTdHd+Gg 複数の関数の戻り値を足し合わせる処理で、それぞれの関数の戻り値をチェックしたい場合のすっきりする方法は何かありますか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
166デフォルトの名無しさん
2019/03/04(月) 06:27:48.33ID:iluilBaY typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??
こんな風に::で三個つなげるのは合法ですかね??
167デフォルトの名無しさん
2019/03/04(月) 06:31:54.66ID:nFXsjzZK エイリアス使えば
168デフォルトの名無しさん
2019/03/04(月) 06:33:10.80ID:7Cz1/mIW funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。
string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。
string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
169デフォルトの名無しさん
2019/03/04(月) 07:56:06.21ID:EZgqhZII >>165
例外
例外
170デフォルトの名無しさん
2019/03/04(月) 08:09:41.73ID:t1tsHTRA >>166
合法
合法
171デフォルトの名無しさん
2019/03/04(月) 15:31:21.38ID:V3vkr0fP unique_ptr<int> u(new int[2]{4, 5}); // OK (A) -> int * が作られる u.get()[n] でアクセス可能 *u だめ
unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ
unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能
unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)
unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)
unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能
(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです
unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ
unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能
unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)
unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)
unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能
(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです
172デフォルトの名無しさん
2019/03/04(月) 17:39:35.24ID:rgTuscQv C 型が違う
D int*が2から作れない
D int*が2から作れない
173デフォルトの名無しさん
2019/03/04(月) 19:03:47.51ID:iluilBaY >>170
どうもありがとう。
どうもありがとう。
174165
2019/03/04(月) 22:26:16.82ID:eTdHd+Gg175デフォルトの名無しさん
2019/03/04(月) 23:05:47.73ID:IrD+1pkV void f()
{
static std::mutex mtx;
std::lock_guard<std::mutex> lock(mtx);
//何がしかの処理
}
これっていいの?
{
static std::mutex mtx;
std::lock_guard<std::mutex> lock(mtx);
//何がしかの処理
}
これっていいの?
176デフォルトの名無しさん
2019/03/04(月) 23:25:00.41ID:tJNb7RRD C++11以降はセーフ、じゃなかったかな。
177デフォルトの名無しさん
2019/03/05(火) 00:17:46.56ID:w8adCz4V セーフなわけがあるか!!1111!11!!!!1!
178デフォルトの名無しさん
2019/03/05(火) 00:55:28.26ID:Lvsoqpfj C++11だろうがなかろうが関係なくセーフだよ。
179KAC
2019/03/05(火) 01:01:35.52ID:zhV7s4kG 人によってセーフの定義が違ってたりしない?
180デフォルトの名無しさん
2019/03/05(火) 01:03:06.00ID:w8adCz4V C++11以降はセーフになったらしい(キリ
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
181デフォルトの名無しさん
2019/03/05(火) 01:04:55.09ID:w8adCz4V Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法
182デフォルトの名無しさん
2019/03/05(火) 01:11:12.97ID:w8adCz4V もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は
ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は
ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
183デフォルトの名無しさん
2019/03/05(火) 01:34:00.08ID:Lvsoqpfj グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。
184デフォルトの名無しさん
2019/03/05(火) 01:38:41.08ID:w8adCz4V リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス
185デフォルトの名無しさん
2019/03/05(火) 01:40:59.82ID:w8adCz4V あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ
個人的には使わないから知らんが
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ
個人的には使わないから知らんが
186デフォルトの名無しさん
2019/03/05(火) 02:16:13.00ID:VDry4yCP >>171
unique_ptr<int[]> u(new int[2]{6, 7});
unique_ptr<int[]> u(new int[2]{6, 7});
187デフォルトの名無しさん
2019/03/05(火) 02:54:35.71ID:YOwkwz81 std::dynarray ってどこ行ったん?
http://ezoeryou.github.io/boost-benkyokai-sapporo
http://ezoeryou.github.io/boost-benkyokai-sapporo
188デフォルトの名無しさん
2019/03/05(火) 03:25:14.57ID:VDry4yCP なんだろう
この違和感
この違和感
189デフォルトの名無しさん
2019/03/05(火) 04:45:14.68ID:mm49B1QN ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。
クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
190デフォルトの名無しさん
2019/03/05(火) 04:47:10.42ID:VDry4yCP inlineは?
191デフォルトの名無しさん
2019/03/05(火) 04:50:23.83ID:xaYVlIsQ なぜヘッダはクラス限定だとおもったんだ?
それ以前にクラス以外では使用したことがないのか?
それ以前にクラス以外では使用したことがないのか?
192デフォルトの名無しさん
2019/03/05(火) 05:01:47.80ID:OG2z9OX5 宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ
193デフォルトの名無しさん
2019/03/05(火) 05:18:53.19ID:3HlR5qin ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
194デフォルトの名無しさん
2019/03/05(火) 05:48:49.52ID:mm49B1QN195デフォルトの名無しさん
2019/03/05(火) 05:55:22.28ID:3HlR5qin ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
196デフォルトの名無しさん
2019/03/05(火) 05:59:24.21ID:mm49B1QN >>195
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
197デフォルトの名無しさん
2019/03/05(火) 06:13:55.29ID:Lvsoqpfj >>196
特にないから適当に他人のマネしとけばいいと思う。
特にないから適当に他人のマネしとけばいいと思う。
198デフォルトの名無しさん
2019/03/05(火) 11:45:31.15ID:HwCl8Q1J199はちみつ餃子 ◆8X2XSCHEME
2019/03/05(火) 12:27:38.14ID:mHzXPPXa 内部リンケージにするには static を付けるよりも
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。
インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。
無名 (unnamed) namespace って使う?
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。
インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。
無名 (unnamed) namespace って使う?
200デフォルトの名無しさん
2019/03/05(火) 12:35:48.55ID:zIeyIuEy 関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?
201デフォルトの名無しさん
2019/03/05(火) 12:41:35.39ID:xaYVlIsQ コンパイラ次第だろ
実験
実験
202デフォルトの名無しさん
2019/03/05(火) 12:50:59.28ID:zIeyIuEy VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・
203デフォルトの名無しさん
2019/03/05(火) 12:51:22.93ID:fI+Bf2nm どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
204デフォルトの名無しさん
2019/03/05(火) 15:12:40.70ID:pv9Sbimr205デフォルトの名無しさん
2019/03/05(火) 19:05:23.76ID:A2wr9SaM ストアドよりインデックスのほうが速いよってスレなかったっけ。
206デフォルトの名無しさん
2019/03/05(火) 20:02:38.14ID:zIeyIuEy207デフォルトの名無しさん
2019/03/05(火) 21:56:22.01ID:+aoESyYJ >>199
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど
明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし
c++はこういうダメ仕様多過ぎてうんざりだわ
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど
明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし
c++はこういうダメ仕様多過ぎてうんざりだわ
208デフォルトの名無しさん
2019/03/05(火) 22:06:02.21ID:fIhIM0AX 腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
209デフォルトの名無しさん
2019/03/05(火) 22:21:06.27ID:R3KidTI1 メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか?
210デフォルトの名無しさん
2019/03/05(火) 22:30:58.04ID:+aoESyYJ >>209
まず自分で計測しろ
まず自分で計測しろ
211デフォルトの名無しさん
2019/03/05(火) 23:07:56.79ID:rlRU3gS5212デフォルトの名無しさん
2019/03/05(火) 23:19:26.52ID:R3KidTI1 ありがとうございます
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?
213デフォルトの名無しさん
2019/03/06(水) 00:13:14.35ID:twKwvQwO (1)か(2)を好みに応じて
214デフォルトの名無しさん
2019/03/06(水) 00:17:08.38ID:URVwFrjm 特に何もないなら2
templateと組み合わせるなら1とか3は多用するけど4は無いな
templateと組み合わせるなら1とか3は多用するけど4は無いな
215212
2019/03/06(水) 00:21:02.86ID:pU9AS85W ありがとうございます
(2)でやってみることにします
(2)でやってみることにします
216デフォルトの名無しさん
2019/03/06(水) 00:32:13.90ID:Uli2bEJM 1 は、どうして君はすべての関数を、static 関数にできると思ったの?
static関数と、関数のライブラリ・モジュール化は関係ない
3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの?
インスタンスの関数は、他の言語ではメソッドと言って、
そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。
つまり、各インスタンスで値が異なるもの
メソッドは、一般的な関数とは異なる。
メソッドや一般的な関数と、関数のモジュール化は関係ない
例えば、Ruby では、
Math.log2( 8 ) #=> 3.0
このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
static関数と、関数のライブラリ・モジュール化は関係ない
3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの?
インスタンスの関数は、他の言語ではメソッドと言って、
そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。
つまり、各インスタンスで値が異なるもの
メソッドは、一般的な関数とは異なる。
メソッドや一般的な関数と、関数のモジュール化は関係ない
例えば、Ruby では、
Math.log2( 8 ) #=> 3.0
このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
217212
2019/03/06(水) 00:42:25.73ID:pU9AS85W そう言われるとそうですね
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
218デフォルトの名無しさん
2019/03/06(水) 01:06:06.33ID:Riy5qgFP >>214
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。
219デフォルトの名無しさん
2019/03/06(水) 01:10:14.42ID:MDLmYlCa >>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…
同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…
同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う
220デフォルトの名無しさん
2019/03/06(水) 01:13:13.20ID:paKD8ls/ 曖昧さは、利点にも欠点にもなりうる。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。
221デフォルトの名無しさん
2019/03/06(水) 01:14:08.29ID:MDLmYlCa >>219訂正
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全
一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全
一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
222デフォルトの名無しさん
2019/03/06(水) 01:21:31.24ID:MDLmYlCa224216
2019/03/06(水) 02:00:53.56ID:Uli2bEJM Ruby では、関数名のバッティングを避けるため、2重に囲む。
module 内にclass か、class内にclassを作る
module Net
class HTTP end
class FTP end
end
# インスタンス
Net::HTTP.new
Net::FTP.new
module 内にclass か、class内にclassを作る
module Net
class HTTP end
class FTP end
end
# インスタンス
Net::HTTP.new
Net::FTP.new
225デフォルトの名無しさん
2019/03/06(水) 02:06:24.72ID:Riy5qgFP >>224
rubyボットはお呼びでないからもう巣に帰ってくれ
rubyボットはお呼びでないからもう巣に帰ってくれ
226216
2019/03/06(水) 02:12:57.91ID:Uli2bEJM static みたいな複雑な概念を、初心者が理解するのは難しい
スコープを限定する意味と、生成・破壊のタイミングの違いと、
2つの異なる概念を使うから、難しい
C++ は、すべてのリソースの生成・破壊のタイミングを追っかけるだけでも、大変
ドワンゴ江添の本「C++11/14 コア言語」にも書いてあるけど、
呼ばれる関数を探索する方法に、Andrew Koenig が提案した、実引数依存の名前探索 (ADL)もある
実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、
呼び出す関数を探索 (lookup)する仕組みのことである。
英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる
スコープを限定する意味と、生成・破壊のタイミングの違いと、
2つの異なる概念を使うから、難しい
C++ は、すべてのリソースの生成・破壊のタイミングを追っかけるだけでも、大変
ドワンゴ江添の本「C++11/14 コア言語」にも書いてあるけど、
呼ばれる関数を探索する方法に、Andrew Koenig が提案した、実引数依存の名前探索 (ADL)もある
実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、
呼び出す関数を探索 (lookup)する仕組みのことである。
英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる
227デフォルトの名無しさん
2019/03/06(水) 02:46:55.34ID:Riy5qgFP228デフォルトの名無しさん
2019/03/06(水) 04:34:02.55ID:3uIPjLtJ >>227
#激同
#激同
229デフォルトの名無しさん
2019/03/06(水) 06:59:23.47ID:3Q0pfzsC 質問(ネタ振り)に対して見当違いな返答は混乱の元ってのはその通りとして。
読者の立場では、話題が広がってくのは嫌いじゃない。
投稿者の意見として消化しきれてなくても、
参考資料として「誰それの書いたナントカって本では…」と
紹介してくれるのも有難いし。
その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
読者の立場では、話題が広がってくのは嫌いじゃない。
投稿者の意見として消化しきれてなくても、
参考資料として「誰それの書いたナントカって本では…」と
紹介してくれるのも有難いし。
その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
230デフォルトの名無しさん
2019/03/06(水) 09:56:40.41ID:mg6kC0Yg >>205
SQLの話ですか(苦笑)
SQLの話ですか(苦笑)
231デフォルトの名無しさん
2019/03/06(水) 18:18:48.94ID:paKD8ls/ 名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。
namespace hoge {
namespace {
int foobar = 1;
};
};
namespace hoge {
namespace {
int foobar = 1;
};
};
232デフォルトの名無しさん
2019/03/06(水) 21:53:00.33ID:paKD8ls/ 64bit環境で文字列ストリームクラスstd::ostringstreamのインスタンスのスタックサイズが、
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?
233はちみつ餃子 ◆8X2XSCHEME
2019/03/06(水) 22:13:52.26ID:7/fqDaVy234デフォルトの名無しさん
2019/03/06(水) 22:36:11.10ID:cpQrrMgl 継承してるしデータとして保持しておくものでもないしな
235デフォルトの名無しさん
2019/03/06(水) 23:24:49.53ID:TjQtzcPT >>232
質問と関係ないけどスタックサイズって何かわかってないだろ
質問と関係ないけどスタックサイズって何かわかってないだろ
236デフォルトの名無しさん
2019/03/07(木) 01:12:44.42ID:FDOfvyow このあとスタックがおいしくいただきました
237デフォルトの名無しさん
2019/03/07(木) 01:36:59.97ID:7rstSYcJ ostream, ofstream, ostringstreamのスタックサイズはgccとVS2017でそれぞれ以下のようになる。
gcc: ostream=112, ofstream=264, ostringstream=232
VS2017: ostream=272, ofstream=512 ostringstream=376
どうよ?
gcc: ostream=112, ofstream=264, ostringstream=232
VS2017: ostream=272, ofstream=512 ostringstream=376
どうよ?
238237
2019/03/07(木) 01:39:26.14ID:7rstSYcJ 間違えた。gccとVS2017は逆です。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
239デフォルトの名無しさん
2019/03/07(木) 01:41:48.62ID:1uoKMGSD 組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第
240237
2019/03/07(木) 01:45:06.81ID:7rstSYcJ Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。
241デフォルトの名無しさん
2019/03/07(木) 01:45:09.29ID:E2AqWV/D その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- 維新議員、キャバクラマネー返金へ→「今回は返金する」「ポケットマネーでやるには限界がある」 [834922174]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪
- 【ろんりの教室】高市早苗、既に詰み。レーダー問題で中国と開戦しない場合支持者が弱腰だと離れ、開戦したら戦争は秒で負ける。QED [517791167]
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
- 野党が“おこめ券”追及 高市早苗「鈴木農水大臣がお米券大好きなんよ」😹 [817148728]
- 日本人の主食、小麦(パスタ、パン、うどん)になる 米食ってる奴は非国民 わしゃうろんがええよ [402859164]
