constexpr函数返回类型是非const吗?

sae*_*asi -3 c++

我已经读过constexpr函数返回类型可以是非常量的,在我的书中也有这样的代码:

constexpr bool isShorter(const string& str1, const string& str2)
{
    return str1.size() < str2.size();
}
Run Code Online (Sandbox Code Playgroud)

但是在str1.size()这下面有一个错误:constexpr函数返回是非常量的.根据这本书,它必须是正确的,但编译器不同意.

每次我constexpr在不同的代码中使用时总会出现这样的错误:缺少类型说明符 - 假设为int.注意:C++不支持default-int.但我不知道这意味着什么.

chr*_*ris 5

不,返回值必须是至少一组可能输入的常量表达式.

N3797§7.1.5[dcl.constexpr]/5说:

对于非模板,非默认的constexpr函数或非模板,非默认的,非继承的constexpr构造函数,如果不存在参数值,则调用函数或构造函数可以是核心常量的计算子表达式表达式(5.19),程序不正确; 无需诊断.

由于std::string::size不是constexpr,因此不存在返回值是常量表达式的情况.