2

我的程序中有多个赋值语句,如下所示query.constraints.size()应该返回13constraints是一个数组并且它返回它的大小)

int num,size =  query.constraints.size();

当我这样做size时,正如预期的那样变成 13 但num由于某种原因变成了 9790272。

当我按如下方式单独执行它们时,一切都很好,并且它们都是 13,如预期的那样

int size =  query.constraints.size();

int num =  query.constraints.size();

为什么我的多重赋值会导致奇怪的奇怪值?

4

5 回答 5

11

为什么我的多重赋值会导致奇怪的奇怪值?

因为 C++ 没有多重赋值1。您在这里声明了两个变量,但只初始化第二个,而不是第一个。


1好吧,你可以这样做,int a, b = a = c;但大多数 C++ 程序员会认为这样做的代码很糟糕,除非在非常特殊的情况下。

于 2012-08-10T15:00:24.810 回答
4

您不是多次分配,而是多次声明。您需要执行以下操作:

int num, size;
size = num = query.constraints.size();
于 2012-08-10T15:00:57.680 回答
2

多重分配看起来像:

int num, size;
num = size = query.constraints.size();

但是逗号运算符不进行多重赋值。

于 2012-08-10T15:01:22.253 回答
2

您所拥有的实际上是一个声明语句,部分带有初始化程序。您的代码等效于以下代码:

int num;  // uninitialized, you're not allowed to read it

int size(query.constraints.size());  // initialized

通常,T x = expr; 声明x一个类型的变量T并使用 的值对其进行复制初始化expr。对于基本类型,这只是您所期望的。对于类类型,复制构造函数只是形式上需要的,但在实践中通常被省略。

于 2012-08-10T15:02:22.753 回答
0

逗号运算符不会做你认为它做的事

于 2012-08-10T15:00:41.330 回答