균일 한 초기화 구문을 사용하여 이니셜라이저 목록이있는 클래스 내 멤버 초기화?[중복]
문제
나는 다음과 같이 컴파일하려고합니다.:
class SomeClass
{
struct SomeStruct { bool a,b,c; };
SomeStruct ss{false, false, false};
}
컴파일러는 나에게 다음과 같은 오류를 제공합니다: SomeClass::SomeStruct::SomeStruct: no overloaded function takes 3 arguments.
이 코드를 변경하면:
class SomeClass
{
struct SomeStruct { bool a,b,c; };
SomeStruct ss{{false, false, false}};
}
이 프로그램은 컴파일하고 잘 실행됩니다.이 문제는 컴파일러에 문제가 있습니까,아니면 구문을 이해하지 못합니까?내가 읽은 것에서 첫 번째 버전이 컴파일되어야합니다.
해결책
여기 3797 에서 책임 있는 문법이 있습니다.:
// after a member declaration:
braced-or-equal-initializer-list:
= initializer-clause
braced-init-list
braced-init-list:
{ initializer-list ,OPT }
{ }
initializer-list:
initializer-clause
initializer-list, initializer-clause
initializer-clause:
assignment-expression
braced-init-list
그래서 나는 첫 번째 진술이 정확하다고 말하고 실제로 받아 들여진다
최근 gcc
그리고 clang
.
다른 팁
세미콜론을 필요한 대로 배치하려면
class SomeClass
{
struct SomeStruct { bool a,b,c; };
SomeStruct ss{false, false, false};
};
이 버그는 2013 컴파일러의 버그 인 것 같습니다.적어도 코드는 www.ideone.com.
구조체 일부 구조는 집계 이며 이니셜라이저 목록을 사용하여 초기화 해야 합니다.
제휴하지 않습니다 StackOverflow