除了使用表达式之外,我可以使用C ++访问对象吗?

时间:2012-12-10 11:51:12

标签: c++ expression language-lawyer data-manipulation

根据C ++ 03 3.10 / 1 ,每个表达式都是左值或右值。当我使用=为变量赋值时,赋值左侧的变量名是左值表达式。它看起来就像我尝试用变量做的那样它仍然会使用一些表达式。

除了使用表达式之外,有没有办法在C ++中操作变量?

3 个答案:

答案 0 :(得分:2)

唯一的方法是通过一个陈述,而不是通过一个表达,这是一个声明的一部分。一个例子是定义std::string x;。这会调用x上的默认ctor。但这对你来说是一种操纵吗?

实际上,没有那么多其他陈述。循环控制语句除了通过循环控制表达式的副作用之外,不能更改对象本身。 gotobreakcontinue根本无法做到。 throw是一个表达式,catch()无法更改任何内容,因此该对也无关紧要。我认为还没有任何其他非表达式声明。

答案 1 :(得分:2)

您可以在不使用表达式的情况下设置变量的值,但是您无法真正选择它获得的值。我阅读C ++ 11标准附录A(语言语法)的方式,声明不是表达式。如果在函数范围内编写int a;,则会为a分配一个不确定的值。如果在文件范围内编写它,a将被赋值为0.但是你不能为它赋值或传递构造函数参数,因为这样做涉及表达式。

答案 2 :(得分:0)

不确定它是否严格回答了您的问题,但您可以间接操纵变量。 E.g:

int a;
int *pA = &a;
*pA = 5;

此处a的值已更改,但没有涉及a的任何表达式。该表达式仅涉及pA

除此之外,可能存在导致变量变化的无关操作的副作用,无论是有意还是无意(例如无意中更改某些变量的内存损坏)。