[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 05/16 09:46 / Filesize : 287 KB / Number-of Response : 1022
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.102【環境依存OK】



1 名前:デフォルトの名無しさん [2017/11/04(土) 16:33:35.07 ID:NYxCuvMY.net]
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1500329247/

438 名前:デフォルトの名無しさん [2018/04/03(火) 00:51:55.59 ID:cU9BUIMs.net]
>>416-417
プリコンパイルヘッダが汚れたり無駄にでかくなったりするからな

439 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:02:56.47 ID:FKLo0jPW.net]
以下のboost::factoryを使う練習用コードにおいて
https://wandbox.org/permlink/K1TIhC61VQztTbOd

map<string, boost::function<base* (int)>> factories;
とするとコンパイルエラーになり、ググって見つけた方法で
map<string, boost::function<base* (int const&)>> factories;
とすると何故かコンパイルが通り、問題なく動作します。
コンストラクタの引数が実際の int ではなぜ駄目なんでしょうか?

440 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:48:18.62 ID:JvEghgri.net]
>>417
実装依存のヘッダファイルの場合とか、ユーザに事前にincludeしろとは言えないケースもあるよ

441 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:16:15.79 ID:1GcrBwMo.net]
stackoverflow では boost::factory が引数の参照渡しを前提にしてるから、とあるな。
実際 factory 以外の普通の関数なら問題ないし

442 名前:デフォルトの名無しさん [2018/04/03(火) 02:31:59.43 ID:uUh7wFma.net]
dxd9みたいにincludeすると可笑しくなるヘッダもあるしなーω

443 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 08:56:24.86 ID:1fV6RHaF.net]
>>423-424
先頭6文字だけ見て一意に決まることが条件で、名前の長さ自体に制限はない、
じゃなかったかな。大文字小文字は同一視で。

444 名前:デフォルトの名無しさん [2018/04/03(火) 11:32:26.11 ID:R6gDm2yr.net]
_st とか _s とかごちゃごちゃ付き始めたころからつまらなくなった

445 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 11:42:41.83 ID:MWvT17WL.net]
ほんとそれ

446 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 11:43:28.33 ID:Z1fbtkqU.net]
>>433
公式ドキュメントにはさらりと「技術的理由によりfunction objectに渡す引数はlvalueでないと駄目」と書いてあるのみなので、さっぱり理解できませんでした。
そもそもコンストラクタbase (int const&)は定義していないのにコンパイルが通るのが不思議・・・

結局 boost::bind(boost::factory<derived*>(), _1); が何しているのか理解しないと先に進めなそうですね。



447 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 12:17:26.04 ID:1GcrBwMo.net]
そこ bind しなくてもいいんじゃないだろうか

448 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 13:48:08.68 ID:Z1fbtkqU.net]
>>439
引数のある関数の場合はboost::bindを使うのではないでしょうか?
いちおう公式にもその例が書いてあります。

ちなみにどんぴしゃな質問がstackoverflowにあり、Answerには親切にDemoまで付けてくれてて、
速攻で解決したと糠喜びしたんですが見事にコンパイルエラーでした。
https://stackoverflow.com/questions/37137117/passing-arguments-in-constructor-with-boost-factory

449 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 15:04:56.72 ID:rDNMxPWT.net]
>>440
引数を部分的に何かにbindしたfunctionを作るのがbindなわけで、
(add(a,b) の a だけ1にbindしてadd1を作るとか)
何もbindせず引数の順序も同じなら

factories["derived"] = boost::factory<derived*>();

で良い

450 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:06:46.13 ID:t1HAuKeq.net]
>>441
確かにbindのそもそもの目的はそれですよね>(add(a,b) の a だけ1にbindしてadd1を作るとか)
仰る通りの書き方でコンパイルも実行も通りました。
ただ、ググった限り引数のある場合はbindをかます例しか見つからなかったです。
「bindが必要」と明言してる人すらいて、結局よくわからないです・・・

その後、いくらコンパイルも実行も問題ないとはいえ実際のコンストラクタとは違うのを
boost::function<〜> に指定するのはなんとも気持ち悪く思い、試行錯誤したところ
boost::forward_adapter を使う方法を見つけました。
https://wandbox.org/permlink/D3Q75cgRNR43Nulc

ヒントとなったのは以下のサイトでした。
https://lists.boost.org/Archives/boost/2017/02/232695.php

正直なぜこれで通るのか完全には理解していませんが、とりあえずの解決とします。
ご助言どうもありがとうございました。

451 名前:はちみつ餃子 mailto:sage [2018/04/05(木) 03:23:00.79 ID:3RJ8YXR4.net]
>>442
公式にドキュメントがあるだろう。
なんでググりまくるんだ?

452 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 07:41:24.21 ID:ev3xPrwL.net]
>>443
公式ドキュメントはこれです。
https://www.boost.org/doc/libs/1_66_0/libs/functional/factory/doc/html/index.html

ここに以下のような「stringキーzとコンストラクタのmapにコンストラクタを登録」するという方法が書いてあればよかったのですが・・・
map<string, boost::function<〜>> factories;
factories["derived"] = 〜

でもboostの公式ドキュメントはこんなものというか、隅から隅まで説明しないわからない素人はお断りってやつですよね。

453 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:37:25.23 ID:LhrJ/WaU.net]
質問です.

以下のようなことが書いてあるファイルを読み込んで,

文字列,数値,...,数値,数値...数値
...

str, a[0],...a[n-1],b[0],...b[m-1]
という配列に入れたいです.
nとmは可変の場合,どうすればよいか教えてください.
スッキリとした書き方が知りたいです.
std::string str;
double a[n],b[m];
です.

454 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:51:56.82 ID:8vk43UVU.net]
std::string知ってるなら
std::vectorを使えば早かろう
std::vector<double> a, b;
a.resize(n);
b.resize(m);
a[0] = ...

455 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:54:56.53 ID:AQLHpii5.net]
可変の n, m が読み込む前に確定するのか
ファイルの記述内容から n, m が確定するのか

456 名前:445 mailto:sage [2018/04/05(木) 15:16:31.21 ID:LhrJ/WaU.net]
>>447
今回はstringを見て,nとmを決めます.
str="a"ならn=2,m=3のような感じです.
>>448
読み込み方が分かりません.すいません.
Google先生に聞いてこんな感じのプログラムを書いてます.
std::string line;
std::ifstream infile("hoge.dat");
std::getline(infile,line);
sscanf(line.data(),...//どう書くの?



457 名前:デフォルトの名無しさん [2018/04/06(金) 18:11:46.66 ID:CDFchtjR.net]
void Show(const IntArray& array){
...
}

というような関数内で、 array の const メンバ関数ではないメンバ変数を変更しないメンバ関数を
使っているとコンパイルエラーになりますが、それはなぜでしょうか?

コンパイラーはarrayのメンバ関数がメンバ変数を変更していないことはソースコードから
分かるのではないでしょうか?

そういうチェックをするコンパイラを作るのは難しいからということでしょうか?

458 名前:デフォルトの名無しさん [2018/04/06(金) 18:16:26.47 ID:CDFchtjR.net]
const メンバ関数の中でメンバ変数の内容を変更しているとコンパイルエラーになります。

ということはどのみちメンバ変数を変更しているかどうかはチェック可能ということですよね?

459 名前:デフォルトの名無しさん [2018/04/06(金) 18:17:58.47 ID:KjpzCJso.net]
void Show(IntArray& const array)

460 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 19:04:45.09 ID:zGB1Hjc3.net]
>>449
コンパイル単位を越えたらチェックするのは難しいし言語の壁を越えたら不可能に近いから
中途半端な事をするくらいならconst明示されてるかという線引きの方が分かり易い

461 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 19:43:28.40 ID:EFVHWowI.net]
>>449
難しいというか不可能だからですよ
呼び出す関数はまだコンパイルされてないかもしれないしまだソースコードもないかもしれない

462 名前:デフォルトの名無しさん [2018/04/07(土) 02:18:30.08 .net]
>>449
メンバ変数を変更しないなら素直にメンバ関数にconst付けれや

463 名前:デフォルトの名無しさん [2018/04/07(土) 12:11:18.49 ID:BRhgC8GS.net]
コンタミュ連鎖地獄ω

