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的演示.
有没有办法在使用统一初始化时避免这个陷阱?或者我必须要小心?
注意: 之前已经提出过类似的问题,但没有回答如何避免这个陷阱.
你必须要小心.
一般来说,当人们告诉你"使用统一的初始化以便一切都是一致的,并且,一致的 "时,忽略它们.我的意思是,无论如何都要使用统一的初始化,但不要相信童话故事.
另外,忽略该功能的名称.