c++ 结构体定义了构造函数,为什么不能使用花括号{}进行初始化了
时间: 2024-03-23 09:43:32 浏览: 109
C++关于构造函数的初始化
结构体定义了构造函数后,也可以使用花括号{}进行初始化,但是需要注意以下几点:
1. 构造函数的参数必须与花括号中的初始化列表对应,否则会编译报错。
2. 如果结构体中还包含有类类型的成员变量,那么这些成员变量所属的类必须也定义了构造函数才能使用花括号进行初始化。
如果以上两点都满足,那么就可以使用花括号进行初始化了。例如:
```
#include <iostream>
using namespace std;
struct Person {
string name;
int age;
Person(string n, int a): name(n), age(a) {}
};
int main() {
Person p = {"Tom", 18};
cout << p.name << " " << p.age << endl; // 输出 Tom 18
return 0;
}
```
在上面的例子中,Person 结构体定义了一个构造函数,并且包含了两个成员变量 name 和 age。在 main 函数中,使用花括号对 Person 进行初始化,花括号中的值按顺序分别对应构造函数中的两个参数,输出结果为 Tom 18。
阅读全文