根据 C++03 3.10/1 ,每个表达式都是左值或右值。当我使用=
为变量分配新值时,分配左侧的变量名称是左值表达式。看起来无论我尝试对变量做什么,它仍然会使用一些表达式。
除了使用表达式之外,还有什么方法可以在 C++ 中操作变量?
根据 C++03 3.10/1 ,每个表达式都是左值或右值。当我使用=
为变量分配新值时,分配左侧的变量名称是左值表达式。看起来无论我尝试对变量做什么,它仍然会使用一些表达式。
除了使用表达式之外,还有什么方法可以在 C++ 中操作变量?
唯一的方法是通过一个语句,而不是通过作为这种语句一部分的表达式。一个例子是定义,std::string x;
。这将调用默认 ctor on x
。但这对你来说算作操纵吗?
实际上,没有那么多其他的说法。除了通过循环控制表达式的副作用之外,循环控制语句不能更改对象本身。goto
,break
而且continue
根本做不到。throw
是一个表达式,catch()
不能改变任何东西,所以那对也无关紧要。我认为没有任何其他非表达语句。
您可以在不使用表达式的情况下设置变量的值,但您无法真正选择它获得的值。我阅读 C++11 标准(语言语法)附录 A 的方式,声明不是表达式。如果您int a;
在函数范围内编写,a
将被分配一个不确定的值。如果您在文件范围内编写它,a
将为其分配值 0。但您不能为其分配值或传递构造函数参数,因为这样做涉及表达式。
不确定它是否严格回答了您的问题,但您可以间接操纵变量。例如:
int a;
int *pA = &a;
*pA = 5;
此处的值a
已更改,但没有任何涉及 的表达式a
。该表达式仅涉及pA
.
除此之外,不相关的操作可能会产生副作用,导致变量更改,无论是有意还是无意(例如无意更改某些变量的内存损坏)。