这是C ++中的有效赋值吗?

时间:2011-07-11 19:45:43

标签: c++

当我查看库代码时,我找到了以下行

int number = config.nodes,i,fanout=numP/2;

我假设config是指向某个东西的指针,但声明中是否有逗号?并做出那样的任务?

5 个答案:

答案 0 :(得分:8)

这声明了三个变量。它与:

相同
int number = config.nodes
int i;
int fanout = numP/2;

请注意,逗号是在声明(和参数列表)中专门处理的,C ++也有一个“逗号运算符”,这里没有使用它。

答案 1 :(得分:1)

它是有效的,但是没有为你看到的整行分配数字。

ifanout是当时正在创建的另外两个整数,此时fanout也正在初始化。

这一行相当于:

int number = config.nodes;
int i;
int fanout = numP/2;

答案 2 :(得分:1)

它的声明基本上很多:

    int number = config.nodes;
    int i;
    int fanout=numP/2;

答案 3 :(得分:0)

更可识别的方法是:

int number, i, fanout;
number = config.nodes;
fanout = numP/2;

我个人永远不会写出类似你的例子,因为读者花了很长时间才能弄清楚发生了什么。

答案 4 :(得分:0)

我有以下补充:

1)C ++编译器总是忽略空格。所以,

int number  =   config.nodes,i,fanout=numP/2;

相当于

// declaring three variables number, i and fanout
int number=config.nodes, i, fanout = numP/2; 

这里的逗号是告诉编译器我要声明多个变量。因此,number将使用config.nodes初始化。如果config是指针(如上所述),则无法使用.运算符访问成员变量。您必须使用->代替.

2)以下行有不同的语义:

// only one variable will be declared, which is number
int number  =  (config.nodes,i,fanout=numP/2);

括号内是一个表达式,这里的逗号是逗号运算符。在这种情况下,之前定义了configifanoutnumP。逗号运算符的值是最后一个表达式fanout=numP/2的值。