透过一个实例理解C++语言的explicit关键字
2014-04-01 14:22
211 查看
我们先看一段代码:
建立people.cpp 文件,然后输入下列内容:
class People
{
public:
int age;
explicit People (int a)//加上了explict关键字的构造函数
{
age=a;
}
};
void foo ( void )
{
People p1(10); //方式一
People p3=10; //方式二
}
在 C++ 中, 如果一个类有只有一个参数的构造函数,C++ 允许一种特殊的声明类变量的方式。
在上面的方式二: 写下如People p3=10这样的代码,且恰好10的类型(整型int)正好是people类单参数构造函数的参数类型,这时候编译器就自动调用这个构造函数,创建一个people的对象.
即在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据(前面的例子中为10)转换为类的对象。
可见,C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色.
1.是个构造函数,2.是个默认且隐含的类型转换操作符.
如果在构造函数前加上 explicit 修饰词, 则会禁止这种自动转换,在这种情况下, 即使将对应于构造函数参数类型的数据直接赋值给类变量,编译器也会报错。
也就是说: 写下如People p3=10这样的代码,如果去除构造函数的explicit关键字修饰, 数据10将传递给people的构造函数,并创建一个people对象,实现与方式一一样的效果; 加上explicit关键字修饰,这样的代码将被认为是错误的。
编译代码可以看到报错。
建立people.cpp 文件,然后输入下列内容:
class People
{
public:
int age;
explicit People (int a)//加上了explict关键字的构造函数
{
age=a;
}
};
void foo ( void )
{
People p1(10); //方式一
People p3=10; //方式二
}
在 C++ 中, 如果一个类有只有一个参数的构造函数,C++ 允许一种特殊的声明类变量的方式。
在上面的方式二: 写下如People p3=10这样的代码,且恰好10的类型(整型int)正好是people类单参数构造函数的参数类型,这时候编译器就自动调用这个构造函数,创建一个people的对象.
即在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据(前面的例子中为10)转换为类的对象。
可见,C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色.
1.是个构造函数,2.是个默认且隐含的类型转换操作符.
如果在构造函数前加上 explicit 修饰词, 则会禁止这种自动转换,在这种情况下, 即使将对应于构造函数参数类型的数据直接赋值给类变量,编译器也会报错。
也就是说: 写下如People p3=10这样的代码,如果去除构造函数的explicit关键字修饰, 数据10将传递给people的构造函数,并创建一个people对象,实现与方式一一样的效果; 加上explicit关键字修饰,这样的代码将被认为是错误的。
编译代码可以看到报错。
相关文章推荐
- 透过一个实例理解C++语言的explicit关键字
- 一个让你迅速理解Javabean的实例
- 谈谈对于ajax的理解和ajax一个实例分析。
- 一个小小的distinct关键字,以前居然一直没理解
- 理解Java异常处理机制——Java异常处理的一个综合实例
- 如何理解一个实例在其生存期中最多只能装载和打开一个数据库
- 对一个gridview异步加载大量图片的实例的个人理解
- C++中的explicit关键字实例浅析
- servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解1
- 在java中怎么理解“用instanceof操作符判断父类对象是否为子类的一个实例”?
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
- 通过一个实例理解 offsetLeft,offsetTop; offsetWidth , offsetHeight
- static关键字注意事项_对"静态只能访问静态"的理解_(注意指的是一个类中)
- PHP递归算法的一个实例 帮助理解
- JAVA final 、super 关键字以及继承关系中父类与子类实例变量初始化的 理解
- 带有一个参数的构造函数的隐式类型转换和explicit 关键字
- 一个让你迅速理解Javabean的实例
- 透过代码理解python的静态方法、类方法与实例方法
- 一个理解PHP面向对象编程(OOP)的实例
- 一个例子对于类继承和关键字“this”的理解