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

std::string(count, ch) not called when using uniform initialization

我刚刚被这个看似无辜的尝试所抓住,它使用统一的初始化语法调用需要大小和字符值的 std::string constructor

std::string s{ 10, '[=11=]' };

我认为这会创建一个长度为 10 的字符串,用 [=13=] 初始化。

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

demo at Coliru

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

注意: 之前已经有人问过,但是没有给出如何避免这个陷阱的答案。

你只是要小心点。

一般来说,当人们告诉您 "use uniform initialisation so that everything is consistent and, well, uniform" 时,忽略他们。我的意思是,一定要使用统一初始化,但不要相信童话。

此外,请忽略地图项的名称。