gpt4 book ai didi

c++ - 使用 g++,如何弃用虚拟类成员函数

转载 作者:IT王子 更新时间:2023-10-29 00:43:04 29 4
gpt4 key购买 nike

对于声明为虚拟的函数,我似乎无法打印出已弃用的警告。我正在使用“g++ (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)”。我的研究表明 gcc 4.x 中可能存在关于弃用的问题纯虚函数(即 class bueller{ virtual int cameron()=0;};),但不是……我猜你会称它们为常规的……虚函数。只是为了让我们在同一页面上...

foo.h

class Foo
{
void Foo_A() __attribute__((deprecated)); //non-virtual
virtual void Foo_B() __attribute__((deprecated)); //virtual
virtual void Foo_C() __attribute__((deprecated)) = 0; //pure virtual
};

假设我使用 g++ 编译了一个 foo.cpp 文件和一些 main.cpp 文件。

1)任何使用 Foo_A() 的东西都会显示警告。

2)任何使用 Foo_B() 的东西都不会显示警告。

3)任何继承 Foo、实现 Foo_C 然后使用它的东西都不会显示警告。

第 1 点:有效,没问题。

第 3 点:似乎是一个已知的错误/功能..随便..

然而,#2 似乎没有任何解释。也许它与 #3 相关,尽管我发现没有任何内容提及它。

有人知道我在这里是否遗漏了关于我想弃用的常规虚拟类成员函数的任何内容吗?

顺便说一句:-Wno-deprecate 没有在我的 makefile 中打开。

最佳答案

给定这个程序:

struct Foo
{
virtual void Foo_B() __attribute__((deprecated)); //virtual
};

struct DerivedFoo : public Foo
{
};


int main()
{
DerivedFoo d;
d.Foo_B();
Foo &f = d;
f.Foo_B();
}
void Foo::Foo_B() {}

在 CentOS 5.2(gcc 版本 4.1.2 20080704(Red Hat 4.1.2-44))上,我得到与您描述的相同的输出:

g++     deprecate.cc   -o deprecate
deprecate.cc: In function ‘int main()’:
deprecate.cc:14: warning: ‘Foo_B’ is deprecated (declared at deprecate.cc:3)

但是,在 Ubuntu 10.04.1(gcc 版本 4.4.3(Ubuntu 4.4.3-4ubuntu5))上,我得到了您期望的输出:

g++     deprecate.cc   -o deprecate
deprecate.cc: In function ‘int main()’:
deprecate.cc:14: warning: ‘virtual void Foo::Foo_B()’ is deprecated (declared at deprecate.cc:3)
deprecate.cc:16: warning: ‘virtual void Foo::Foo_B()’ is deprecated (declared at deprecate.cc:3)

所以,我猜这是一个已修复的编译器错误。

关于c++ - 使用 g++,如何弃用虚拟类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329307/

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