C++构造函数的调用
2015-08-19 12:46
543 查看
很快就要找工作笔试面试啥的了,昨晚又有问我关于C++构造函数的调用问题。
C++98/03标准中有三个特殊的构造函数,默认构造函数,拷贝构造函数和赋值构造函数;C++11/14中海油基于移动语义的移动拷贝构造函数和移动赋值函数。
一般的,对于一个类的构造函数,假如原型如下
那么实际使用的时候,这样写
在C++中,隐式的调用构造函数的情况是那种支持单参数的构造函数,比如上边的构造函数由于有一个缺省的参数,所以可以只用带一个参数,于是
注意,对于单独出现的(value1, value2), 这是一个逗号表达式,表达式的值为value2!
C++98/03标准中有三个特殊的构造函数,默认构造函数,拷贝构造函数和赋值构造函数;C++11/14中海油基于移动语义的移动拷贝构造函数和移动赋值函数。
一般的,对于一个类的构造函数,假如原型如下
MyClass(T1 val1, T2 val2 = value);
那么实际使用的时候,这样写
MyClass obj(value1, value2);就是构造函数的显示调用了,并不需要写成普通函数的调用形式,需要把函数名和括号写出来的那种 func(arg1, arg2)。
MyClass obj = MyClass(value1, value2);而且这么写,语义上是先调用了上边的构造函数,然后再调用拷贝构造函数(实际上编译器会做优化,省掉拷贝构造函数的调用)。这就是构造函数特殊的地方,就像拷贝构造函数的调用和赋值构造函数的调用不是以是否用等号来区别的,而是初始化和赋值的区别。
在C++中,隐式的调用构造函数的情况是那种支持单参数的构造函数,比如上边的构造函数由于有一个缺省的参数,所以可以只用带一个参数,于是
MyClass obj = value1;这里就是构造函数的隐式调用(把最上边的构造函数定义为explicit 这里会报错),先用value1 构造一个临时对象,然后来拷贝构造对象obj,当然现在C++支持统一的大括号初始化,所以在构造函数的调用过程中,使用大括号和使用小括号的效果是一样的。
注意,对于单独出现的(value1, value2), 这是一个逗号表达式,表达式的值为value2!
相关文章推荐
- 保存FLTK的配置方法
- [C++]Ugly Number 丑数
- acm c++常用函数(stl)
- Windows下C++访问数据库(ADO)
- C++封装C#的类库DLL,并c++中C#的string类型的转换使用
- C++ ARGB 和 16进制相互转换
- 如何优化C/C++语言代码(程序员必读)
- 正确使用UDP广播(C++代码)
- c++map的用法
- visual studio与visual c++ 6.0的区别
- 关于visual c++6.0【未完待续】
- C/C++之sizeof与strlen的区别
- VIM C语言函数名高亮
- 技巧:在 C/C++中如何构造通用的对象链表
- C++ 之 Vector(容器)初始化高维数组
- [LeetCode] Group Anagrams
- C语言使用SMTP发送邮件
- C++手稿:函数与参数
- C++手稿:指针与引用
- C++手稿:STL中的函数对象与函数指针