Effective C++ 条款53 不要轻忽编译器的警告
2015-09-13 09:52
267 查看
1. 编译器的警告可能给出很重要的信息,例如:
由于B中的f是const成员函数,而D中的f是非const,因此D::f是对B::f的override而非重新声明,编译器通常会给出"warning: D:f() hides virtual B::f()"的警告,这个警告其实包含两层意思:
1). D并没有重新声明virtual void f() const,因而它继承了B的virtual void f() const实现.
2). 由于D声明了virtual void f(),它是对virtual void f() const的重写,由于名称遮掩,将不能通过D类型对象来调用virtual void f() const.
因此,会出现以下情况(见注释):
2. 不同编译器有不同警告标准,因而不能依赖编译器来指出错误.
class B{ public: virtual void f() const; ... }; class D:public B{ public: virtual void f(); ... };
由于B中的f是const成员函数,而D中的f是非const,因此D::f是对B::f的override而非重新声明,编译器通常会给出"warning: D:f() hides virtual B::f()"的警告,这个警告其实包含两层意思:
1). D并没有重新声明virtual void f() const,因而它继承了B的virtual void f() const实现.
2). 由于D声明了virtual void f(),它是对virtual void f() const的重写,由于名称遮掩,将不能通过D类型对象来调用virtual void f() const.
因此,会出现以下情况(见注释):
B b; D d; B* pb=&b; pb->f(); //调用的是B::f() pb=&d; pb->f(); //调用的仍然是B::f() !
2. 不同编译器有不同警告标准,因而不能依赖编译器来指出错误.
相关文章推荐
- C语言:队列
- C++ string 字符串匹配
- c++字符串详解
- 提高C++代码质量 - [92]让代码运行得再快些
- C++中引用和指针的区别
- 黑马程序员-c语言回顾-数组
- 在伦敦对冲基金工作多年的quant学习C++的经验
- 【九度OJ】题目1001:A+B for Matrices
- Effective C++ 条款52 写了placement new也要写placment delete
- C++ 链表
- Effective C++ 条款51 编写new和delete时需固守常规
- C语言之变量与常量
- C语言之左移和右移运算符
- C语言之外部变量与作用域
- C语言之函数值传递的好处
- C语言之argument和parameter的区别
- C语言之char类型研究
- Effective C++ 条款50 了解new和delete的合理替换时机
- 如何在windows中使用cmd命令去编译,运行C++程序
- 哈密顿回路的非暴力解法(转自CSDN大神GDTZX)