값합니다 (-std=c++17 -Wall -Wextra -Werror -pedantic-errors -O0
컴파일 플래그) 코드 compiles successfully both with clang++ 5.0.0 and g++ 7.2 다음불완전한 유형
struct Foo;
struct Bar
{
Foo get() const;
void set(Foo);
};
struct Foo
{
};
Foo Bar::get() const
{
return {};
}
void Bar::set(Foo)
{
}
int main()
{
Bar bar{};
(void)bar.get();
bar.set(Foo{});
}
는 함수 매개 변수로 불완전한 유형을 사용하고 값을 반환하는 유효한가요? C++이 뭐라고 말합니까? 함수에서
이것은 기본적으로 당신이 모든 헤더에서 무엇을하는지입니다 ... –
@ Jaa-c 바보 같이 들릴지 모르지만 필자는 이전에 헤더 파일에서 함수 리턴 유형 또는 매개 변수 유형으로 불완전한 유형을 사용한 적이 없습니다. – Constructor
아이디어는 정의를 필요로하는 함수를 사용하지 않을 수도 있기 때문에 간접적으로 헤더를 포함하는 모든 사람들이 사용하는 모든 유형의 전체 정의를 구문 분석해야한다는 것을 의미하지는 않습니다. 그리고 그들이 * do *한다면, 그들은 완전한 정의 자체를 포함 할 수 있습니다. 나는 논쟁이 격렬하게 불타 오르며 영원히 사용자의 기대를 반 기지 않는지 여부를 생각한다. 내부적으로 사용되는 헤더의 경우, 이는 당연한 말입니다. –