为什么叮当发出这些警告

Why does clang emit these warnings?

本文关键字:警告 叮当 为什么      更新时间:2023-10-16

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 标志传递给编译器以阻止它报告警告。