我刚刚被这种看似无辜的尝试抓住了,该尝试使用统一的初始化语法调用采用大小和字符值的std::string
构造函数:
std::string s{ 10, '\0' };
我认为这会创建一个长度为 10 的字符串,初始化为\0
.
虽然它实际上调用了构造函数,该构造函数接受一个初始化列表,从而创建了一个长度为 2的字符串,初始化为{'\n', '\0'}
!
请参阅Coliru 的演示。
使用统一初始化时有没有办法避免这个陷阱?还是我只需要小心?
注意:之前也有人问过 类似的问题,但没有给出如何避免这种陷阱的答案。