gpt4 book ai didi

c++ - 什么是 "compatibility for C++ mangling"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:25 26 4
gpt4 key购买 nike

wint_t 类型通过 stddef.hwchar.h 中设置,使用 __WINT_TYPE__ 是默认情况下已在编译器中定义。所以要改变

typedef unsigned int wint_t;

进入

typedef wchar_t wint_t;

我们可以在wchar.h的开头使用如下代码

#undef __WINT_TYPE__
#define __WINT_TYPE__ wchar_t
#define WEOF (-1)

但是this评论表明这样做“破坏了 C++ 重整的兼容性”。

You can't change existing definitions of typedefs such as wint_t without breaking ABI compatibility (even when you have the same size and signedness and so are ABI-compatible for C, changing the underlying type breaks compatibility for C++ mangling).

那么,为什么这个 typedef 不能更改,什么是“C++ mangling 的兼容性”?

另见这个问题 How to change wchar.h to make wchar_t the same type as wint_t?

最佳答案

所以这里有一些相关的定义:

名称重整是编译表示您在 C++ 中定义的方法名称的方式,因此它们是“每个类”限定的,因此例如 ClassA::method() 不会冲突使用 ClassB::method() - 这也有助于重载,这样 ClassA::method(String s) 不会与 ClassA::method(int i).

在内部,这些可能表示为 ClassA_methodClassA_method^StringClassA_method^int

正如上面的第二个主题所讨论的那样,“名称重整不仅仅是编译器内部的问题” - 例如,在为共享库生成公共(public)接口(interface)的情况下。

因此,如果您采用 typedef 并将其更改为您自己的代码,那么您生成的所有二进制文件都没有问题,但是任何预先存在的二进制文件(例如依赖于此 typedef 的第 3 方 DLL)都会中断。

关于c++ - 什么是 "compatibility for C++ mangling"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717142/

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