gpt4 book ai didi

c++ - 缺少类函数声明是否安全?

转载 作者:行者123 更新时间:2023-11-30 04:06:40 25 4
gpt4 key购买 nike

我一直想知道这一点(尽管应用程序充其量是有限的)。

我有以下类(class):

//a.hpp
class A
{
public:
#ifdef FOO
int foo();
#endif
};

库(静态或共享)定义了 FOO,但链接的可执行文件却没有。这是有效的 C++ 吗?如果 foo 是虚拟的会怎样?跨编译器是否相同?

最佳答案

这违反了单一定义规则,因此它是未定义的行为。事实是,因为该函数是非虚拟的,应用程序不能依赖它,而且...好吧,未定义 行为可能会显示为有效,但程序没有明确定义。

在对 Daniel 的回答的评论中,您声明:

If it is virtual, does it still get initalized in the vtable correctly, and just no one can take the pointer of A::foo?

如果函数是虚函数,那么未定义的行为更有可能以不同的方式出现在代码中:

如果是唯一的虚函数

程序的两个部分看到的对象的内存占用量会不同,保留的内存和内存的使用会不同。

如果不是唯一的虚函数

对象的内存占用将是相同的,但是每个函数在 vtable 中的位置对于程序的不同部分会不同,这会导致调用错误的函数和各种问题。

关于c++ - 缺少类函数声明是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813719/

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