Trình biên dịch clang phát ra cảnh báo cho đoạn mã dưới đây, như có thể thấy here.Tại sao clang phát ra những cảnh báo này?
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.
Tại sao điều này?
void point(int = {1}, int = {2}) {}
int main(){
point();
}
Theo như tôi có thể nói, {1}
và {2}
là đối số mặc định hoàn toàn hợp lệ theo [dcl.fct.default]/1, [dcl.fct]/3 và [dcl.init]/1.
Vâng, đó chỉ là một cảnh báo, IMO điều này chỉ có nghĩa là "hey, đó là vô dụng và có vẻ lạ, bạn có chắc đó là ý của bạn không?". – Quentin
@Quentin Vì đây dường như là một mã hoàn toàn hợp lệ, nên không có cảnh báo. –
Có rất nhiều đoạn mã hợp lệ kích hoạt cảnh báo - lỗi kích hoạt mã không hợp lệ. 'if (x = something());' là một số khác. – Quentin