为什么叮当发出这些警告
Why does clang emit these warnings?
clang 编译器会针对下面的代码片段发出警告,如下所示。
clang++ -std=c++14 -O0 -Wall -pedantic -pthread main.cpp && ./a.out
main.cpp:1:18: warning: braces around scalar initializer [-Wbraced-scalar-init]
void point(int = {1}, int = {2}) {}
^~~
main.cpp:1:29: warning: braces around scalar initializer [-Wbraced-scalar-init]
void point(int = {1}, int = {2}) {}
^~~
2 warnings generated.
这是为什么呢?
void point(int = {1}, int = {2}) {}
int main(){
point();
}
据我所知,根据 [dcl.fct.default]/1、[dcl.fct]/3 和 [dcl.init]/1,{1}
和 {2}
是完全有效的默认参数。
大括号通常用于初始化结构实例,例如:
struct example {
int member1;
int member2;
};
example x = { 1, 2 };
Clang告诉您,使用大括号来初始化单个值并不"正常"。如果您不熟悉在 C++ 中初始化值的语法,或者如果这些类型在某种重构之前以前是结构,则此警告可能会有所帮助。
可以在初始化整数时停止使用大括号,也可以将 -Wno-braced-scalar-init
标志传递给编译器以阻止它报告警告。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- 叮当不知道PTRDIFF_MAX?
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 叮当声:折叠表情和"expression result unused"警告
- 静态 std::stringstream 的叮当整警告
- 叮当警告"-Wsigned-enum-bitfield"的含义
- 为什么叮当发出这些警告
- 为什么我收到叮当警告:函数"diff"没有以前的原型
- 解决方案叮当警告-成员模板不明确
- 在可疑的情况下发出叮当警告:函数'foo'可以用属性"noreturn"声明吗?
- 叮当:将特定警告标记为非错误
- 如何处理叮当声中的"exit-time destructor"警告?