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. ... 
随机推荐
- Apache Hadoop RPC Authentication 安全绕过漏洞
			漏洞名称: Apache Hadoop RPC Authentication 安全绕过漏洞 CNNVD编号: CNNVD-201308-425 发布时间: 2013-08-28 更新时间: 2013- ... 
- php5.4下安装ECshop出现错误的解决办法
			转:http://www.programmernote.com/?p=65 1.安装是会提示 Warning: date_default_timezone_get(): It is not safe ... 
- jquery-pager分页
			首先引用这三个文件 <script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript&qu ... 
- 【转】如何使用Unity创造动态的2D水体效果
			原文:http://gamerboom.com/archives/83080 作者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染 ... 
- Unity之Avatar原理
			今天花了一些时间理了理Unity的动画系统. 之前给不同模型配动画时没怎么在意,只知道用Avatar可以让一个模型使用另一个模型的动画.由于用的基本上都是人物模型,基本上没出现什么错误. 不过在用到异 ... 
- 【设计模式 - 5】之适配器模式(Adapter)
			1 模式简介 适配器模式解决的问题:让原本因为接口不兼容而不能一起工作的类可以一起工作. 适配器模式的UML原理图如下图所示: 从上图可见,客户想要用Target接口实现Adaptee接口中 ... 
- 【设计模式 - 14】之命令模式(Command)
			1 模式简介 命令模式的定义: 命令模式将命令封装成对象,从而使调用一个命令变为调用一个对象的指定方法. 命令模式的优点: 1) 降低了系统耦合度: 2) 新的命 ... 
- [转]PHP100视频教程(2012-2013版)下载地址及密码
			[转] PHP100视频教程(2012-2013版) 下载地址及其密码 先记起来,不用再到处找密码了. NO 名称 下载地址 密码 1 [第01讲]开启PHP学习之路,融入新互联网时代 http:/ ... 
- (转)PHP连接数据库之PHP连接MYSQL数据库代码
			PHP连接数据库之PHP连接MYSQL数据库代码 < ?php $mysql_server_name='localhost'; //改成自己的mysql数据库服务器 $mysql_usernam ... 
- android 15  activity跳转
			从一个屏幕跳到另一个屏幕,一个activity跳转到另一个activity,Intent类用于组件之间传递数据和跳转,组件包括不仅activity. package com.sxt.day04_01; ... 
