C++函数二义性问题,我怎么感觉编译器有偷懒嫌疑!!!
瞎扯一段,讲得不一定对。纯属学习!
struct BB
{
void a(){
cout << "bb's a()\n";
}
};
struct B1 : public BB
{
};
struct B2 : public BB
{
};
struct CC : virtual public B1,public B2
{
CC()
{
a(); // 调用a函数,编译不过,需这样调B1::a();B2::a();BB::a();
}
};
在上述代码中,struct CC的构造里调用a()函数会产生所谓的二义性。好吧,事实就是这样。在此瞎扯一段,在这个实例里,如果编译器足够聪明,这里本不该产生二义性才对。因为这个函数并没有什么“真正的继承”问题,B1和B2里也没有覆盖定义a()函数。如果覆盖了,调用时要加限定符,不然会产生二义性,这我还能理解。但仅是这个例子中,假设编译器允许它编译成功,真的会有二义性吗?会产生调用错误吗?我觉得没有。所以我瞎讲一下,编译器有偷懒嫌疑。现在的编程都是朝着越来越精简的方向走了,没有用的语法限制只会带来麻烦。好吧,以前几乎不用多继承,我一直凭直觉以为这种情况下直接调a()不会有问题,现在涨下知识。以上就是粗略见解,讲得不好不对请原谅!
C++函数二义性问题,我怎么感觉编译器有偷懒嫌疑!!!的更多相关文章
- Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)
2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度 ...
- CUDA(5.5)与MySQL 5.6的rint函数定义冲突引起的VS编译器C2264错误
向CUDA project中添加了如下的包含目录后: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include; ..\inclu ...
- 禁用编译器自动生成的函数(Effective C++之06)
如果想让你的类定义出来的对象是独一无二的,即对象无法被复制,或者使用赋值操作符赋给另外一个对象,那么最好的方法就是禁用拷贝构造函数和赋值操作符.下面介绍几种禁用的方法.(方法来自Effective C ...
- C++编译器函数模版机制剖析 - 函数模版的本质
思考:为什么函数模板能够和函数重载放在一块.C++编译器是怎样提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> u ...
- Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 通常如果你不希望class支持某一特定机能,只要不声明对应函数就 ...
- C++ 函数的二义性
函数二义性是一种编译时发生的错误,造成二义性调用的原因 是在函数匹配时两个或多个函数提供的匹配一样好,编译时找 不到唯一的最佳匹配. 列: #include <iostream> usin ...
- 编译器如何处理C++不同类中同名函数(参数类型个数都相同)
转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee 作者按: 从这篇文章中,我们主要会认识到一下几点: 一.不类中的特征标相同的同名函数,它们是不同的函数,原因就 ...
- C++ Primer 5th 第6章 函数
正如第一章所说:C++的函数是一个能够完成一个功能的模块或者说是一段命名了的代码块. 如下图所示,函数可以重载,是一段实现某些功能命名了的代码. 一个完整的函数的构成有四部分: 1.返回类型 2.函数 ...
- C++深度解析教程学习笔记(3)函数的扩展
1.内联函数 1.1.常量与宏的回顾 (1)C++中的 const 常量可以替代宏常数定义,如: ; //等价于 #define A 3 (2)C++中是否有解决方案,可以用来替代宏代码片段呢? 1. ...
随机推荐
- BZOJ1603: [Usaco2008 Oct]打谷机
1603: [Usaco2008 Oct]打谷机 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 602 Solved: 458[Submit][Stat ...
- POJ1218
Problem C Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) Total Su ...
- suse linux编译安装GCC报错
gcc编译安装过程 1.先安装三个库 gmp mprc mpc 这三个库的源码要到官网去下载 1)安装gmp:首先建立源码同级目录 gmp-build,输入命令,第一次编译不通过,发现缺少一个叫m4的 ...
- intellij idea 2016版破解方法
之前办法不能用了,现在最新方法,打开http://idea.lanyus.com,直接获取验证码即可
- HDU 4716 A Computer Graphics Problem 2013年四川省赛题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4716 题目大意不用解释了吧,看案例就能明白 #include<cstdio> #inclu ...
- 检测WIfi是否打开
引入SystemConfiguration库并添加头文件: #import <SystemConfiguration/SystemConfiguration.h> 代码如下: NS ...
- 折腾iPhone的生活——越狱
这次我也加入了越狱大军,也不是为的什么免费软件,只是遵从我玩机的本质,既然想要玩透这个机子,当然要所有都试过来,就果断越狱了,关于越狱的好处和坏处,我会在另外一篇博客里阐述,这篇博客主要就说怎么样进行 ...
- [待解决问题] 启动不了Android工程
在使用 AudioInputStream sample = AudioSystem.getAudioInputStream(voiceSampleFile); 调用javax.sound.sample ...
- 《A First Course in Probability》-chape4-离散型随机变量-方差
为了描述一组数据的均值,我们引入了数学期望的概念,为了描述一组数据相对均值的波动情况,我们引入了方差. 能够看到,方差的本质也是一个期望,那么我们就能够利用期望的定义将其继续展开. 方差的一条重要性质 ...
- Treasure Hunt - POJ 1066(线段相交判断)
题目大意:在一个正方形的迷宫里有一些交错墙,墙的两端都在迷宫的边缘墙上面,现在得知迷宫的某个位置有一个宝藏,所以需要砸开墙来获取宝藏(只能砸一段墙的中点),问最少要砸开几面墙. 分析:这个题意刚开 ...