这个 cppref page 在…上 std::format 说:
std::format
提供比格式字符串所需的参数更多的参数不是错误:
// OK, produces "Hello world!" std::format("{} {}!", "Hello", "world", "something");
自从 std::格式 进行编译时检查,看看是否 fmt 和参数不匹配,为什么上面的示例代码不被视为错误?
std::格式
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} .
get_string
{0}
{1}
请注意,这与是否进行编译时或运行时检查无关。无论何时执行哪些检查,都应将其视为错误。