464 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 06:44:19.17 ID:fQMOYFpe.net]
>>449-450 の質問者は、分割コンパイルにまだ慣れてないと思えるなぁ。
ソースファイルを分けてみればピンと来るかと。

片方をソースなしのオブジェクトやライブラリにしないとダメかな。

465 名前:デフォルトの名無しさん [2018/04/08(日) 07:56:39.59 ID:peS6i82l.net]
C#のフォームからオフィスを立ち上げ、オフィスを終了したら立ち上げたフォームに
戻るようにするにはどうした出来ますか?

466 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 08:06:10.70 ID:hcdQKQ5m.net]
>>457
COM使えばできるけど、スレタイも読めないお前にできるかどうかはわからん



467 名前:デフォルトの名無しさん [2018/04/08(日) 08:13:28.62 ID:peS6i82l.net]
そんなことは当たり前ですね。その方法が説明できますか?

468 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 08:25:17.68 ID:28momF5z.net]
>>459
できるがスレチだからな

469 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 08:29:30.70 ID:fQMOYFpe.net]
C#のことはC#のスレッドで尋ねればいいでしょ、てお話。
C/C++のスレッドに質問を持ち込むより確実で早いと思うよ。

470 名前:デフォルトの名無しさん [2018/04/08(日) 08:37:40.87 ID:peS6i82l.net]
あ、ごめん。++が#に見えた。でも普通は++を#に書き間違ったんだろうと判断すると
思うが。

471 名前:デフォルトの名無しさん [2018/04/08(日) 08:39:38.92 ID:peS6i82l.net]
ところでC++のフォームからオフィスを立ち上げ、オフィスを終了したら立ち上げたフォームに
戻るようにするにはどうした出来ますか?

472 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 08:44:37.90 ID:TD+h4nB6.net]
>>462
判断する訳ねーだろガイジか

473 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 08:50:08.72 ID:D3gITJpj.net]
>>463
CreateProcess() win32API スレへgo

474 名前:デフォルトの名無しさん [2018/04/08(日) 08:56:58.76 ID:peS6i82l.net]
>>465 thanks yey!

475 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 08:58:12.94 ID:hcdQKQ5m.net]
>>463
>>458

476 名前:デフォルトの名無しさん [2018/04/08(日) 09:14:13.86 ID:peS6i82l.net]
>>464
it is conditional on your ability, although its mean applying in the case of a usual Japanese.



477 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 09:23:25.66 ID:tUhRYmJS.net]
真性の障害者手帳持ちだったか

478 名前:デフォルトの名無しさん [2018/04/08(日) 09:44:32.26 ID:nHJNjK41.net]
main関数の中でstaticを使う意味は何でしょうか?

ロベールの本のpp.318-319にそのような例が出てきて意味不明です。

479 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 11:18:10.91 ID:4aXSD6ZQ.net]
キチガイに触るな

480 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 11:47:04.28 ID:fQMOYFpe.net]
ロベールの本を持ってないんで、適切な回答じゃないかもしれんが。

main() 関数の中でstatic変数を使う意味といえば、
単純型の初期化の処理時間を回避したいか、
セクション(変数のメモリ配置)の説明のためか、
「staticなインスタンスのコンストラクタはmain()より前に実行される」
ていう話の前フリかなぁ。

481 名前:はちみつ餃子 mailto:sage [2018/04/08(日) 13:50:30.74 ID:RvzgDq0H.net]
>>472
ローカル変数に static 変数が付いていた場合は最初に通過したときに初期化されるルール。
(コンストラクタもそのときに走る。)
これは C のときから変わってないよ。

482 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 14:41:24.43 ID:b4O4Usd0.net]
普通に考えると、
単にスコープをローカルにしたいってのがまず考えられる

483 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 14:46:24.29 ID:drN9+cfC.net]
>>473
横からだけど訂正乙
初心者が読んで間違えて覚えるので、初心者スレでは嘘を書かないように特に気をつける必要ある

484 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 15:12:26.18 ID:nkM5b3tX.net]
>>474
mainの中だから意味無い

っつーかstaticは二つの意味があって全然別物
スコープと性的と混ぜるな危険

