私は次のコードを持っています:
enum nums {
a
};
class cls {
public:
cls( nums );
};
void function()
{
cls( a );
}
gcc でコンパイルしようとすると、次のエラーが発生します。
test.cpp: In function ‘void function()’:
test.cpp:12:10: error: no matching function for call to ‘cls::cls()’
test.cpp:12:10: note: candidates are:
test.cpp:7:3: note: cls::cls(nums)
test.cpp:7:3: note: candidate expects 1 argument, 0 provided
test.cpp:5:7: note: cls::cls(const cls&)
test.cpp:5:7: note: candidate expects 1 argument, 0 provided
make: *** [test] Error 1
関数をこれに置き換えると:
void function()
{
cls name( a );
}
その後、すべてが機能します。2 つの引数を持つコンストラクターを使用する場合にも機能します。コンストラクターに「明示的」を追加すると機能しません。
gcc は何らかの形でこれを「cls」型の変数を「a」という名前で定義するものとして解析していることがわかりますが、変数を定義するためのそのような構文には慣れていません。私の目には、これは cls 型の匿名一時変数を定義するステートメントであり、「a」をパラメーターとして渡します。
gcc 4.6.3 でコンパイル。
洞察はありますか?
ありがとう、シャチャー