我是C ++的新手,正在尝试学习常量表达的概念。我在C ++入门第5版中看到了以下引用。
在大型系统中,很难确定(确定)初始化器是一个常量表达式。我们可以使用初始化程序定义一个const变量,我们认为它是一个常量表达式。但是,当我们在需要常量表达式的上下文中使用该变量时,我们可能会发现初始化器不是常量表达式。
有人可以提供一个变量的例子,这个变量很容易被误认为是一个常量变量但实际上是非常量变量吗?我想要了解常量和非常量变量,并尝试尽我所能避免它们。
答案 0 :(得分:2)
cppreference.com为这个问题提供了一个很好的例子:
// code by http://en.cppreference.com/w/User:Cubbi, CC-by-sa 3.0
#include <iostream>
#include <array>
struct S {
static const int c;
};
const int d = 10 * S::c; // not a constant expression: S::c has no preceding
// initializer, this initialization happens after const
const int S::c = 5; // constant initialization, guaranteed to happen first
int main()
{
std::cout << "d = " << d << '\n';
std::array<int, S::c> a1; // OK: S::c is a constant expression
// std::array<int, d> a2; // error: d is not a constant expression
}