485 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 15:18:18.11 ID:4aXSD6ZQ.net]
覗きでもやってんのか?

486 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 15:20:01.32 ID:drN9+cfC.net]
>>474
関数内でstatic変数を使うのは静的変数のスコープを関数ローカルにしたいからでは、
というごく当たり前の文意だろ普通に読むと。

どう読むと
関数内だからファイルローカルの話とか関係ない!勘違いするな!となるんだよ
自分以外は文法もセマンティックもろくに知らないという前提はやめるべき



487 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 20:18:51.07 ID:B7amW+qm.net]
>>470
スコープはmaim( )内にしたいけどスタックは使いたくないってケースかな

488 名前:はちみつ餃子 mailto:sage [2018/04/09(月) 01:15:21.26 ID:fbTUuQs/.net]
>>470
ウェブ版をざっと探してみたら main 内で satatic 変数を使ってるのはこれだけだったんだけど、
これのことか?
www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02037.html

489 名前:472 mailto:sage [2018/04/09(月) 08:00:59.66 ID:4Qmw3/oH.net]
関数スコープのstaticなクラス・インスタンスのコンストラクタは
main()以前でなく、最初にその部分が実行されたときに初期化されるんだっけか。

static なら一律にmain()の前、基本型や単純な構造体のstaticはロード時に初期化、
だと勘違いしていた。
訂正してくれてありがとう。そして間違ったことを書いてすまぬ。

490 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 08:28:16.55 ID:arNj8dw4.net]
初期化が固定データのメモリコピーで済むものはロード時に初期化するコンパイラが普通

491 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 14:14:56.77 ID:iBEYls0Z.net]
いつやっても同じものはいつやっても同じだからな

492 名前:デフォルトの名無しさん [2018/04/09(月) 15:10:57.47 ID:cuDt6une.net]
>>480

ありがとうございます。本とは内容が違うようです。

int main() {
static const double ARRAY1[] = {1, 2, 3, -1};
static const double ARRAY2[] = {0.5, 1.5, ,-1};
static const double ARRAY3[] = {-1};
static const double* const ARRAY[] = {ARRAY1, ARRAY2, ARRAY3};


}

というコードが該当箇所です。

493 名前:片山博文MZ mailto:sage [2018/04/09(月) 15:13:59.63 ID:4wbW7ji0.net]
staticを付けなければスタックに確保されるかもしれない。その場合、どうしても遅くなる。

494 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 15:16:14.76 ID:cuDt6une.net]
>>485

でも、速さがどうとかいうことについては何も書いていないんです。
staticを付けていることについては何の説明もありません。

495 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 15:31:05.83 ID:iBEYls0Z.net]
>>486
>>485はきちんとした回答だと思うよ。
配列が大きくなれば顕著になる。
「その本に書かれていないから」と拒絶するのは憲法に基づいて自由だけど

496 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 15:38:58.45 ID:7w9BViIO.net]
定数だからstatic constにした
というだけのことでそれ以上の意味はないと思うが



497 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 15:39:52.73 ID:Cpp6LEO8.net]
その変数をコンパイル時点で確定しようとしている。
ローディング時間も早くなる

498 名前:はちみつ餃子 mailto:sage [2018/04/09(月) 15:40:56.15 ID:fbTUuQs/.net]
>>487
だぶんだけど、 >>486 が言おうとしているのは「>>485 だとしたら入門書としては不親切だよね!」って話じゃねーの。

499 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 15:57:19.85 ID:XexqtlKa.net]
>>484
ROMとRAMに別れてる環境、
つまりほとんどの小規模な組み込み環境だと
static const は通常ROMに配置される
要するにRAMの節約

速度は逆にRAMの方が速いのが普通

500 名前:デフォルトの名無しさん [2018/04/09(月) 16:42:59.75 ID:cuDt6une.net]
クラスの定義をヘッダファイルに書くときに、

privateなメンバまで書くのはなぜですか?

必要ないように思います。

501 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 16:45:14.78 ID:cuDt6une.net]
>>484

みなさん、ありがとうございました。
速度について気にしているのなら、ロベールにはそう書いてほしかったです。
例では、非常に小さな配列ですから速度について気にしていることは読み取りにくい
ように思います。

