Joã*_*nso 7 c++ clang default-arguments
铛编译器发出警告,下面的代码片段,可以看出这里.
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.
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
void point(int = {1}, int = {2}) {}
int main(){
point();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,{1}并且{2}是完全根据有效的默认参数[dcl.fct.default]/1,[dcl.fct]/3和[dcl.init]/1.
大括号通常在初始化结构实例时使用,例如:
struct example {
int member1;
int member2;
};
example x = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)
Clang 告诉您,使用大括号来初始化单个值并不“正常”。如果您不熟悉 C++ 中初始化值的语法,或者在某种重构之前这些类型以前是结构体,则此警告可能会有所帮助。
您可以在初始化整数时停止使用大括号,或者将标志传递-Wno-braced-scalar-init给编译器以停止报告警告。