c++ - 通过两个不同的基类引用一个对象是否违反了严格的别名规则?

标签 c++ multiple-inheritance strict-aliasing

<分区>

我有三个纯虚类,我们称它们为ServiceAServiceBServiceC

具体实现使用多重继承提供所有三个服务:

class Concrete : public ServiceA, public ServiceB, public ServiceC
{
    //...
};

服务也可以由单独的具体类(单继承)提供,因此为了使用这些服务,我正在考虑编写一个这样的类:

class Consumer
{
public:
    Consumer(const ServiceA& svcA, const ServiceB& svcB);
};

如果如下所示实例化我的类,是否会违反严格的别名规则?

Concrete multiService;
Consumer consumer(multiService, multiService);

最佳答案

If instantiate my class as shown below, will that be a violation of the strict aliasing rule?

严格的别名规则不会被破坏,因为 svcAsvcB 没有引用内存中的相同地址。当您引用基类时,您实际上引用了完整类 Consumersubobjects,其中每个子对象都有自己的偏移量(可能大于零),因此不同地址甚至是 Consumer 的相同实例。

关于c++ - 通过两个不同的基类引用一个对象是否违反了严格的别名规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73621975/

相关文章:

使用具有不匹配变量的类的 Python 多重继承

c++ - 以某种方式将基类的指针强制转换为未知的子类?

c - 这是严格的别名违规吗?

c - 带限制指针的 GCC 别名检查

c++ - 使用 boost vector 和字符串的奇怪 boost program_options 问题

c++ - 计算函数在代码中被引用的次数

C++ 使用 *i 指针打开文件,在 Linux 中覆盖但在 Windows 中不覆盖

Django - 一个模板可以扩展两个或多个模板吗?

c - 如何转换 sockaddr_storage 并避免违反严格的别名规则

c++ - 是否有可能有一个非递归的 at_c 实现?