>>488
定数だから const にしたというのなら分かるのですが、なぜstaticをつけるのでしょうか?

502 名前:デフォルトの名無しさん [2018/04/09(月) 16:46:43.49 ID:cuDt6une.net]
>>492

private なメンバはむしろ、クラスのメンバ関数を実装する .cpp ファイルに書いた方がいいように思います。

503 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 16:48:38.97 ID:EW8VU1tO.net]
sizeof で大きさ取れなくなるね

504 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 16:50:38.53 ID:cuDt6une.net]
>>495

なるほど、ありがとうございました。

505 名前:片山博文MZ mailto:sage [2018/04/09(月) 16:52:05.66 ID:4wbW7ji0.net]
>>494
pimplイディオムで、クラス詳細を隠蔽できるよ。

506 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 18:17:18.89 ID:R2K+YmFs.net]
>>493
あの部分では特別に速度を意識した記述ではなく普通に意識する程度の事だから一々説明されないということではないかな
速度や使用メモリを気にするのはCやC++プログラマの癖または習慣みたいなもので特にロベールみたいな昔の人は体に染み付いているだろうからね



507 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 18:28:43.00 ID:arNj8dw4.net]
>>493
今回はたまたまmainであり、
たまたま小さなデータだったというだけで、
より汎用性の高いコードにするのはプログラミングの基本

staticを付けるメリットは
・データ構造の初期化が1回(ROMだと0回)で済む
・スタックを浪費しない
・関数を抜けてもデータが保持される
・番地が固定

デメリットは
・関数を通らなくても初期化される
・関数外でもメモリを使う

508 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 18:32:13.19 ID:arNj8dw4.net]
一番重要なのは>>491
PCプログラムしかやらない人は知らないだろうけど

509 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 18:49:30.99 ID:m9zaOBXx.net]
test2の形だと上手く動作しないのですが何故でしょうか
環境はvc6とstlport521です

void test1(const char* cstr, ...) {
char buf[1024];
va_list args;
va_start(args, cstr);
vsprintf(buf, cstr, args);
va_end(args);
printf(buf);
}
void test2(std::string str, ...) {
const char* cstr = str.c_str();
char buf[1024];
va_list args;
va_start(args, cstr);
vsprintf(buf, cstr, args);
va_end(args);
printf(buf);
}
void main() {
test1("hello1 %d\n", 123);
test2("hello2 %d\n", 123);
}
//結果
//hello1 123
//hello2 1819043176

510 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 18:56:07.59 ID:arNj8dw4.net]
引数を std::string &str, ... にすればなおる

511 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 19:06:25.54 ID:m9zaOBXx.net]
引数を参照とポインタでも試してみましたが結果は変わらなかったです

void test3(std::string& str, ...) {
const char* cstr = str.c_str();
・・・
void test4(std::string* str, ...) {
const char* cstr = str->c_str();
・・・
void main() {
・・・
std::string str3("hello3 %d\n");
test3(str3, 123);
std::string str4("hello4 %d\n");
test4(&str4, 123);
}
//結果
//hello1 123
//hello2 1819043176
//hello3 1819043176
//hello4 1819043176

512 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 19:14:40.36 ID:arNj8dw4.net]
va_start(args, cstr);

なんでcstr?

513 名前:片山博文MZ mailto:sage [2018/04/09(月) 19:15:26.84 ID:4wbW7ji0.net]
va_startの指定が間違ってる。

514 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 19:22:49.12 ID:m9zaOBXx.net]
ああなんとなく意味が分かってきました
va_startはマクロであってcstrの部分は引数の変数名が指定されなければならないということですかね

515 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 19:41:37.65 ID:m9zaOBXx.net]
こういうコードにすると期待した動作をするようになりました
ありがとうございました

void test5(std::string str, ...) {
char buf[10

516 名前:24];
va_list args;
va_start(args, str);
vsprintf(buf, str.c_str(), args);
va_end(args);
printf(buf);
}
void main() {
・・・
test5("hello5 %d\n", 123);
}
//結果
//hello1 123
//hello2 1819043176
//hello3 1819043176
//hello4 1819043176
//hello5 123
[]
[ここ壊れてます]



