【发布时间】:2016-01-06 03:59:40
【问题描述】:
在 C++11(或未来)中,是否存在以下合法的一些简单变体?
class A
{
public:
std::vector<char> b(123); // declare a vector with 123 elements
};
我能找到的最接近的有点笨拙,而且可能效率低下......
class A
{
public:
std::vector<char> b = std::vector<char>(123);
};
我试图避免使用初始化列表。我更喜欢将b 的声明和初始化合并到一行代码中。向量的大小始终相同。
我在这个例子中使用std::vector,但大概答案会更普遍适用。
为了更好地衡量,这是来自gcc 4.8 版的错误消息:
错误:数字常量之前的预期标识符 标准::向量 b(123);
这是来自clang 3.7 版的消息:
错误:预期的参数声明符 标准::向量 b(123);
【问题讨论】:
-
std::vector<char> b = decltype(b)(123);不那么笨重了吗? -
@RSahu:我喜欢这样。这是一种改进——减少了冗余。
-
您可以期待现代编译器的省略 - 有关概述,请参阅
copy_elisionon cpprefrence。 -
“向量的大小始终相同。” - 如果您没有其他理由特别想要
vector,可以考虑std::array<char, 123> b;。 -
@nobar 如果您不能信任基本省略,那么为什么要相信
int x = 1+1;不会向 google 发送网络请求以仔细检查数学? (根据标准,这是可选的——即允许的)。一个糟糕的编译器会主动生成糟糕的代码,比如在简单的情况下无法省略,这是一个偏执的问题。我知道完全零个无法忽略的 C++11 编译器(除非疯狂的编译器设置)