我刚刚被这种看似无辜的尝试所捕获,它使用统一的初始化语法来调用带有大小和字符值的std::string
constructor:
std::string s{ 10, '\0' };
我认为这会创建一个长度为10的字符串,用\0
初始化。
虽然它实际上调用了带初始化列表的构造函数,因此创建了一个长度为2 的字符串,用{'\n', '\0'}
初始化!
请参阅demo at Coliru。
使用统一初始化时,有没有办法避免这个陷阱?或者我必须要小心吗?
注意: Similar question之前曾被问过,但没有回答如何避免这个陷阱。