【发布时间】:2014-04-20 15:34:59
【问题描述】:
我们可以使用以下语法初始化 boost 或 std::array:
array<int,5> b = {1, 2, 3, 4, 5};
如果 'b' 是局部变量,这很好。如果'b'是班级成员呢?
b = {1, 2, 3, 4, 5}; // Error: expected an expression
b = array<int,5>{1, 2, 3, 4, 5}; // Error: type name is not allowed
b = array<int,5>({1, 2, 3, 4, 5}); // Error: expected an expression
b = array<int,5>(1, 2, 3, 4, 5); // Error: no suitable constructor exists to convert from "int" to "array<int, 5>"
你真的必须这样做吗:
array<int,5> c = {1, 2, 3, 4, 5};
b = c;
这似乎有点浪费,因为它创建'c',初始化它,然后在销毁'c'之前将其复制到b中。
【问题讨论】:
-
说明编译器的版本。
-
我认为编译器的版本不会有帮助,但它支持 C++ 2003 标准。
-
所以你使用c++03(与c++0x不同)?
-
也许我不知道 c++0x 到底是什么,但是是的,它是 2003 年。所有这些不同的版本让我感到困惑。
-
c++0x是 C++11 获得批准之前“下一个标准”的占位符。对正在开发的未来标准的最佳解释的不完整实施也是如此。所以编译器版本确实很重要,因为版本越大,越接近 C++11。