517 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 19:45:39.82 ID:yhCzF70B.net]
ついでに言うと va_start の第二引数については仕様上結構な制限、
各 argument に課される制約と同じ制約がある
配列はダメ、参照はダメ、基本型が格上げされる型との互換性が必要、など
最後のはクラスオブジェクトや float はダメということ
仕様として結果が不定なだけで違反してもエラーにはならないし
意図した通りに動くことも多い

詳しくは default argument promotions va_start
で検索

518 名前:片山博文MZ mailto:sage [2018/04/09(月) 20:00:39.54 ID:4wbW7ji0.net]
va_listとC++は、相性が合わないんだよな。呼び出し側でc_str()するとか。

519 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 20:14:56.03 ID:arNj8dw4.net]
相性が合わない

520 名前:はちみつ餃子 mailto:sage [2018/04/10(火) 00:44:35.92 ID:141aKXKv.net]
特に強い理由がなければ variadic template を使った方が安全だし簡単に書ける。

template<class... T>
void test6(std::string str, T... args) {
char buf[1024];
std::sprintf(buf, str.c_str(), args...);
std::printf(buf);
}

521 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 08:29:44.17 ID:aAychsYe.net]
strがなんで値渡し?
アホなの?

522 名前:はちみつ餃子 mailto:sage [2018/04/10(火) 11:04:36.10 ID:141aKXKv.net]
クソザコです

523 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 21:38:17.71 ID:sbGIaKQd.net]
なにこのバッファ溢れさせてくださいって釣り針

524 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 07:10:13.25 ID:5X4H9iqq.net]
色々とクソコテクオリティ

525 名前:はちみつ餃子 mailto:sage [2018/04/11(水) 11:17:54.25 ID:ZSzBt9iE.net]
えー、可変長引数の例にしただけなので、そんなどうでもいいとこを言われても困るよ。

526 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 12:37:28.30 ID:FCilzVhB.net]
そう言うところにしか突っ込めない雑魚の相手するなよ...



527 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 12:58:23.58 ID:0UD5Vzkt.net]
わざわざ互換性を下げなくてもいいのに

528 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:16:27.05 ID:0UD5Vzkt.net]
>>511
なんでbufに一旦書いてるの?
直接printfじゃだめなん?

529 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:20:49.36 ID:yjo2onbY.net]
実行目的ならvprintf使うんじゃね?

530 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:29:16.68 ID:0UD5Vzkt.net]
普通はね
クソコテがコードサイズ、互換性、実行速度など
全て犠牲にしてもテンプレートを使いたかったみたい

531 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:46:51.95 ID:4xNEGOrU.net]
va_start の第2引数の型の制限を知らなくてもor気にしなくても良いように
C++ らしく va_start 使わない例を出したんだろ…

と書いてはみたが、
そういう意図が通じるわけないか
通じる人は最初からわかってるもんな

532 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:49:14.05 ID:4xNEGOrU.net]
そもそも何でbufにって質問は
コメント元の>>507にすべきだろ

533 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:50:42.77 ID:IGuJq2PQ.net]
こんな辺境ですらイキリ散らすなんて呆れる他ありませんわ

534 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 21:54:51.56 ID:5X4H9iqq.net]
>>522
誰も求めてないwww

535 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 22:01:42.55 ID:5X4H9iqq.net]
危険てんこ盛りなコードの危険性が低い部分をなおしてどうすんの?アホなの?

オナニーは隠れてやれ

536 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 22:53:04.70 ID:4xNEGOrU.net]
c++ スレで variadic template 紹介されてこの反応



537 名前:はちみつ餃子 mailto:sage [2018/04/12(木) 00:24:16.88 ID:csgoYI7G.net]
>>526
危険性が高いかどうかは重要じゃなくて、話題のテーマに近いかどうかだろ。
本題に関係ないところなんてどうでもいいじゃないの。

538 名前:デフォルトの名無しさん mailto:sage [2018/04/12(木) 02:27:29.73 ID:iYyApZ27.net]
>>501とvariadic templateは関係ないわけだが






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<287KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef