następujący kod compiles successfully both with clang++ 5.0.0 and g++ 7.2 (z flagami -std=c++17 -Wall -Wextra -Werror -pedantic-errors -O0
kompilacji):Niekompletne typy jak parametry funkcji i zwracane wartości
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{});
}
Czy to ważne, aby korzystać z niepełnych typów jako parametrów funkcji i zwracane wartości? Co mówi na tym C++?
Zasadniczo to, co robisz w dowolnym nagłówku ... –
@ Jaa-c Może to zabrzmieć głupio, ale nigdy wcześniej nie używałam niekompletnych typów jako typów zwrotów funkcji lub typów parametrów w moich plikach nagłówkowych. – Constructor
Chodzi o to, aby nie tworzyć wszystkich, którzy, prawdopodobnie pośrednio, zawierają twój nagłówek * również * muszą analizować pełne definicje wszystkich typów używanych przez niego, ponieważ mogą nie używać funkcji, które wymagają tych definicji. A jeśli * robią *, to mogą same zawrzeć pełną definicję. Wydaje mi się, że debata szaleje w nieskończoność, czy dobrze jest oczekiwać od użytkowników. W przypadku nagłówków używanych wewnętrznie, powiedziałbym, że to nie myślenia. –