C++ 中 class 声明的范围是什么?

What is the scope of a class declaration in C++?

class 声明的范围是什么?特别是:如果我在源文件中声明一个 class ,它是在全局范围内还是在翻译单元范围内或其他范围内?另外...如何仅在翻译单元的范围内声明一个class,如静态变量?

(例如:我可以在某些源文件中声明一个 class 而不必担心在我的主源文件中意外访问它吗?)

class 的范围是声明 class 的名称空间。如果它在全局命名空间中声明,则 class 是全局的。

必须在 ODR 使用 class 的每个翻译单元中定义 class。所有引用 class 名称的 TU 始终引用相同的 class,而不是特定于 TU 的 class。 class 的定义在所有 TU 中必须相同。

How do I declare a class only in the scope of the translation unit

您可以使用未命名的命名空间:

namespace {
    struct this_TU_only {
        int member;
    };
}

在另一个 TU 中定义以下 class 不会有问题:

namespace {
    struct this_TU_only {
        float member;
    };
}

这是因为未命名的命名空间在每个翻译单元中都是不同的。