C++相談室 part141

■ このスレッドは過去ログ倉庫に格納されています
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
次スレを立てる時は本文の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
2019/03/03(日) 10:23:45.41ID:OccEVyH1
>>140
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
2019/03/03(日) 10:26:03.14ID:0vjeZZiI
>>141
そのポインタは渡した先でどうなってると思う?
頭悪すぎだろ
2019/03/03(日) 10:31:40.12ID:8Bef4COm
よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ
2019/03/03(日) 10:35:18.92ID:OccEVyH1
>>142
new したポインタを捨ててしまっている記述に限り、処理系で delete する、と決めるのですから「ポインタを渡した先」というのは存在しないことになります

>>143
C++ と Java で classpath ライブラリを共用したいのです!
2019/03/03(日) 10:35:19.96ID:oO/57lY2
make_uniqueがやりたいってことかね
2019/03/03(日) 10:41:59.49ID:OccEVyH1
>>145
スマートポインタを導入せずとも、ナマポであっても classpath を共用できるようにならないものか
そのためには c++ 処理系にどんな制限or追加を課せばいいか?
2019/03/03(日) 10:47:25.17ID:OccEVyH1
>>142
内容を誤解していました、すみません
あらためて回答します

プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
2019/03/03(日) 10:53:36.82ID:rOejoJLo
>>116
遅レスだけど、テンプレートはcppに隠蔽しようとか考えない方がいいと思う
dllとかにしたいなら別だけど・・
2019/03/03(日) 10:59:02.77ID:kd4WdA4I
javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが
2019/03/03(日) 11:02:05.72ID:AQaNwhGs
・繰り返し構文とgotoの全廃
2019/03/03(日) 11:24:20.63ID:0vjeZZiI
>>147
だからさあ
newして渡した先では殆どの場合はそれをフィールドに入れてるだろ
殆ど100%のケースでは「何もしない」に該当するんだよ
2019/03/03(日) 11:44:43.82ID:lodoh91K
>>147
そのオレオレC++拡張の仕様を自分で決めて自分で実装して公開してみな。
万に一つもないと思うが、それを有用だと思って喜ぶ人がいるかもよ。
2019/03/03(日) 11:58:52.90ID:OccEVyH1
>>151
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
2019/03/03(日) 12:18:50.69ID:kd4WdA4I
>>139
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず

生のnew使わせるなんて今時のc++ではとんでもない悪手
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で別の言語になった印象すらあるわ。
2019/03/03(日) 15:57:24.31ID:8Bef4COm
循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない
もちろんナマポよりは遥かにマシだけど
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();

と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
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/
2019/03/03(日) 17:35:34.30ID:8Bef4COm
>>159
直接初期化とコピー初期化の違いを説明するとクソややこしい話になるんだけど
結論から言えばその場合はどっちも全く同じ
162デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:53:40.63ID:E4UxtVYi
make_shared使った方が良い?
2019/03/03(日) 19:22:53.95ID:8Bef4COm
うん
164デフォルトの名無しさん
垢版 |
2019/03/04(月) 04:26:14.48ID:FZO2lxM7
new 呼び出しが少なければ少ないほど精神衛生に良い。
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も空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
166デフォルトの名無しさん
垢版 |
2019/03/04(月) 06:27:48.33ID:iluilBaY
typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??
2019/03/04(月) 06:31:54.66ID:nFXsjzZK
エイリアス使えば
2019/03/04(月) 06:33:10.80ID:7Cz1/mIW
funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。

string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
2019/03/04(月) 07:56:06.21ID:EZgqhZII
>>165
例外
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)の様に同時に初期化したいとき
どう書けば良いか知りたいです
2019/03/04(月) 17:39:35.24ID:rgTuscQv
C 型が違う
D int*が2から作れない
173デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:03:47.51ID:iluilBaY
>>170
どうもありがとう。
174165
垢版 |
2019/03/04(月) 22:26:16.82ID:eTdHd+Gg
>>168
>>169
ありがとうございます

結局こうすることにしてみました
auto addString = [&result] (std::string&& temp){
 if (temp.empty()){
  throw 0;
 }
 result += temp;
};
try{
 addString(func1(a));
 addString(func2(b));
 ・・・
}catch (...){
 return "";
}
2019/03/04(月) 23:05:47.73ID:IrD+1pkV
void f()
{
 static std::mutex mtx;
 std::lock_guard<std::mutex> lock(mtx);
 //何がしかの処理
}

