std::format
上的
cppref 页面说:
提供多于格式字符串所需的参数并不是错误:
// OK, produces "Hello world!"
std::format("{} {}!", "Hello", "world", "something");
既然
std::format
有编译时检查来查看 fmt
和参数是否不匹配,为什么上面的示例代码不被视为错误?
背后的原理是什么?
有几个原因。
您可以在格式字符串中多次使用相同的参数:
std::fomat("{1},{0},{1}", x, y);
没有理由排除零次提及它。
它实际上在提供本地化字符串方面很方便:
std::vformat(get_string("Preheat the oven to {} degrees"), temp, temp*9/5+32);
get_string
返回的字符串将包含 {0}
或 {1}
。