为什么 std::make_format_args 需要非常量引用

问题描述 投票:0回答:1

查看文档我不明白为什么

std::make_format_args
采用引用而不是const引用?我的目标是实现类似的东西:

#include <format>

template <class... Args>
inline static std::string format(const std::string_view field, Args&&... args)
{ 
    return std::vformat(field, std::make_format_args(std::forward<Args>(args)...)); 
}

并且能够将

const std::string&
作为参数中的输入传递,但似乎
std::make_format_args
需要非常量引用。

我收到错误:

非常量引用只能绑定到左值 C:\Program Files\Microsoft Visual Studio�2\Community\VC\Tools\MSVC .40.33807\include ormat(3713):注意:请参阅 'std:: 的声明make_format_args' 注意:在尝试匹配参数列表 '(_Ty, const std::string, _Ty, _Ty)'

c++ format const-reference
1个回答
0
投票

因为缺陷报告P2905R2中详述了糟糕的用户体验和安全问题。问题(摘自文档页面底部的摘要)是“make_format_args通过转发引用接受右值参数”,解决方案是make_format_args“仅接受左值引用”。

© www.soinside.com 2019 - 2024. All rights reserved.