std::runtime_format

来自cppreference.com
< cpp‎ | utility‎ | format
 
 
 
 
在标头 <format> 定义
/*runtime-format-string*/<char> runtime_format(std::string_view fmt )noexcept;
(1) (C++26 起)
/*runtime-format-string*/<wchar_t> runtime_format(std::wstring_view fmt )noexcept;
(2) (C++26 起)

返回一个对象,它存储一个可以直接用在面向用户的格式化函数中的运行时格式字符串,且可以隐式转换为 std::basic_format_string

目录

[编辑]参数

fmt - 字符串视图

[编辑]返回值

一个具有以下仅用于阐释的类型的含有运行时格式字符串的对象:

类模板runtime-format-string<CharT>

template<class CharT >
struct/*runtime-format-string*/;
(仅用于阐述*)

成员对象

所返回的对象包含一个 std::basic_string_view<CharT> 类型的仅用于阐释的非静态数据成员 str

构造函数与赋值

/*runtime-format-string*/(std::basic_string_view<CharT> s )noexcept;
(1)
/*runtime-format-string*/(const/*runtime-format-string*/&)= delete;
(2)
/*runtime-format-string*/& operator=(const/*runtime-format-string*/&)= delete;
(3)
1)s 初始化 str
2) 复制构造函数被显式弃置。此类型既不可复制也不可移动。
3) 赋值被显式弃置。

[编辑]注解

由于 runtime_format 的返回类型既不可复制也不可移动,所以尝试把 runtime_fmt 作为泛左值进行传递会妨碍 std::basic_format_string 的构造,这导致程序非良构。要从 runtime_format 构造 std::basic_format_stringruntime_format 的返回值应直接按纯右值传递给 std::basic_format_string,这样会保证发生复制消除。

auto runtime_fmt = std::runtime_format("{}");   auto s0 =std::format(runtime_fmt, 1);// errorauto s1 =std::format(std::move(runtime_fmt), 1);// still errorauto s2 =std::format(std::runtime_format("{}"), 1);// ok
功能特性测试标准功能特性
__cpp_lib_format202311L(C++26)运行时格式字符串

[编辑]示例

#include <format>#include <print>#include <string>#include <string_view>   int main(){std::print("Hello {}!\n", "world");   std::string fmt;for(int i{}; i !=3;++i){ fmt +="{} ";// 构造格式化字符串std::print("{} : ", fmt);std::println(std::runtime_format(fmt), "alpha", 'Z', 3.14, "unused");}}

输出:

Hello world! {}  : alpha {} {}  : alpha Z {} {} {}  : alpha Z 3.14

[编辑]参阅

(C++20)
在新字符串中存储参数的格式化表示
(函数模板)[编辑]
(C++20)
std::format 的使用类型擦除的参数表示的非模板变体
(函数)[编辑]
在构造时执行编译期格式字符串检查的类模板
(类模板)[编辑]
close