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

zet*_*t42 1 c++ string uniform-initialization c++11

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

std::string s{ 10, '\0' };
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅Coliru的演示.

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

注意: 之前已经提出过类似的问题,但没有回答如何避免这个陷阱.

Lig*_*ica 9

你必须要小心.

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

另外,忽略该功能的名称.

xkcd#927: