编译器在内部做什么,用于初始化变量并在构造对象时分配变量
what compiler does internally for initializing a variable and assigning a variable while constructing object?
可能的重复项:
为什么我应该更喜欢使用成员初始化列表?
类 A 有一个成员变量 i。 我可以在对象创建期间初始化或分配。
A) 初始化
class A {
int i;
public:
A(int _i) : i(_i){}
}
B) 分配
class A {
int i;
public:
A(int _i) : { i = _i}
}
我的问题是这两种方法之间的基本区别是什么?
区别在于使用哪种C++机制来初始化类中的i
。 案例 (A) 通过构造函数初始化它,案例 (B) 使用赋值运算符(如果未定义赋值运算符,则使用复制构造函数)。
大多数C++编译器会为此特定示例生成完全相同的代码,因为您使用的是 int,这是一种"普通旧数据"类型。 如果i
是一种类类型,它可以产生很大的不同。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 将包含C样式数组的对象初始化为成员变量(C++)
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我们再次从结构对象创建结构变量?
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- 从变量对象指向基对象
- C++ - 我可以创建编译时变量对象吗?
- 动态数组添加元素而不创建结构变量/对象
- Visual Studio C++ 编译器在局部变量对象上的奇怪行为
- 其中定义函数的静态局部变量对象
- QT良好的全局变量/对象处理
- r 值的匿名变量对象与真实对象
- QT 测试 - 变量/对象失去价值
- 访问私有变量对象
- C++访问具有相同名称的变量/对象的命名空间中的全局变量/对象
- C++-访问全局变量对象
- 表达式必须具有类类型:c++,将实例变量对象作为指针传递(点表示法参数)
- C++变量/对象和堆内存管理
- 如何在每次迭代中创建一个新变量/对象的循环
- 初始化现有变量/对象的新构造函数