Jest dozwolone w przypadku, gdy chcesz zadeklarować funkcję zwracającą obiekt tej klasy bezpośrednio po klasie deklaracji, na przykład:
#include <iostream>
inline class AAA
{
public:
AAA()
{
// Nothing
}
AAA(const AAA& _Param)
{
std::cout << "Calling Copy Constructor of AAA\n";
}
}A()
{
AAA a;
return a;
};
int main()
{
A();
return 0;
}
Ponadto należy zauważyć błędy kompilatora (lub ostrzeżenia), które pojawiają się w innych nielegalnych przypadkach, takich jak deklarowanie zmiennej zamiast A()
, należy również zauważyć, że kompilator stwierdza, że ignoruje słowo kluczowe inline
, jeśli nie zadeklarowano żadnej funkcji.
Mam nadzieję, że to pomocne.
Edit: W komentarzu Eonil
Jeśli mówimy o kodzie powyżej w pytaniu, to jest ten sam przypadek jak widzę, kompilator daje ostrzeżenie: 'inline ' : ignored on left of 'AAA' when no variable is declared
jeśli jednak użyć kodu w mojej odpowiedzi, ale zastąpić A()
o zmiennej B
na przykład, to wygeneruje błąd kompilatora: 'B' : 'inline' not permitted on data declarations
więc okazuje się, że kompilator nie popełnił błędu dowcip h akceptując takie deklaracje, jak samemu próbować napisać inline double;
?wygeneruje ostrzeżenie: 'inline ' : ignored on left of 'double' when no variable is declared
Teraz jak o tym oświadczeniem:
double inline d()
{
}
to nie daje ostrzeżenia lub błędy, to jest dokładnie to samo:
inline double d()
{
}
od Pierwszeństwo inline
nie jest w ogóle ważny.
Pierwszy kod (w całym odpowiedź) jest podobny do zapisu:
class AAA
{
// Code
};
inline class AAA A()
{
// Code
}
który jest legalny.
A w inny sposób, może być zapisany jako:
class AAA
{
// Code
};
class AAA inline A()
{
// Code
}
Można by zostać zwolniony, jeśli pojawi się pierwszy kod (w całym odpowiedzi) pisemne jak:
#include <iostream>
class AAA
{
// Code
} inline A()
{
// Code
};
Ale są takie same, ponieważ nie ma znaczenia dla pierwszeństwa inline
.
Mam nadzieję, że jest to jasne i przekonujące.
inline funkcja ma sens .... ale inline klasy ?? – mpen
"Co to jest?" - Coś, czego nie ma w standardowym C++. Specyfikator 'inline' dotyczy funkcji, a nie klas. Być może natknąłeś się na błąd w kompilatorze Clang C++. –
Dodałem tag 'clang', nie mogłem znaleźć niczego na temat śledzenia błędów, może warto go otworzyć (zawsze możesz napisać wiadomość do cfe-dev [at] cs.uiuc.edu wcześniej, jeśli nie masz pewności). Jeśli jest to w linii 2.9, prawdopodobnie będą chcieli to wkrótce naprawić. –