これっていいの?
2019/03/04(月) 23:25:00.41ID:tJNb7RRD
C++11以降はセーフ、じゃなかったかな。
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
人によってセーフの定義が違ってたりしない?
2019/03/05(火) 01:03:06.00ID:w8adCz4V
C++11以降はセーフになったらしい(キリ
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
2019/03/05(火) 01:04:55.09ID:w8adCz4V
Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法
2019/03/05(火) 01:11:12.97ID:w8adCz4V
もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は

ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
183デフォルトの名無しさん
垢版 |
2019/03/05(火) 01:34:00.08ID:Lvsoqpfj
グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。
2019/03/05(火) 01:38:41.08ID:w8adCz4V
リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス
2019/03/05(火) 01:40:59.82ID:w8adCz4V
あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ

個人的には使わないから知らんが
186デフォルトの名無しさん
垢版 |
2019/03/05(火) 02:16:13.00ID:VDry4yCP
>>171
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
188デフォルトの名無しさん
垢版 |
2019/03/05(火) 03:25:14.57ID:VDry4yCP
なんだろう
この違和感
2019/03/05(火) 04:45:14.68ID:mm49B1QN
ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。

クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
190デフォルトの名無しさん
垢版 |
2019/03/05(火) 04:47:10.42ID:VDry4yCP
inlineは?
191デフォルトの名無しさん
垢版 |
2019/03/05(火) 04:50:23.83ID:xaYVlIsQ
なぜヘッダはクラス限定だとおもったんだ?
それ以前にクラス以外では使用したことがないのか?
2019/03/05(火) 05:01:47.80ID:OG2z9OX5
宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ
2019/03/05(火) 05:18:53.19ID:3HlR5qin
ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
2019/03/05(火) 05:48:49.52ID:mm49B1QN
>>190
inline なので(苦笑


>>191
ハ?
回答の体をなしていない。
> hpp にプロトタイプ宣言を、cpp に中身を書く
というやり方は許容されるという意味か。


>>192
覚えました。それで?


>>193
であれば、今私は複数の cpp ファイルを持つ予定はないので、ヘッダファイルは全く不要ということになります。
2019/03/05(火) 05:55:22.28ID:3HlR5qin
ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
2019/03/05(火) 05:59:24.21ID:mm49B1QN
>>195
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
197デフォルトの名無しさん
垢版 |
2019/03/05(火) 06:13:55.29ID:Lvsoqpfj
>>196
特にないから適当に他人のマネしとけばいいと思う。
198デフォルトの名無しさん
垢版 |
2019/03/05(火) 11:45:31.15ID:HwCl8Q1J
>>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ

staticは付けた方が良いですか?(苦笑
2019/03/05(火) 12:27:38.14ID:mHzXPPXa
内部リンケージにするには static を付けるよりも
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。

インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。

無名 (unnamed) namespace って使う?
2019/03/05(火) 12:35:48.55ID:zIeyIuEy
関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?
201デフォルトの名無しさん
垢版 |
2019/03/05(火) 12:41:35.39ID:xaYVlIsQ
コンパイラ次第だろ
実験
2019/03/05(火) 12:50:59.28ID:zIeyIuEy
VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・
2019/03/05(火) 12:51:22.93ID:fI+Bf2nm
どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
2019/03/05(火) 15:12:40.70ID:pv9Sbimr
>>202
その「ファンクタの方が速い」ってのは、一般的に関数ポインタを介するのと比較して、だよ
理由はインライン展開できるからであって、その実験で差異が出ないのは当然
205デフォルトの名無しさん
垢版 |
2019/03/05(火) 19:05:23.76ID:A2wr9SaM
ストアドよりインデックスのほうが速いよってスレなかったっけ。
2019/03/05(火) 20:02:38.14ID:zIeyIuEy
>>204
なるほど
ありがとうございます
2019/03/05(火) 21:56:22.01ID:+aoESyYJ
>>199
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど

明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし

c++はこういうダメ仕様多過ぎてうんざりだわ
2019/03/05(火) 22:06:02.21ID:fIhIM0AX
腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
2019/03/05(火) 22:21:06.27ID:R3KidTI1
メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか?
2019/03/05(火) 22:30:58.04ID:+aoESyYJ
>>209
まず自分で計測しろ
2019/03/05(火) 23:07:56.79ID:rlRU3gS5
>>209
数によるコスト差0だよ

>>210
計測したことあんの?
2019/03/05(火) 23:19:26.52ID:R3KidTI1
ありがとうございます
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?
2019/03/06(水) 00:13:14.35ID:twKwvQwO
(1)か(2)を好みに応じて
2019/03/06(水) 00:17:08.38ID:URVwFrjm
特に何もないなら2

templateと組み合わせるなら1とか3は多用するけど4は無いな
215212
垢版 |
2019/03/06(水) 00:21:02.86ID:pU9AS85W
ありがとうございます
(2)でやってみることにします
2019/03/06(水) 00:32:13.90ID:Uli2bEJM
1 は、どうして君はすべての関数を、static 関数にできると思ったの?
static関数と、関数のライブラリ・モジュール化は関係ない

3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの?

インスタンスの関数は、他の言語ではメソッドと言って、
そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。
つまり、各インスタンスで値が異なるもの

メソッドは、一般的な関数とは異なる。
メソッドや一般的な関数と、関数のモジュール化は関係ない

例えば、Ruby では、
Math.log2( 8 ) #=> 3.0

このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
217212
垢版 |
2019/03/06(水) 00:42:25.73ID:pU9AS85W
そう言われるとそうですね
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
2019/03/06(水) 01:06:06.33ID:Riy5qgFP
>>214
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。
2019/03/06(水) 01:10:14.42ID:MDLmYlCa
>>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…

同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う
2019/03/06(水) 01:13:13.20ID:paKD8ls/
曖昧さは、利点にも欠点にもなりうる。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。
2019/03/06(水) 01:14:08.29ID:MDLmYlCa
>>219訂正
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全

一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
2019/03/06(水) 01:21:31.24ID:MDLmYlCa
>>220
そのクラスに非staticなメソッドを設けたとたん、
>>219と同じ話でどのFoo::func()が呼ばれるかわからないという不正な動作をする危険性が生じる

驚くべきことに、VC++2010の場合リンカが何のエラーも警告も出さない
それでいてしっかり変な動作になる(a.cppで定義したFoo::func()を呼んだつもりがb.cppで定義された同じシグネチャの別のFoo:func()が呼ばれる
223KAC
垢版 |
2019/03/06(水) 01:53:40.57ID:tePy6oFI
>>216
C/C++では、staticなどキーワードが全く違う複数の意味で使われるから注意な。
224216
垢版 |
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
2019/03/06(水) 02:06:24.72ID:Riy5qgFP
>>224
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などと呼ばれる
2019/03/06(水) 02:46:55.34ID:Riy5qgFP
>>216
>>212の(1)はクラスのstaticメンバ関数のことを言っているのだか、>>216>>226を見てるとそれを理解していないように思える。
いつも書籍や他人の発言を引用して〜〜では、という書き方ばかりしているのを見かけるが、自分の中に落とし込んで理解できてないならわざわざ書き込まないでくれ。
2019/03/06(水) 04:34:02.55ID:3uIPjLtJ
>>227
#激同
2019/03/06(水) 06:59:23.47ID:3Q0pfzsC
質問(ネタ振り)に対して見当違いな返答は混乱の元ってのはその通りとして。
読者の立場では、話題が広がってくのは嫌いじゃない。

投稿者の意見として消化しきれてなくても、
参考資料として「誰それの書いたナントカって本では…」と
紹介してくれるのも有難いし。

その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
230デフォルトの名無しさん
垢版 |
2019/03/06(水) 09:56:40.41ID:mg6kC0Yg
>>205
SQLの話ですか(苦笑)
2019/03/06(水) 18:18:48.94ID:paKD8ls/
名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。

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バイト。
どうよ?
2019/03/06(水) 22:13:52.26ID:7/fqDaVy
>>232
std::ostringstream は文字列の一種というよりも入出力の系統だし、
std::basic_ostream を抱えているのでそんなもんちゃう?
2019/03/06(水) 22:36:11.10ID:cpQrrMgl
継承してるしデータとして保持しておくものでもないしな
2019/03/06(水) 23:24:49.53ID:TjQtzcPT
>>232
質問と関係ないけどスタックサイズって何かわかってないだろ
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

どうよ?
238237
垢版 |
2019/03/07(木) 01:39:26.14ID:7rstSYcJ
間違えた。gccとVS2017は逆です。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
2019/03/07(木) 01:41:48.62ID:1uoKMGSD
組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第
240237
垢版 |
2019/03/07(木) 01:45:06.81ID:7rstSYcJ
Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。
2019/03/07(木) 01:45:09.29ID:E2AqWV/D
その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ
■ このスレッドは過去ログ倉庫に格納されています