在 C++20 标准中,引入了一种新的字符串格式化方法,即 std::format
函数。与传统的 std::stringstream
或 printf
等方法相比,std::format
更直观、易读且类型安全。
std::format
的基本语法类似于 Python 的 str.format
或 C# 的 string.Format
,使用占位符 {}
来表示要插入的值。例如:
#include <iostream>
#include <format>
int main() {
int age = 25;
std::string name = "Alice";
double salary = 50000.0;
std::string message = std::format("My name is {0}, I am {1} years old, and my salary is ${2:.2f}.", name, age, salary);
std::cout << message << std::endl;
return 0;
}
输出:
My name is Alice, I am 25 years old, and my salary is $50000.00.
{0}
、{1}
、{2}
等表示参数的顺序。{name}
、{age}
、{salary}
等表示参数的名称(可选)。{:f}
表示浮点数格式(默认小数点后 6 位)。{:.2f}
表示浮点数格式,小数点后保留 2 位(可选)。{:0>4}
表示宽度为 4 的右对齐整数(可选)。std::format
会自动推断参数的类型,因此你不需要显式指定类型。例如:
std::string message = std::format("The answer is {0}.", 42);
输出:
The answer is 42.
尽管 std::format
和 C# 中的 string.Format
在语法上有些相似,但它们之间存在一些关键区别:
std::format
位于 std
命名空间中,而 C# 中的 string.Format
是 System
命名空间的一部分。std::format
不会抛出异常,而是返回一个 std::string
对象。如果格式化过程中出现错误,可能会导致未定义的行为。C# 中的 string.Format
会抛出异常。std::format
可能比 C# 中的 string.Format
更快,因为它直接在内存中进行字符串拼接,而不需要创建临时对象或调用其他函数。std::format
是 C++ 标准库的一部分,而 C# 中的 string.Format
是 .NET Framework 的一部分。总之,std::format
是 C++20 中引入的一种新的字符串格式化方法,它提供了更直观、易读且类型安全的字符串拼接方式。虽然它与 C# 中的 string.Format
有些相似,但它们之间存在一些关键区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。