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

Can I access an object in C++ other than using an expression?

本文关键字:是否 C++ 对象 访问 表达式      更新时间:2023-10-16

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

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

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

实际上,没有那么多其他陈述。循环控制语句不能更改对象本身,只能通过循环控制表达式的副作用。 gotobreakcontinue根本做不到。 throw是一个表达式,catch()不能改变任何东西,所以这对也是无关紧要的。我认为没有其他非表达声明。

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

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

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

这里a的值发生了变化,但没有任何涉及a的表达式。该表达式仅涉及pA

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