c++ - C ++解释赋值中的大括号?
问题描述
我刚刚尝试使用此代码,但不知何故发现它没有被我的编译器标记为错误。
struct structA{
int x;
int y;
};
...
struct structA var;
var={1,2};
这不知何故运作良好。据我所知,{,} 子句只允许作为聚合初始化。我应该如何在这里解释它?
解决方案
在这种情况下structA
是一个聚合,所以这种形式的初始化是允许的。
聚合是一个数组或一个类
- 没有用户提供的、显式的或继承的构造函数([class.ctor]),
- 没有私有或受保护的非静态数据成员(子句 [class.access]),
- 没有虚函数,也没有虚拟、私有或受保护的基类([class.mi])。
所以这将是允许的:
struct structA var = {1,2};
但是您实际拥有的是也允许的赋值(来自 C++11),因为您使用初始化列表作为 rhs。
如果右操作数是花括号初始化列表
- 如果表达式 E1 具有类类型,则语法 E1 = {args...}生成对赋值运算符的调用,并以花括号初始化列表 作为参数,然后根据重载决策规则选择适当的赋值运算符。
推荐阅读
- inheritance - 在 Fortran 派生类型中“扩展”函数
- javascript - 使用 ReactJS 新上下文 API 时出现 React-router-V4 渲染错误
- python - 连接和过滤许多 .jsonl 文件的最有效方法
- c# - 按键按下事件处理程序 C#
- biztalk - 动态 BizTalk 端口
- postgresql - 如何为特定列选择具有随机非空值的第一条记录
- verilog - 为什么我在 Verilog 中收到此括号错误?
- database-design - 由两个 ISO 8061 日期组成的复合排序键的 DynamoDB 查询是否返回正确的结果(使用 BETWEEN)?
- python - 将时间字符串“20180425.142117”转换为人类可读的格式?
- apache-httpclient-4.x - Apache HttpClient:BasicCredentialProvider 不适用于 SSL