Observe que esta é uma pergunta de direito linguístico . Conheço o significado comum de "variável", mas estou tentando entender exatamente o que o padrão chama de "variáveis". Estou escrevendo um material didático e quero usar as definições corretas.
Variáveis são comumente definidas como "objetos nomeados", ou mais corretamente "objetos que foram declarados" (já que variáveis podem não ter nome, mas são sempre declaradas).
Mas há um segundo ponto de vista: variáveis são um conceito de tempo de compilação. Segundo essa definição, uma declaração no código-fonte sempre corresponde a uma variável, mesmo que, em tempo de execução, vários objetos sejam criados a partir dela.
Qual está correta?
Aqui está um exemplo em que isso é importante. Digamos que você tenha
void foo(bool a)
{
int x = 42;
if (a)
foo(false);
}
Quando você chama foo(true)
, duas instâncias de int x = 42;
get existem ao mesmo tempo.
Eles são claramente dois objetos diferentes, mas tecnicamente são variáveis diferentes ou a mesma variável?
Se variáveis são uma coisa de tempo de compilação, então as duas são a mesma variável.
A segunda definição parece errada à primeira vista, mas aqui temos um membro do comitê C++ argumentando que ela é a correta , por exemplo.