【发布时间】:2017-05-24 11:35:48
【问题描述】:
clang 编译器会为下面的 sn-p 发出警告,如 here 所示。
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();
}
据我所知,{1} 和 {2} 根据[dcl.fct.default]/1、[dcl.fct]/3 和[dcl.init]/1 是完全有效的默认参数。
【问题讨论】:
-
嗯,这只是一个警告,IMO 这只是意味着“嘿,这没用而且看起来很奇怪,你确定这就是你的意思吗?”。
-
@Quentin 因为这似乎是一个完全有效的代码,所以应该没有警告。
-
有很多有效的 sn-ps 会触发警告——无效代码会触发错误。
if(x = something());是另一个。 -
@JoãoAfonso 如果这是有效但具有误导性(或危险)的编译器可以生成警告(cf misleading indentation gcc warning)
-
@Quentin 但是没有来自clang的警告
int i = {1};
标签: c++ clang default-arguments