c++ - C++ 中的空嵌套初始化列表
问题描述
考虑这段代码:
struct S {
float b;
int a;
};
int main() {
S s{{{}}};
return s.a;
}
Clang 6.0.0编译此代码,但显示警告:
<source> 警告:标量初始化器周围的大括号太多 [-Wmany-braces-around-scalar-init]
GCC 8.2不编译这段代码并报错:
<source>: In function 'int main()': <source>:9:10: error: 'float' 类型的标量初始值设定项的大括号
哪一个是正确的?规范对此有何评论?
解决方案
两个编译器都是正确的。除非您违反了不需要诊断的规则,否则编译器应该向您发出一条消息。该消息是警告还是错误取决于实现。通常,如果编译器仍然可以继续处理,您会收到警告,而当编译器无法继续时,您会收到错误消息。
推荐阅读
- python - 在熊猫中并行化 groupby 和 agg 的有效方法
- jupyter-notebook - 用户登录时无法将 JupyterHub helm chart 配置为使用 github 身份验证?
- c++ - 如何从 vcpkg 导入 cmake 中的包?
- android - 数据绑定如何与 Android 中的 DataBindingUtil.bind 与 ActivityBinding.inflate 一起使用
- rust - 如何分配给切片范围?
- node.js - 使用 babylonjs 在 nodejs 上验证 gltf/glb 文件
- codeigniter - 获取每位用户的佣金总额/总和并显示
- javascript - Laravel 8 Javascript函数不适用于表单标签
- sql-server - 将 ADO.NET 传递给存储过程时如何指定日期格式?
- java - 垂直和对角循环遍历矩阵