E 'consentito nel caso in cui si desidera dichiarare una funzione che restituisce un oggetto di quella classe direttamente dopo la classe di dichiarazione, per esempio:
#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;
}
Inoltre si dovrebbe notare gli errori del compilatore (o avvisi) che compaiono in altri casi illegali, come la dichiarazione di una variabile invece di A()
, notano anche che il compilatore afferma di ignorare la parola chiave inline
se non si dichiara alcuna funzione.
Spero che sia utile.
Edit: per il commento di Eonil
Se si sta parlando il tuo codice di cui sopra per la questione, allora è lo stesso caso come la vedo io, il compilatore vi darà un avvertimento: 'inline ' : ignored on left of 'AAA' when no variable is declared
Tuttavia, se si utilizza il codice nella mia risposta, ma sostituire A()
con una variabile, B
per esempio, verrà generato un errore di compilazione: 'B' : 'inline' not permitted on data declarations
così troviamo che il compilatore non sbaglia ingegno Accettando tali dichiarazioni, che ne dici di provare a scrivere inline double;
da solo?Si genererà un avvertimento: 'inline ' : ignored on left of 'double' when no variable is declared
Ora che ne dici di questa dichiarazione:
double inline d()
{
}
non dà avvisi o errori, è esattamente lo stesso di:
inline double d()
{
}
dal la precedenza di inline
non è affatto importante.
Il primo codice (in tutta risposta) è simile alla scrittura:
class AAA
{
// Code
};
inline class AAA A()
{
// Code
}
che è legale.
E, in altro modo, si può essere scritta come:
class AAA
{
// Code
};
class AAA inline A()
{
// Code
}
Si sarebbe sollevato se si vede il primo codice (in tutta risposta) scritto come:
#include <iostream>
class AAA
{
// Code
} inline A()
{
// Code
};
Ma sono uguali, poiché non c'è importanza per la precedenza di inline
.
Spero sia chiaro e convincente.
inline funzione ha senso .... ma di classe in linea ?? – mpen
"Cos'è questo?" - Qualcosa che non esiste nel C++ standard. Lo specificatore 'inline' è per funzioni, non classi. Potresti esserti imbattuto in un bug nel compilatore Clang C++. –
Aggiunto il tag 'clang', non ho trovato nulla sul bug tracker, potrebbe valerne la pena aprirne uno (potresti sempre postare una mail a cfe-dev [at] cs.uiuc.edu in anticipo se non sei sicuro). Se questo è sulla linea 2.9, probabilmente vorranno ripararlo presto. –