【问题标题】:C++ union definitionC++ 联合定义
【发布时间】:2012-10-06 23:17:57
【问题描述】:

是否可以像我们为命名空间做的那样定义一个联合?我的意思是我们可以在联合中声明第一种类型,然后在另一个文件中向联合中添加另一种类型吗?

现在,我有一个包含位类型联合的基类(无符号整数和其他对应于每个派生类的类型)。我想把它们拆分到派生类中,一点一点地构造这个联合。

【问题讨论】:

  • 不,您不能将联合定义拆分到多个文件中。
  • @swan- 我猜你还没有掌握 OOP 的逻辑。一个类有一个概念。继承该类的那些只是变得更加专业,但具有与其继承的相同的属性。
  • 我看到有问题,但我不知道如何解决它。我需要在基类级别知道联合中的 4B 无符号整数是什么,在较低的类中我需要更精确的位定义。我使用 union 是因为 unsigned int 到 bit 结构的转换非常方便
  • @slugonamission - 甚至不在同一个文件中。

标签: c++ unions


【解决方案1】:

没有,比如structs/classes,enums。

n3337 7.3/1

命名空间是一个可选命名的声明区域。命名空间的名称可用于访问 在该命名空间中声明的实体;即命名空间的成员。与其他声明性区域不同, 命名空间的定义可以拆分为一个或多个翻译单元的多个部分。

【讨论】:

    【解决方案2】:

    没有。怎么可能让它工作(不是它是可取的), 单独编译。考虑类似的事情:

    union U { int i; double d; }
    
    void
    f()
    {
        U aU;
        g( &aU );
        //  ...
    }
    

    编译器要在堆栈上为aU 分配多少空间。 鉴于尚未编写的 DLL 包含:

    union U { char buff[1000]; };
    
    void
    g( U* aU )
    {
        //  Use all 1000 bytes...
    }
    

    (请注意,根据标准,以上是未定义的行为。 你的要求需要它工作。)

    【讨论】:

    • 那是因为我会添加比 4B unsigned int 更小的类型。
    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2018-11-08
    • 1970-01-01
    • 2019-04-15
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多