C ++:std :: initializer_list <t>作为构造函数中的第一个参数导致编译错误</t>

时间:2013-08-06 18:23:43

标签: c++ visual-studio-2012 constructor arguments initializer-list

我正在玩初始化列表并发现一些不一致的地方。使用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 ==========


这是正确的行为吗?如果是这样,为什么会这样呢?

0 个答案:

没有答案