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

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

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


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

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


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


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

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

这里的值a被改变,但没有涉及到任何表达a 。 该表达式只涉及pA

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

链接地址: http://www.djcxy.com/p/66961.html

上一篇: Can I access an object in C++ other than using an expression?

下一篇: Automatically Generate C Code From Header