c++ - 为什么这不违反单一定义规则?

标签 c++ struct

我能想出的最小例子:

headertest.hpp:

struct Point 
{
    int y;
};

结构测试.cpp:

#include "headertest.hpp"

class myClass 
{
    public:
    private:

        struct Point 
        {
            double x;
        };

        Point myPoint;
};

在我的机器上(适用于 MinGW 的 GCC 9.2.0),它编译得非常好,没有任何提示。我可以删除类中的 header 或定义,只要至少存在一个,它就会起作用。

这两个不同的结构可以有完全相同的成员,也可以有完全不同的成员,这似乎并不重要。

为什么这似乎有效?它只会在运行时被捕获,还是我错过了一些非常重要的东西?

最佳答案

hpp 文件中的结构在全局范围内,而 cpp 文件中的结构仅存在于 myClass 范围内 (myClass::Point)。

如果您在 myClass 范围内实例化 Point 类型的变量,将使用本地定义。这个问题类似于variable shadowing , 除了我们在这里处理类型名称而不是变量名称。

关于c++ - 为什么这不违反单一定义规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403056/

相关文章:

c++ - C++ dll 中的 Lua 表

基于版本参数转换函数参数以避免重复代码

c - C union 中的变量对齐方式在所有系统上都相同吗?

c - 将结构的两个成员相加

go - 如何使用golang通过postman快速获取表单数据?

c++ - 在 Visual Studio 2010 中构建任何 ffmpeg 项目时出现错误链接 2001 libavformat.a(tls_schannel.o)

c++ - 从 QTreeWidget 覆盖复制文本操作

c++ - 我如何运行以下代码

c++ - 我如何开发一个类来返回指定范围内的唯一数字?

c# - 为什么我可以将 null 分配给类型 "struct Nullable<T>"的值而不是我的结构?