でも、私は出来ません。これは法的なC++かCodeFights特有の構文ですか?私はそれを見ることができるように誰かに私にこのような初期設定の名前を教えてもらえますか?C++、ローカル変数(CodeFightsに見られるような)
答えて
コードは合法的なC++ 20になることがあります。理由は次のとおりです。
C++のC宣言の遺産の1つは、複数の宣言を1行にまとめることができることです。
int a, b, c;
ご存知のように、あなたは「基本的な」タイプの保持、ミックスへのポインタと参照を追加することができます。関数の宣言に、この構文の癖を拡張することも合法である
int a, *b, &c = x;
を。以下は、int
を返す関数としてf
を宣言します。適切なコンテキストを考える
int a, b, c, f();
、あなたも同じ行に関数を定義することができます
struct S {
int a, b, c, f() { return 0; }
};
そしてもちろん、あなたがにパラメータを追加することができます関数:
struct S {
int a, b, c, f(float x, double y) { return x + y; }
};
最後のステップは、auto
にそれらのパラメータ型をオンすることで、C++ 20可能性のあるすべての概念提案の一部として、a feature originally planned for C++17。
GCCはすでにこの構文を拡張子としてサポートしています。ここでは完全な例である:
#include <iostream>
struct S {
int a, b, c, f(auto x, auto y) { return x + y; }
};
int main()
{
S s;
std::cout << s.f(1.0, 2.0) << '\n';
}
これは、コードは、半正しいかそう将来的には正しいだろうながらi
、j
とw
がローカル変数ではありませんので、コメントは、されないことを意味し、彼ら
また、C++の「典型的な」使用ではありません。
ファイルスコープであるため、ゼロに初期化されませんか? – AndyG
@AndyG:私の例では、ファイルスコープではなく、 'S'のデータメンバーです。 –
最初にコンパイルしてみてください!
prog.cc:1:38: error: a function-definition is not allowed here before '{' token
int i,j,w,myFunction(auto s, auto v) {
^
これは、C++ 17以降で導入されたエキゾチックな新しい構文かもしれません。 1つのコンパイラと1組のコンパイラフラグを使ってコードをコンパイルしてもそれほど多くのことは証明されません。 –
@ChristianHacklもしそうなら、これは確かに標準ではありません。そして私はその質問がこれにつながることを理解しました。私の答えをどのように改善することを提案しますか? – gsamaras
'auto'パラメータは[concepts for C++ 20](http://en.cppreference.com/w/cpp/language/constraints)の一部であるようです。それが意味することは何でも「無制約のプレースホルダ」... –
- 1. ローカル変数にローカル変数C#
- 2. C#GetFilesローカル変数から
- 3. Codefights整数
- 4. ローカル変数C
- 5. ローカル変数がグローバルにならない
- 6. ローカル変数とメソッドから呼び出される変数の違いは? C#
- 7. Objective-Cのローカル変数とメンバ変数
- 8. C++のグローバル変数とローカル変数
- 9. cの永続ローカル変数
- 10. Arduino/C++ GlobalVarsとローカル変数
- 11. C++ラムダはパラメータ名のようなローカル変数をキャプチャします
- 12. C++関数/変数を名前空間のローカルにするにはどうすればよいですか?
- 13. 関数内の変数はローカルではないようです
- 14. C#エラー:割り当てられていないローカル変数 'datePicker1'の使用
- 15. C#割り当てられていないローカル変数の例外の使用
- 16. C#割り当てられていないローカル変数の使用
- 17. c#sql insert。割り当てられていないローカル変数の使用?
- 18. 割り当てられていないローカル変数 'table'の使用。 C#
- 19. C#割り当てられていないローカル変数の使用理由
- 20. Cコード内の静的ローカル変数によって使用されるメジャーメモリ
- 21. ローカル静的変数に割り当てられた変数、「C」でコンパイルエラーが、成功は、C++ここ
- 22. アームインラインアセンブリでローカルC変数にアクセスするにはどうすればよいですか?
- 23. C#のキーワードのような変数
- 24. vb.netのような変数のオーバーフローc#
- 25. ローカル変数からFullcalendarリフレッシュイベント
- 26. ローカル変数として宣言されたオブジェクトがスタックに割り当てられないようにするにはどうすればよいですか?
- 27. どのようにローカル変数、JavaScriptのグローバルスコープを与える
- 28. ブロックにバインドされたC#式ツリーのローカル変数の宣言
- 29. lamda関数のローカル変数がPythonで変更されないようにするにはどうしたらいいですか?
- 30. Visual Studio 2010によるローカル変数の奇妙なレポート
私は上記の@Ron:sのアドバイスに同意しますが、同様に、即時の満足度[学習するためのgamification](https://en.wikipedia.org/wiki/Gamification_of_learning)必ずしも常に悪いことではありません(特に代替手段が研究の欠如である場合)。若い学生にとっては、気分転換と組み合わせた慎重な学習(例:良いC++の本)が良い組み合わせになる可能性があります。 _But_、基本を最初に! – dfri