C++中的explicit关键字(转)
按默认规定,只用传一个参数的构造函数也定义了一个隐式转换。举个例子:
#pragma once class CExample
{
public:
CExample(void);
CExample(int iFirst, int iSecond = );
~CExample(void); public:
int m_iFirst;
int m_iSecond;
}; #include "StdAfx.h"
#include "Example.h"
CExample::CExample(void) : m_iFirst()
{
} CExample::~CExample(void)
{
} CExample::CExample(int iFirst, int iSecond):m_iFirst(iFirst), m_iSecond(iSecond)
{
} #include "Example.h"
int _tmain(int argc, _TCHAR* argv[])
{
CExample objOne; //调用没有参数的构造函数
CExample objTwo(, ); //调用有两个参数的构造函数
CExample objThree(); //同上,可以传一个参数是因为该构造函数的第二个参数有默认值
CExample objFour = ; //执行了隐式转换,等价于CExample temp(12);objFour(temp);注意这个地方调用了
//编译器为我们提供的默认复制构造函数
return ;
}
class String
{
explicit String(int n);
String(const char *p);
}; String s1 = 'a'; //错误:不能做隐式char->String转换
String s2(); //可以:调用explicit String(int n);
String s3 = String();//可以:调用explicit String(int n);再调用默认的复制构造函数
String s4 = "Brian"; //可以:隐式转换调用String(const char *p);再调用默认的复制构造函数
String s5("Fawlty"); //可以:正常调用String(const char *p);
void f(String); String g()
{
f(); //错误:不能做隐式int->String转换
f("Arthur"); //可以:隐式转换,等价于f(String("Arthur"));
return ; //同上
}
在实际代码中的东西可不像这种故意造出的例子。
C++中的explicit关键字(转)的更多相关文章
- C++中的explicit关键字的用法
一.explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. 二.explicit使用注意事项: ...
- 【c++】【转】c++中的explicit关键字
http://www.cnblogs.com/chio/archive/2007/09/17/895263.html c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式(调用) ...
- C++中的explicit关键字
http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html 上面链接中的博主写的很好,我也不多说了.举得例子也很好,应该也是看了E ...
- C++中的explicit关键字 - 抑制隐式转换(转)
在C++程序中很少有人去使用 explicit 关键字,不可否认,在平时的实践中确实很少能用的上.再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决.但稍微留心一下就会发现现有的MFC库 ...
- C++ explicit关键字详解
本文系转载,原文链接:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用 ...
- explicit关键字
C++中,explicit关键字用来修饰类只有一个参数的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: explicit 关 ...
- C++explicit关键字
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: * explicit ...
- C++ explicit关键字详解(转载)
转载:https://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函 ...
- C++ explicit 关键字
原文转自:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造 ...
随机推荐
- PHP实现消息推送
我们做web的时候偶尔会遇到消息推送,如图示例(红框位置) 当我们遇到这种功能要如何开发呢?下边将我了解的两种方法整理一下: 一.ajax轮询,定时去请求服务器数据 通过观察thinkphp官网貌似也 ...
- 与SVN相关的程序的调试问题【转】
解决eclipse中出现Resource is out of sync with the file system问题. 分析:有时候因为时间紧迫的原因,所以就没去管它,今天再次遇到它,实在看着不爽,所 ...
- vue.js 服务端渲染nuxt.js反向代理nginx部署
vue.js的官方介绍里可能提到过nuxt.js,我也不太清楚我怎么找到这个的 最近项目vue.js是主流了,当有些优化需求过来后,vue还是有点力不从心, 比如SEO的优化,由于vue在初始化完成之 ...
- php中关于empty()函数是否为真的判断
<?php// $a = 0; ==> 符合empty,empty($a)为true// $a = '0'; ==> 符合empty,empty($a)为true// $a = ...
- Gearman任务分配
Gearman 实现多数据库数据同步 测试环境:windows(mysql)+ 虚拟机(ubuntu + mysql)+ PHP 1:gearman 的官方文档可以了解gearman,在ubuntu中 ...
- python中生成器对象和return 还有循环的区别
python中生成器对象和return 还有循环的区别 在python中存在这么一个关键字yield,这个关键字在项目中经常被用到,比如我写一个函数不想它只返回一次就结束那我们就不能用return,因 ...
- stm32的systick原理与应用
/* SysTick滴答定时器 一.功能 SysTick定时器是一个简单的定时器,CM3\CM4内核芯片都具备此定时器.SysTick定时器常用来做延时,采用实时系统时则用来做系统时钟.无论用作延时还 ...
- V4L2学习(三)框架分析
整个v4l2的框架分为三层: 在应用层,我们可以在 /dev 目录发现 video0 类似的设备节点,上层的摄像头程序打开设备节点进行数据捕获,显示视频画面.设备节点的名字很统一,video0 vid ...
- 版本控制之GitHub — — 第一步的理解
GitHub是时下最流行的版本控制的一门“技术”,此之前svn(subversion)也是同样的作用. 至于版本控制:Git是分布式的,而svn是中心式的(或者叫集中式的)版本控制系统,这是两者之间理 ...
- Maven web项目的项目如何创建
1.eclipse--创建maven项目--选择打包方式为war 2.此时项目还缺少一些东西,比如web-inf,web.xml配置文件之类的 3.项目右键-properties-project fa ...