C++ const ref vs 模板概念

c++ const ref vs template concept

我正在研究模板的 c++20 规范,详细了解概念。

目前为了将参数传递给函数,我使用 const ref:

void writeMsg(const std::string& msg) {
  std::cout << "msg = " << msg << "\n";
}

我现在才发现模板也可以用,有了概念我可以控制传递的参数。示例:

template<typename T>
concept is_string = std::is_convertible<T, std::string>::value;

template<is_string T>
void writeMsg2(T&& msg) {
  std::cout << "msg =" << msg << "\n";
}

我个人无法理解其中的好处,也许我的案例从这些概念中获得好处是错误的?你有什么建议或链接可以帮助我解决这个问题吗?

谢谢

正如您介绍的那样:可转换为 std::string 的类型在调用 std::cout 之前不需要转换(可能节省内存 [de] 分配)。
这是我在查看您的代码时可以看到的唯一大优势。然而,稍微翻转一下:

template <class T>
concept String = std::is_convertible<T, std::string>::value;

void writeMsg2(String auto const& msg) {
  std::cout << "msg = " << msg << "\n";
}

Live on Compiler Explorer