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