c++中的变量初始化:一种独特的方法
Variable initialization in C++: a unique method
最近我看到了这段代码。我不知道为什么在我的"编程生涯"中从未见过这种语法。
int main()
{
int b;
int a = (b=5, b + 5);
std::cout << a << std::endl;
}
a的值为10。这种初始化方式到底叫什么?它是如何工作的?
语句:
int a = (b=5, b + 5);
使用逗号操作符。c++ 11标准第5.18/1段:
因此,你的语句相当于:[…用逗号分隔的一对表达式从左到右求值;左边的表达式是一个丢弃的值表述(第5条)与左表达式相关的每个值计算和副作用在每个值计算和与正确表达式相关的副作用之前进行排序。类型结果的值为右操作数的类型和值;结果是相同的值类别作为其右操作数,如果其右操作数是左值和位域,则为位域。如果值正确操作数是临时的(12.2),结果是临时的。
b = 5;
int a = b + 5;
我个人认为没有理由在这里使用逗号操作符。只要以易于阅读的方式初始化变量,除非有很好的理由不这样做。
操作符,
逐个求值并返回最后一个值
它不仅可以用于初始化
逗号,
操作符允许分隔表达式。
exp1, exp2, ..., expn
为expn
首先将b
设置为5
,然后将a
设置为b + 5
。
,
在操作符表中优先级最低,所以
的语义int a = b = 5, b+5;
不同于
int a = (b = 5, b+5);
因为第一个被解析为(int a = b = 5), b + 5
当在表达式中使用逗号操作符时,将计算其所有操作数(从左到右)并返回最后一个。
初始化称为复制初始化。如果忽略右边的复杂表达式,则与
中相同:int a = 10;
这与直接初始化形成对比,它看起来像这样:
int a(10);
(您可能对如何计算逗号表达式感到困惑。如果是这样,请注明
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 类中一种方法的部分专用化
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 有没有一种方法可以忽略Qt c++中的文件名大小写敏感性?
- 有没有一种方法可以使用图形在C++中逐个字母地打印控制台中的文本
- 有没有一种方法可以将数据从javascript发送到exe文件
- 有没有一种方法可以从函数中返回一个新对象或对现有对象的引用
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 有没有一种方法可以使用typedef中的参数名称
- C++中有没有一种方法可以通过指定列表中的每个成员变量来构造对象