我已经读过constexpr
函数返回类型可以是非常量的,在我的书中也有这样的代码:
constexpr bool isShorter(const string& str1, const string& str2)
{
return str1.size() < str2.size();
}
但str1.size()
下有一个错误:constexpr
函数返回非常量。根据这本书,它必须是正确的,但编制者不同意。
每次我在不同的代码中使用constexpr
时,总会出现这样的错误:缺少类型说明符 - 假设为int。注意:C ++不支持default-int 。但我不知道这意味着什么。
答案 0 :(得分:5)
不,返回值必须是至少一组可能输入的常量表达式。
N3797§7.1.5[dcl.constexpr] / 5说:
对于非模板,非默认的constexpr函数或a 非模板,非默认,非继承constexpr构造函数,if 没有参数值,以便调用函数或 构造函数可以是核心常量的计算子表达式 表达式(5.19),程序不正确;无需诊断。
由于std::string::size
不是constexpr
,因此不存在返回值为常量表达式的情况。
答案 1 :(得分:0)
constexpr
表示函数返回编译器在程序运行之前可以确定的值。
const
只是意味着该函数在被调用时不会在运行时更改对象。
std::string
的内容在编译时未得到修复,因此size()
方法为const
(例如,调用它不会将包含数据"ABCD"
的字符串更改为"ABCDEFG"
)但不是constexpr(std::string
的长度在编译时没有固定,因为字符串可以在运行时填充 - 例如基于用户输入。)
这假设编译C ++ 11或更高版本 - 早期版本的C ++不支持constexpr
。