Это разрешено, если вы хотите объявить функцию, которая возвращает объект этого класса сразу после объявления класса, например:
#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;
}
Также вы должны заметить ошибки компилятора (или предупреждения)которые появляются в других недопустимых случаях, таких как объявление переменной вместо A()
, также обратите внимание, что компилятор заявляет, что он игнорирует ключевое слово inline
, если вы не объявили какую-либо функцию.
Надеюсь, что это полезно.
Редактировать: Для комментария Eonil
Если вы говорите о своем коде выше в вопросе, то это тот же самый случай, как я вижу, компиляторвыдает предупреждение: 'inline ' : ignored on left of 'AAA' when no variable is declared
Однако, если вы используете код в моем ответе, но замените A()
на переменную, например, B
, это сгенерирует ошибку компилятора: 'B' : 'inline' not permitted on data declarations
Итак, мы обнаруживаем, что компилятор не ошибся при принятии таких объявлений, как насчет попытки написать inline double;
самостоятельно?Будет сгенерировано предупреждение: 'inline ' : ignored on left of 'double' when no variable is declared
А как насчет этого объявления:
double inline d()
{
}
Оно не выдает предупреждений или ошибок, оно точно так же, как:
inline double d()
{
}
с приоритет inline
не имеет значения вообще.
Первый код (во всем ответе) похож на запись:
class AAA
{
// Code
};
inline class AAA A()
{
// Code
}
, что является законным.
И, иначе, его можно записать в виде:
class AAA
{
// Code
};
class AAA inline A()
{
// Code
}
Вам будет легче, если вы увидите первый код (ввесь ответ) написано так:
#include <iostream>
class AAA
{
// Code
} inline A()
{
// Code
};
Но они одинаковы, так как не имеет значения для приоритета inline
.
Надеюсь, что это ясно и убедительно.