相关疑难解决方法(0)

初始化程序列表和运算符的RHS

我不明白为什么初始化程序列表不能用于运算符的RHS.考虑:

class foo { };

struct bar
{
    template<typename... T>
    bar(T const&...) { }
};

foo& operator<<(foo& f, bar const&) { return f; }

int main()
{
    foo baz;
    baz << {1, -2, "foo", 4, 5};

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

最新的Clang(gcc也)抱怨:

clang.cc:14:9: error: initializer list cannot be used on the right hand side of operator '<<'
    baz << {1, -2, "foo", 4, 5};
    ^  ~~~~~~~~~~~~~~~~~~~~

    ^  ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

为什么C++标准会禁止这个?或者换句话说,为什么这会失败而不是

baz << bar{1, -2, "foo", 4, 5};
Run Code Online (Sandbox Code Playgroud)

c++ operators initializer-list c++11

41
推荐指数
1
解决办法
4718
查看次数

尝试更好地理解C++大括号初始化语法

为什么下面的代码是非法的?

for (int index=0; index<3; index++)
{
    cout << {123, 456, 789}[index];
}
Run Code Online (Sandbox Code Playgroud)

虽然这很好:

for (int value : {123, 456, 789})
{
    cout << value;
}
Run Code Online (Sandbox Code Playgroud)

IDEOne中的代码:http://ideone.com/tElw1w

c++ initializer-list list-initialization

3
推荐指数
1
解决办法
91
查看次数