在C++中初始化Direct to对象的工作原理
How Initializing Direct to object works in C++?
我真的不知道什么问题/标题可以解释我的问题。我只是给你举个例子。
这是怎么回事?编译器会自动调用带有初始值设定项列表的参数构造函数吗?
#include <iostream>
class A {
public:
int k;
};
int main(){
A obj={2};
std::cout << obj.k; // output 2;
}
我对编译器自动调用参数化构造函数感到困惑。然后我试着测试。
#include <iostream>
class A {
public:
int k;
A(int a){
std::cout << "Para A" << std::endl;
}
};
int main(){
A obj={2}; // error in C++98 but works in C++11 and call Para A.
std::cout << obj.k; // Garbage value why?
}
在那之后,我认为,当我们没有显式定义构造函数时,编译器会自动假设A obj={firstField,SecondField,....};
意味着调用默认构造函数,然后初始化{....}
中具有给定值的字段。所以,问题是,我对这个逻辑是正确的吗?如果不是,那么这是如何工作的A obj={2};
在C++11中
如果定义了参数化构造函数,则可以通过此A obj={values};
调用该构造函数
这被称为聚合初始化。
当我们没有显式定义构造函数时,编译器会自动假设
A obj={firstField,SecondField,....};
意味着调用默认构造函数,然后在{....}
中初始化具有给定值的字段
正确。
但是,当您定义一个构造函数并执行A obj = {...}
时,这就是复制列表初始化。
相关文章:
- 对象指针在c++中是如何工作的
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 错误:三元运算符无法在对象中正常工作"cout"
- C++控制台应用,其中有两个冲突的对象不工作
- C++:返回本地对象,但不能正常工作
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 此类模板的对象创建如何工作?
- 返回对象如何与分配运算符一起工作
- 在删除另一个类中的一个类的对象时析构函数如何工作
- 构建对象数组是如何工作的?我被这个例子困住了
- C :删除对象(使用新的),但成员函数仍然可以正常工作(?)
- 当 std::unique_ptr 在手动删除其拥有的对象后超出范围时,它如何工作?
- 快速排序动态大量对象无法正常工作
- CPU寄存器中返回的用户定义类型的C 对象.实例方法如何工作
- 在dll中静态对象的破坏之前,要终止工作线程(但不是.exe)
- 朋友功能是否继承?为什么基类朋友功能在派生的类对象上工作
- std::共享内存中的互斥对象不工作
- 函数对象无法正常工作
- 有可能实现一个与数组而不是单个对象一起工作的内存池吗
- asio::io_service.run() 尽管工作对象退出