什么是“ C ++整合的兼容性”?

伊戈尔·利弗连科(Igor Liferenko)

wint_t类型设置内部wchar.h通过stddef.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)

但是注释表明这样做“破坏了C ++整合的兼容性”。

您不能在不破坏ABI兼容性的情况下更改现有的typedef定义,例如wint_t(即使您具有相同的大小和符号,并且C的ABI兼容,更改基础类型也会破坏C ++改写的兼容性)。

那么,到底为什么这种类型定义不能改变的,什么是“对C ++的兼容性重整”?

另请参见此问题如何更改wchar.h以使wchar_t与wint_t具有相同的类型?

罗伯特

所以这是一些相关的定义:

命名混淆的方式,编译代表在C ++定义,使他们有资格“每级”所以实例的方法,名称ClassA::method()不与冲突ClassB::method()-这也有利于超载,使得ClassA::method(String s)不发生冲突ClassA::method(int i)

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

如以上讨论的第二主题“名称重整不仅仅是一个编译器内部事务” - ,其中正在生成针对共享库中的公共接口,例如在箱子。

因此,如果您使用typedef并将其更改为自己的代码,则对于生成的所有二进制文件都可以,但是依赖于此typedef的所有先前存在的二进制文件(例如,第三方DLL)都会损坏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章