请注意,这是一个语言律师的问题。我知道“变量”的常见含义,但我想了解标准中对“变量”的具体定义。我正在编写一些教学材料,想使用正确的定义。
变量通常被定义为“命名对象”,或者更准确地说是“已声明的对象”(因为变量可以未命名,但总是被声明)。
但还有第二种观点认为变量是一个编译时概念。根据这种定义,源代码中的一个声明始终对应一个变量,即使在运行时从该变量创建了多个对象。
哪一个是正确的?
这里有一个例子来说明这一点。假设你有
void foo(bool a)
{
int x = 42;
if (a)
foo(false);
}
当你调用时foo(true)
,两个 get 实例int x = 42;
同时存在。
它们显然是两个不同的对象,但从技术上讲它们是不同的变量还是相同的变量?
如果变量是编译时的东西,那么两者就是同一个变量。
第二个定义从表面上看是错误的,但这里有一个 C++委员会成员认为它是正确的。