纯虚函数不能为内联?

nwpulipeng 2006-10-04 04:07:51
看到《C++编程思想》第二版上说,纯虚函数不能为内联,可是我在VC6.0上测试,纯虚函数可以为内联,甚至在函数前面加inline都没有问题:
inline virtual void f() const = 0 {cout<<"pure virtual function called!"<<endl;};
是书上说错了吗,还是我哪里写得不对?不知道关于这个问题,哪位达人知晓?
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
thomasnew 2006-10-04
  • 打赏
  • 举报
回复
inline 只是一个请求建议,而不是指令。
vc6.0 只是一个编译器,不代表c++标准。
nwpulipeng 2006-10-04
  • 打赏
  • 举报
回复
揭帖。。。
nwpulipeng 2006-10-04
  • 打赏
  • 举报
回复
嗯,就是与编译器有关。。。。。
VC遇到这种情况采取鸵鸟政策,用gcc好像就会报错,呵呵。
lw1a2 2006-10-04
  • 打赏
  • 举报
回复
忘了是谁举例说的了,内联是这样的:
内联函数对编译器说:您好,我叫f(),我想把实现成内联的。您看,在您方便的时候,能把我弄成内联的吗?
:)


虚函数和内联函数在使用目的上是矛盾的,前者是在运行时刻决定调用哪个函数,后者是在编译时候要知道调用哪个函数
sinall 2006-10-04
  • 打赏
  • 举报
回复
同意楼上。
补充:
所谓inline,类似于宏替换。这里就没有函数地址的说法。
而纯虚函数是通过vtable来访问的。vtable中记录了该函数的地址。
很明显,以上两条相矛盾。
SammyLan 2006-10-04
  • 打赏
  • 举报
回复
你这样写了它也不会帮你内联的
要记住,inline是一个建议,而非强制行为
第1章 语言基础 1 1.1 基础语句 2 0001 注释的使用方法及注意事项 2 0002 使用汇编语言 2 0003 如何使用内联函数 2 0004 如何使用#define自定义宏 3 0005 使用goto语句进行无条件跳转 3 0006 while循环转为for循环 3 0007 do while循环的分析与使用 4 0008 利用条件运算符简化代码 4 0009 使用exit函数退出进程 5 0010 函数exit的注意事项 5 0011 调试无限循环 5 0012 控制台输入/输出 5 0013 delete与delete []的差别 6 0014 符号#、##、#@的用法 6 0015 将某个地址转换为指针 6 0016 常用内存分配及释放函数 6 0017 生成小于100的随机数 7 1.2 类型与变量 7 0018 静态变量的定义及应用 7 0019 使用全局变量的注意事项 7 0020 如何使用全局对象 7 0021 变量作用范围 8 0022 创建自己的变量类型 8 0023 如何声明同样类型的多个变量 8 0024 extern关键字的使用 9 0025 const关键字的应用范围 9 0026 去除const属性的转换 9 0027 使用enum定义类型 10 0028 定义只有零个元素的数组 11 0029 利用零进行初始化的对象 11 0030 初始化数组的简单方法 11 0031 结构体的字节对齐 11 1.3 模板与函数 12 0032 成员函数的模板不可以是虚函数 12 0033 利用递归函数计算阶乘 12 0034 函数模板的应用 13 0035 使用指针数组 13 0036 函数指针数组的应用 13 0037 函数重载的注意事项 14 0038 使用typename关键字 14 1.4 引用 14 0039 使函数返回多个值 14 0040 如何使用引用 15 0041 如何应用值传递参数 15 0042 赋值与初始化的区别 16 0043 如何初始化左值 16 1.5 名称空间 16 0044 为什么使用命名空间 16 0045 如何定义及访问命名空间 16 0046 利用命名空间解决命名冲突 17 0047 名称空间简单应用 18 0048 使用:: 运算符调用全局函数 18 0049 :: 使用命名空间的注意事项 18 1.6 继承 19 0050 两个类互为成员的声明 19 0051 为什么要避免直接存取数据成员 19 0052 避免使用memset初始化对象 19 0053 C++类中成员初始化的顺序 19 0054 基类的析构函数应该是虚方法 20 0055 访问限定符分析 21 0056 访问其他类的私有成员函数 21 0057 如何定义友员类 22 1.7 多态 23 0058 纯虚函数的使用 23 0059 覆盖基类的成员函数 23 0060 如何应用多重继承 24 0061 如何利用虚函数实现动态绑定 25 0062 如何利用抽象类进行数据封装 25 0063 数据类型与类对象大小的区别 26 0064 实现类的强制转换 26 1.8 高级函数 27 0065 如何重载操作符 27 0066 如何定义重载函数 28 0067 默认构造函数 28 0068 复制构造函数 28 0069 this指针分析 29 0070 如何用非静态的类成员函数作为线程函数 29 0071 如何在常量函数中修改数据成员 30 1.9 STL模板库 30 0072 为什么在程序中广泛使用STL 30 0073 如何在STL中使用容器 30 0074 STL算法的优点 31 0075 如何设计和使用STL迭代器 31 0076 使用STL需要包含哪些头文件 32 0077 STL简单应用 32 1.10 C++.NET语法 33 0078 在C++.NET中如何判断空指针 33 0079 C++与C++.NET中纯虚函数的区别 33 0080 C++.NET中数据类型转换的方法 33 0081 在C++.NET中如何定义具有输出参数的函数 33 0082 C++.NET中如何实现方法的默认参数 33 0083 在C++.NET中如何获取系统信息 34

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