C++类初始化列表与构造函数内赋值区别
来源:互联网 发布:淘宝店铺改名字和头像 编辑:程序博客网 时间:2024/05/17 22:15
最近面试过程中,面试问了类构造初始化列表和构造函数内赋值有什么区别。当时没完全回答清楚,后来google了一下,发现两者有如此大的不同,现总结如下。
构造初始化列表中,是直接调用相应的构造函数进行对象初始化操作。而在构造函数内赋值会,先经过调用无参构造函数进行初始化,然后再调用相应的赋值函数,进行赋值操作。可见前者的执行效率更高。请对比以下两组代码的执行结果:
#include <stdio.h>int g_counter = 0;class A{public: A(void) { m_a = 0; printf("A(void)\n"); } A(int i) { m_a = i; printf("A(int i)\n"); } A &operator=(int i) { printf("A &operator=(int i)\n"); return *this; }private: int m_a;};class B{public: B(int i); ~B() { printf("~B() m_value=%d\n", m_value); } B &operator=(const B&b) { printf("B &operator=(const B&b)\n"); return *this; }private: int m_value; A m_aa;};B::B(int i){ m_aa = i; m_value = g_counter++; printf("B() m_value=%d\n", m_value);}int main(void){ B b(1);return 0;}执行结果:
#include <stdio.h>int g_counter = 0;class A{public: A(void) { m_a = 0; printf("A(void)\n"); } A(int i) { m_a = i; printf("A(int i)\n"); } A &operator=(int i) { printf("A &operator=(int i)\n"); return *this; }private: int m_a;};class B{public: B(int i); ~B() { printf("~B() m_value=%d\n", m_value); } B &operator=(const B&b) { printf("B &operator=(const B&b)\n"); return *this; }private: int m_value; A m_aa;};B::B(int i):m_aa(i){ m_value = g_counter++; printf("B() m_value=%d\n", m_value);}int main(void){ B b(1);return 0;}执行结果:
0 0
- C++类初始化列表与构造函数内赋值区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- 类内初始化与初始化列表与构造函数内部赋值
- C++中类构造函数初始化列表和函数内赋值区别
- C/C++基础问答(1):通过初始化列表和构造函数内赋值初始化成员变量的区别
- C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- [C++]类成员冒号初始化以及构造函数内赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
- iOS 导航控制器(代码方式)
- UDP Socket编程
- oracle表空间表分区详解及oracle表分区查询使用方法
- hive权限管理
- C++类初始化列表与构造函数内赋值区别
- yum 升级centos6.5内核
- 通过案例理解Abstract类和interface类
- HTML5摇一摇以及音频播放问题优化总结
- 我在使用AndroidStudio模仿智慧北京时遇到的问题及解决办法
- block,inline和inline-block概念和区别
- JavaWeb学习总结(五十)——文件上传和下载
- MS SQLSERVER 2008试用过期之后的那点事儿
- node.js+redis之一:redis简单介绍