7
here에서 볼 수 있듯이 clang 컴파일러는 아래 스 니펫에 대한 경고를 내 보냅니다.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();
}
는 지금까지, {1}
및 {2}
는 [dcl.fct.default]/1, [dcl.fct]/3 및 [dcl.init]/1에 따라 완벽하게 유효한 기본 인수입니다.
struct example {
int member1;
int member2;
};
example x = { 1, 2 };
연타가 괄호의 사용은 하나의 값을 초기화하기위한 "정상"아니라고 말하고있다 : 예를 들어, 구조체의 인스턴스를 초기화 할 때
글쎄, 그건 단지 경고 야, IMO는 단지 "헤이, 쓸데없고 이상해 보여. 그게 니가 의미하는 바가 틀림 없니?"라고 의미합니다. – Quentin
@Quentin이 코드가 완벽하게 유효한 코드 인 것으로 보이므로 경고가 표시되지 않습니다. –
경고를 트리거하는 많은 유효한 스 니펫이 있습니다. 잘못된 코드가 오류를 유발합니다. 'if (x = something());는 또 하나입니다. – Quentin