0

初期化子リストをいじっていて、いくつかの矛盾に気づきました。コンストラクターの最初の引数として initializer_list を使用すると、コンパイル エラーが発生しますが、これは、関数およびメンバー関数の場合、または他の引数が initializer_list の前にある場合には発生しません。

このコードは、私が何を意味するかを示しています。

#include <initializer_list>

using namespace std;

struct A
{
    A(initializer_list<int> list){}
    A(int a, initializer_list<int> list){}
    A(initializer_list<int> list, int b){}
    A(int a, initializer_list<int> list, int b){}
};

void B(initializer_list<int> list){}
void B(int a, initializer_list<int> list){}
void B(initializer_list<int> list, int b){}
void B(int a, initializer_list<int> list, int b){}

int main(int argc, char** argv)
{
    // Ok
    A a = {1};
    A b(1, {2});
    A c(1, {2}, 3);
    B({1});
    B(1, {2});
    B({1}, 2);
    B(1, {2}, 3);

    // Error
    A d({1});
    A e({1}, 2);

    return 0;
}


そしてビルド出力:

1>------ Build started: Project: Linal (Microsoft Visual C++ Compiler Nov 2012 CTP), Configuration: Release2 x64 ------
1>  'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only.
1>  main.cpp
1>main.cpp(30): error C2059: syntax error : '{'
1>main.cpp(30): error C2059: syntax error : ')'
1>main.cpp(31): error C2059: syntax error : '{'
1>main.cpp(31): error C2143: syntax error : missing ';' before '}'
1>main.cpp(31): error C2143: syntax error : missing ')' before ';'
1>main.cpp(31): error C2059: syntax error : '}'
1>main.cpp(31): error C2059: syntax error : ')'
1>main.cpp(33): error C2059: syntax error : 'return'
1>main.cpp(34): error C2059: syntax error : '}'
1>main.cpp(34): error C2143: syntax error : missing ';' before '}'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


これは正しい動作ですか?もしそうなら、なぜこれが起こるのですか?

4

0 に答える 0