【发布时间】:2018-06-24 16:33:18
【问题描述】:
将不相关的类型转换为空的基类是未定义的行为吗?然后使用该地址构造一个继承自该空基的派生类型?例如
class Derived : public EmptyBase {
public:
template <typename T>
Derived(T&& t) : EmptyBase{std::forward<T>(t)} {}
using EmptyBase::print;
};
然后做这样的事情是不确定的
static auto shim = 1;
auto derived = Derived{*reinterpret_cast<EmptyBase*>(&shim)};
derived.print();
标准保证必须在标准布局结构中优化空基,但不确定是否允许这样的东西构造派生类
【问题讨论】:
-
这段代码对我来说毫无意义。你想完成什么?
-
@MarkRansom 我认为当我使用 language-lawyer 标签时问这个问题不合适。您应该相信提出问题的人在可能难以在堆栈溢出帖子中解释的利基情况下需要这样的东西,特别是考虑到他们已经证明已经尝试围绕该主题进行研究。此外,多次用这样的方式详细解释用例与帖子无关。哪一部分对您来说没有意义?
-
@Curious 我的意思是我所说的 - 我很难理解代码。如果我不能理解它,我无法回答它。只是一点背景可能会有很长的路要走。
标签: c++ c++11 language-lawyer undefined-behavior reinterpret-cast