我想创建一个结构,让我们说Mystruct,它包含一个整数和一个myObj对象,其构造函数有两个参数(一个是字符串,另一个是int).我的意思是我想:
struct Mystruct{
myObj obj();
int a;
};
Run Code Online (Sandbox Code Playgroud)
现在,经过一些操作,我想创建一个Mystruct变量并初始化obj和a.为此,我写道:
struct Mystruct* foo;
foo->a=5;
foo->obj=myObj("test",3);
Run Code Online (Sandbox Code Playgroud)
这是一个好方法吗?
你的struct不包含一个对象,而是一个返回一个的函数:
struct Mystruct{
myObj obj(); // this is a function declaration
int a;
};
Run Code Online (Sandbox Code Playgroud)
听起来像你的意思
struct Mystruct{
myObj obj;
int a;
};
Run Code Online (Sandbox Code Playgroud)
然后你可以说
Mystruct foo; // default constructs obj: myObj must be default constructable
foo.a = 5;
foo.obj = myObj("test",3);
Run Code Online (Sandbox Code Playgroud)
要么
Mystruct foo = {myObj("test",3), 5};
Run Code Online (Sandbox Code Playgroud)
注意缺少指针和动态分配:如果你真的需要,你应该只使用那些,如果你知道你在做什么.
为了完整性,您对指针的尝试失败,因为当您声明此指针时:
struct Mystruct* foo;
Run Code Online (Sandbox Code Playgroud)
它没有指向任何有用的东西(实际上,它拥有一个你可以认为是随机的内存地址,指向你不应该写的地方).所以你不能这样做:
foo->a = 42; // Ooops, foo doesn't point to a MyStruct object yet.
Run Code Online (Sandbox Code Playgroud)
在以这种方式使用对象之前,您需要foo指向一个MyStruct对象.