使用统一初始化时未调用std :: string(count,ch)

时间:2017-05-10 21:58:28

标签: c++ string c++11 uniform-initialization

我刚刚被这种看似无辜的尝试所捕获,它使用统一的初始化语法来调用带有大小和字符值的std::string constructor

std::string s{ 10, '\0' };

我认为这会创建一个长度为10的字符串,用\0初始化。

虽然它实际上调用了带初始化列表的构造函数,因此创建了一个长度为2 的字符串,用{'\n', '\0'}初始化!

请参阅demo at Coliru

使用统一初始化时,有没有办法避免这个陷阱?或者我必须要小心吗?

注意: Similar question之前曾被问过,但没有回答如何避免这个陷阱。

1 个答案:

答案 0 :(得分:9)

你必须要小心。

一般来说,当人们告诉你“使用统一初始化以便一切都是一致的,而且统一”时,忽略它们。我的意思是,无论如何都要使用统一的初始化,但不要相信这种童话故事。

另外,请忽略该功能的名称。

xkcd #927: "Standards"