加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:55:15 所属栏目:百科 来源:网络整理
导读:对于声明为虚拟的函数,我似乎无法将弃用的警告打印出来. 我正在使用“g(GCC)4.1.1 20061011(Red Hat 4.1.1-30).” 我的研究表明 gcc 4.x中可能存在关于弃用的问题 纯虚函数(即类bueller {virtual int cameron()= 0;};), 但不是……我猜你会把它们称为常规…
对于声明为虚拟的函数,我似乎无法将弃用的警告打印出来.
我正在使用“g(GCC)4.1.1 20061011(Red Hat 4.1.1-30).”
我的研究表明 gcc 4.x中可能存在关于弃用的问题
纯虚函数(即类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
};

假设我编译了这个,一个foo.cpp文件和一些使用g的main.cpp文件.

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

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

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

1号:它有效,没问题.

3号:看起来像一个已知的bug /功能……无论如何..

然而,似乎没有#2的探索.
也许它被排在第3位,尽管我发现没有提到它.

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

BTW:-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)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读