首页 > 解决方案 > C++ 不是要求 (cond ? string_1 : string_2) 初始化一个字符串吗?

问题描述

标签: c++c++17language-lawyer

解决方案


从您引用的那部分开始:

如果第二个和第三个操作数是相同值类别的glvalues并且具有相同类型,则结果是该类型和值类别,并且如果第二个或第三个操作数是位域,则它是位域,或者如果两者都是位域。

第二个和第三个操作数都是 type的左值std::string const,所以结果是type的左值std::string const

std::string从 a初始化 astd::string涉及到一个副本。

但我们不是std::string从 a 初始化 a std::string。在:

const std::string& foo(const std::string& s1, const std::string& s2)
{
    return (s1.size() < s2.size() ? s1 : s2);
}

我们std::string const&从 type 的左值初始化 a std::string const。这只是一个直接引用绑定。无需复制。


推荐阅读