2017-07-30 3 views
4

でも、私は出来ません。これは法的なC++かCodeFights特有の構文ですか?私はそれを見ることができるように誰かに私にこのような初期設定の名前を教えてもらえますか?C++、ローカル変数(CodeFightsに見られるような)

+0

私は上記の@Ron:sのアドバイスに同意しますが、同様に、即時の満足度[学習するためのgamification](https://en.wikipedia.org/wiki/Gamification_of_learning)必ずしも常に悪いことではありません(特に代替手段が研究の欠如である場合)。若い学生にとっては、気分転換と組み合わせた慎重な学習(例:良いC++の本)が良い組み合わせになる可能性があります。 _But_、基本を最初に! – dfri

答えて

3

コードは合法的な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'; 
} 

これは、コードは、半正しいかそう将来的には正しいだろうながらijwがローカル変数ではありませんので、コメントは、されないことを意味し、彼ら

また、C++の「典型的な」使用ではありません。

+1

ファイルスコープであるため、ゼロに初期化されませんか? – AndyG

+0

@AndyG:私の例では、ファイルスコープではなく、 'S'のデータメンバーです。 –

0

最初にコンパイルしてみてください!

prog.cc:1:38: error: a function-definition is not allowed here before '{' token 
int i,j,w,myFunction(auto s, auto v) { 
            ^
+1

これは、C++ 17以降で導入されたエキゾチックな新しい構文かもしれません。 1つのコンパイラと1組のコンパイラフラグを使ってコードをコンパイルしてもそれほど多くのことは証明されません。 –

+0

@ChristianHacklもしそうなら、これは確かに標準ではありません。そして私はその質問がこれにつながることを理解しました。私の答えをどのように改善することを提案しますか? – gsamaras

+0

'auto'パラメータは[concepts for C++ 20](http://en.cppreference.com/w/cpp/language/constraints)の一部であるようです。それが意味することは何でも「無制約のプレースホルダ」... –

関連する問題