gpt4 book ai didi

c++ - 枚举和枚举类的链接兼容性

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:18 25 4
gpt4 key购买 nike

假设有一个使用枚举类的 C++11 API:

// api.hpp
enum class E {A, B, C};
void f(E);
...

// api.cpp
void f(E e)
{
if (e == E::A)
...
}

现在假设我想使用这个 API,但我没有 C++11 编译器。所以我:

  • 修改 api.hpp 并将枚举类更改为常规枚举。
  • 编写一些包含修改后的 api.hpp 并正常使用 API 的代码(例如调用 f)。
  • 使用我的非 C++11 编译器编译此代码并将其链接到使用 C++11 编译器编译的 API 实现(使用未修改的 api.hpp)。<

这似乎适用于 GCC,但总体来说是否安全,或者我是在玩火(违反 ODR 等)?

假设这两个编译器在其他方面是链接兼容的,只有枚举类与枚举类存在问题。

最佳答案

正如 ildjarn 所说,这是未定义的行为。而这实际上在实际实现中可能会失败的原因是普通的 C++03 枚举没有固定的底层类型。虽然您的枚举类类型始终 将“int”作为其基础类型,但相应的 C++03 枚举可能将“short”作为其基础类型,从而使代码与布局不兼容。

关于c++ - 枚举和枚举类的链接兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com