Какова область объявления класса в C ++? - PullRequest
0 голосов
/ 11 марта 2019

Какова область объявления класса? В частности: если я объявляю класс в исходном файле, находится ли он в глобальной области видимости или в области единицы перевода или в другом? Также ... Как мне объявить класс только в области блока перевода, как статическая переменная?

(например: можно ли объявить класс в каком-либо исходном файле, не беспокоясь о случайном доступе к нему в моем основном исходном файле?)

1 Ответ

3 голосов
/ 11 марта 2019

Область действия класса - это пространство имен, в котором объявлен класс.Если он объявлен в глобальном пространстве имен, то класс является глобальным.

Класс должен быть определен в каждой единице перевода, которая использует ODR-класс.Все TU, которые ссылаются на имя класса, всегда ссылаются на один и тот же класс, а не на определенный класс TU.Определение класса должно быть одинаковым во всех TU.

Как объявить класс только в области действия единицы перевода

Вы можете использовать безымянное пространство имен:

namespace {
    struct this_TU_only {
        int member;
    };
}

Определение следующего класса в другом TU не будет проблемой:

namespace {
    struct this_TU_only {
        float member;
    };
}

Это связано с тем, что безымянное пространство имен отличается в каждой единице перевода.

...