7

根据 C++03 3.10/1 ,每个表达式都是左值或右值。当我使用=为变量分配新值时,分配左侧的变量名称是左值表达式。看起来无论我尝试对变量做什么,它仍然会使用一些表达式。

除了使用表达式之外,还有什么方法可以在 C++ 中操作变量?

4

3 回答 3

2

唯一的方法是通过一个语句,而不是通过作为这种语句一部分的表达式。一个例子是定义,std::string x;。这将调用默认 ctor on x。但这对你来说算作操纵吗?

实际上,没有那么多其他的说法。除了通过循环控制表达式的副作用之外,循环控制语句不能更改对象本身。gotobreak而且continue根本做不到。throw是一个表达式,catch()不能改变任何东西,所以那对也无关紧要。我认为没有任何其他非表达语句。

于 2012-12-10T15:19:08.257 回答
2

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

于 2012-12-10T15:19:15.987 回答
0

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

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

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

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

于 2012-12-10T15:05:20.720 回答