请解释 constexpr [重复]
Posted
技术标签:
【中文标题】请解释 constexpr [重复]【英文标题】:Please explain constexpr [duplicate] 【发布时间】:2013-04-27 08:24:46 【问题描述】:我有一个包含三个静态常量的类,
static const int NUM_POINTS = 2000;
static const float LAKE_THRESHOLD = 0.3;
static const int NUM_LLOYD_ITERATIONS = 2;
在头文件中。我意识到现在在 C++11 中我必须使用 constexpr 但我不知道如何使用它们。谁能用简单的方式解释一下 constexpr 吗?
【问题讨论】:
见***.com/questions/4748083/… 你为什么有使用constexpr
?
【参考方案1】:
constexpr 可用于将表达式标记为编译时常量。它也扩展到函数,因此任意深度的调用链可以是编译时常量。这允许编译器替换常量值,而不是在运行时不必要地计算它。
见:http://en.cppreference.com/w/cpp/language/constexpr
【讨论】:
好的,现在我在标题中声明了这个:constexpr static float FRACTION_LAVA_FISSURES() return 0.2;
然后在 .cpp 我有这个:if ((!edge.river) && (!edge.d0.water) && (!edge.d1.water) && (edge.d0.elevation > 0.8) && (edge.d1.elevation > 0.8) && (edge.d0.moisture < 0.3) && (edge.d1.moisture < 0.3) && ((float)(rand() / RAND_MAX) < FRACTION_LAVA_FISSURES))
它说invalid operands of types 'float' and 'float()' to binary 'operator<'
以上是关于请解释 constexpr [重复]的主要内容,如果未能解决你的问题,请参考以下文章
constexpr 具有未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?