2016-11-29 6 views
7

[class.ctor]/1コンストラクタ宣言子は、かっこで囲むことができます。どうして?

コンストラクタは名前がありません。コンストラクタの宣言で、 宣言子は、フォームPTR-宣言子 (パラメータ宣言節)例外仕様 OPT 属性指定子-配列 OPTの関数宣言(8.3.5)でありますPTR-宣言子 は、ID-式は、次のいずれかの形式を持ってい のみID-表現、オプション 属性指定子-SEQ、およびオプションの周囲の括弧で構成されており、:...

そして、これはコンパイルされます:

struct S{ 
    (S)() {} 
}; 

しかし、これはなぜ許可されていますか?

+2

おそらく* all * ptr-declaratorsにオプションのかっこが含まれている可能性があります。 – jtbandes

+0

実用的なところを意味しますか? –

答えて

0

コンストラクタは関数であり、ほとんどの宣言は(偶数倍)括弧で囲むことができるので、これは次のとおりです。

// all are valid! 
void ((a))(); // void a(); 
int (a); // int a; 
struct S { 
    (S)(); // constructors 
    (~S)(); // destructors 
}; 

は、これは許可されている理由のためWhy does C++ allow us to surround the variable name in parentheses when declaring a variable?を参照してください。この構文は、おそらくコンストラクタが定義されたときにコンストラクタに拡張されました。

関連する問題