Công ty tôi làm việc đang khởi tạo tất cả các cấu trúc dữ liệu của họ thông qua chức năng khởi tạo như vậy:
//the structure
typedef struct{
int a,b,c;
} Foo;
//the initialize function
InitializeFoo(Foo* const foo){
foo->a = x; //derived here based on other data
foo->b = y; //derived here based on other data
foo->c = z; //derived here based on other data
}
//initializing the structure
Foo foo;
InitializeFoo(&foo);
Tôi đã bị đẩy lùi khi cố gắng khởi tạo các cấu trúc của mình như thế này:
//the structure
typedef struct{
int a,b,c;
} Foo;
//the initialize function
Foo ConstructFoo(int a, int b, int c){
Foo foo;
foo.a = a; //part of parameter input (inputs derived outside of function)
foo.b = b; //part of parameter input (inputs derived outside of function)
foo.c = c; //part of parameter input (inputs derived outside of function)
return foo;
}
//initialize (or construct) the structure
Foo foo = ConstructFoo(x,y,z);
Có một lợi thế cho người này hơn người kia?
Tôi nên làm cái nào, và làm thế nào để chứng minh nó là một cách thực hành tốt hơn?
InitializeFoo()
là một nhà xây dựng. Sự khác biệt duy nhất từ một hàm tạo C ++ là, this
con trỏ được truyền một cách rõ ràng chứ không phải ngầm định. Mã được biên dịch InitializeFoo()
và một C ++ tương ứng Foo::Foo()
hoàn toàn giống nhau.