在c++中这是一个有效的赋值吗?
Is this a valid assignment in C++?
当我查看库代码时,我发现下面的行
int number = config.nodes,i,fanout=numP/2;
我假设配置是指向某物的指针,但在语句中可以有逗号吗?做这样的作业?
声明了三个变量。与
相同int number = config.nodes
int i;
int fanout = numP/2;
请注意,逗号是在声明(和参数列表)中特别处理的,c++也有一个"逗号操作符",这里没有使用。
这是有效的,number并没有被分配到你看到的整行
i
和fanout
是另外两个正在被初始化的整数,fanout
也正在被初始化。
这一行相当于:
int number = config.nodes;
int i;
int fanout = numP/2;
它基本上有很多声明:
int number = config.nodes;
int i;
int fanout=numP/2;
更容易辨认的写法是:
int number, i, fanout;
number = config.nodes;
fanout = numP/2;
我个人永远不会写像你的例子那样的东西,因为读者要花很长时间才能弄清楚发生了什么。
我有以下补充:
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);
括号内是一个表达式,这里的逗号是一个逗号操作符。在本例中,config
、i
、fanout
和numP
是先前定义的。逗号操作符的值为最后一个表达式fanout=numP/2
的值
相关文章:
- void() 是一个有效的C++表达式吗?
- C++14 : 2 个随机生成器 - 一个有效,另一个无效
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 使用 CMake 与其他静态库链接的静态库 - 一个有效,一个无效。为什么?
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 如何有效地将一个大std::字符串的一部分转换为float
- 一个有效的图算法,满足以下条件
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- 如何以更有效的方式检查一个数字是否是素数?
- 如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
- 当字符串中只有一个"GOOD"字符串可用时,从没有空格的字符串中提取第一个单词的最佳和有效方法?
- C++:检查向量中的元素是否大于另一个具有相同索引的元素的有效方法?
- 这是一个有效的单例类吗?
- 给定一个创建的带有货物的链表,我需要使用函数检查实际序列或"train"是否有效
- C++,我正在尝试创建一个有效的.bmp输出文件
- 从另一个向量中搜索和找到元素的有效方法
- 尝试获取用户输入和cout消息期望,当我输入一个有效名称时,它将所有这些命名
- C - 一个函数声明,多个定义,并且仍然有效