かなりシンプルな質問私は思うが、ウェブ上のどこからでもそれに関する議論を見つけるのが難しい。私はトリプルドットを何年も何度も関数のパラメーターとして見てきました。そして、私はいつも、それが "あなたがここにとどまるもの"を意味すると思っていました。昨夜まで、私はそれらと関数をコンパイルしようと決めました。私の驚いたことに、それはMSVC2010で警告またはエラーなしでコンパイルされました。それとも、少なくとも、それは登場しました。私は本当にわからないので、私はここで尋ねると思った。仮想ボイドfoo(...)の "..."の意味は?= 0 ;?
答えて
これらはva_argsまたは可変数の引数です。たとえば、
と呼ばれます。基本的に、この関数は任意の数の非クラス型の引数を受け入れます。
トリプルドットは、機能がvariadicである(つまり、可変数のパラメータを受け入れる)ことを意味します。しかし、使用するには少なくともパラメータが必要です。ただ "..."を持つことは、使用可能な移植可能宣言ではありません。
ときどきバリデーション関数の宣言は、オーバーロードの解決の優先順位のためだけに使用されます(つまり、特定のテンプレートインスタンス化が失敗または成功するように宣言されている場合、バリデーション関数自体は実装されません)。このテクニックの名前はSubstitution failure is not an error (SFINAE)です。
[SFINAE](http://en.wikipedia.org/wiki/SFINAE)の様々なアプリケーションは、後者が使われる場所です。 –
回答ありがとうございました。私はこの種のハンドウォーキング技術の大ファンではありませんが、確かに人気があります。 – 6502
これは、引数の型とその数が指定されていないことを意味します。あなたがよく知っている具体的な例は、printf(char *, ...)
のようになります。もしprintfを使うなら、フォーマット文字列の後に好きなものを置くことができ、コンパイラによって強制されません。
printf("%s:%s",8)
は、 "expected"引数が与えられた場合と全く同じようにコンパイラを経由します。printf("%s:%s", "stringA", "stringB")
。
実際に必要でない限り、コンパイル時に実行時エラーが発生する可能性があるため、避けてください。あなたの関数が受け入れることができる引数に有限の、列挙可能なバリエーションがある場合は、オーバーロードによってそれらを列挙することをお勧めします。
- 1. 仮想ボイドfuncFoo()const = 0と仮想ボイドfuncFoo()= 0の違い。
- 2. 仮想CPUの意味は?
- 3. C++コンパイル中に '仮想メソッド...ただし非仮想デストラクタ'警告の意味は何ですか?
- 4. "?" $ {foo :?}のbashでの意味ですか?
- 5. Handler.sendEmptyMessage(0)のゼロの意味
- 6. regcmpパターン$ 0意味
- 7. pythonグループ(0)の意味
- 8. 抽象的な仮想的に同じ意味ですか?
- 9. Objective Cの仮想ボイドと同等のもの - gamestate技法での使用
- 10. MongoDBのBinData(0、 "e8MEnzZoFyMmD7WSHdNrFJyEk8M =")の "0"の意味は何ですか?
- 11. クランアセンブリ出力「BB#0」意味
- 12. メソッドをオーバーライドするとき、仮想キーワードはどういう意味ですか?
- 13. のpython:sys.argvの[0]の意味公式ドキュメント
- 14. C#コードの{0} \\ {1}の意味
- 15. C++では "= 0"は何を意味しますか?
- 16. 呼び出しの意味は何ですか:foo(function(params){...});
- 17. スイッチ(!0)意味はなんですか?
- 18. if(x){foo();の違い}とx? foo():0;
- 19. $( '#div')[0]で '[0]'はどういう意味ですか?
- 20. fooはどういう意味ですか?
- 21. 仮想モニタ/仮想ディスプレイデバイスの作成
- 22. 純粋仮想と仮想の違い
- 23. 仮想の間のC++の差= 0;そして空の関数
- 24. "(obj1.compareTo(obj2)<= 0)?one:2"意味?
- 25. は、仮想アドレス
- 26. 連想配列の意味は何ですか?
- 27. 仮想継承
- 28. 仮想パスの変更
- 29. 仮想アドレスと仮想アドレス空間の理解
- 30. C++の仮想デフォルトデストラクタ
真。彼らはCの時代からの古いハックであり、型の安全性の欠如のためにC++では本当に推奨されていないことに注意してください。つまり、彼らの用途はありますが、通常はC++の機能でより良い選択肢を見つけることができます。 (btw、mic?gamedev.plからのマイク) – Kos
を除いて、すべての例外を「キャッチ」したいという怠け者を除いて! ;) – Nim
絶対に、個人的に私は常にそれらを避けようとします。そして、いいえ、私はgamedev.plからマイクではありません。 – Mic