【发布时间】:2015-03-05 14:42:59
【问题描述】:
在 C++ Primer,第五版,§6.5.2:
constexpr函数的定义与任何其他函数一样,但必须满足某些限制:每个参数的返回类型和类型必须是文字类型(第 2.4.4 节,第66),并且函数体必须只包含一个返回语句
但本章中的另一句话(第239页):
允许 constexpr 函数返回非常量值
// scale(arg) is a constant expression if arg is a constant expression constexpr size_t scale(size_t cnt) { return new_sz() * cnt; }
这是一个矛盾的总结吗?我对此感到困惑。scale 的返回类型是字面量类型?
更新:
字面量类型和常量有什么区别?
【问题讨论】:
-
“文字类型”不一定表示整数常量,例如
5。该标准定义了文字类型是什么,但我现在懒得去查找它。这是cppreference's page on it。 -
你认为矛盾的是什么?类型必须是文字(例如
size_t),并且值不必是常量。据推测,§2.4.4,p。 66 描述了字面量类型——如果你是这样想的话,它并不意味着“恒定”。