Я могу написать декларацию или декларацию с определением. Примеры:

int x = 1; // declaration and definition
extern int x; // only declaration
bool f(); // only declaration
bool g() {} // declaration and definition
class X; // declaration
class X {}; // declaration and definition

Итак, мы видим, что можно написать только объявление и объявление с определением. Но как я могу написать только определение? Я слышал, что это возможно.

0
dasfex 11 Окт 2021 в 16:30

2 ответа

Лучший ответ

Нет определения без декларации, поскольку значение первого термина включает в себя второй. Далее я предоставил некоторую информацию из черновиков C ++ (6.2. Объявления и определения):

Объявление называется определением каждой сущности, которую оно определяет.

Ссылка: https://eel.is/c++draft/basic.def

3
Denis319199 11 Окт 2021 в 13:55

Вы не можете дать определение чему-то необъявленному, в упор. Но у вас есть конструкции C ++ для написания определений, которые могут не служить первым объявлением. Они здесь:

struct C {
    static int i;
};

int C::i = 1;

namespace N {
    extern int i;
}

int N::i = 2;

Ни int C::i = 1;, ни int N::i = 2; не могут служить первоначальным заявлением для i. Эти определения недействительны, если не присутствует предыдущее объявление каждого соответствующего i. Таким образом, они в некотором смысле не декларирующие определения.

Этот ответ может быть спорным и, возможно, не подпадать под те ответы, которые вы имели в виду, но это будут примеры.

0
StoryTeller - Unslander Monica 11 Окт 2021 в 14:37