La société dans laquelle je travaille initialise toutes ses structures de données à l’aide d’une fonction d’initialisation comme celle-ci:
//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);J'ai eu du mal à essayer d'initialiser mes structures comme ceci:
//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);Y at-il un avantage à l’un sur l’autre? 
Lequel devrais-je faire et comment pourrais-je le justifier en tant que meilleure pratique?  
InitializeFoo()est un constructeur. La seule différence par rapport à un constructeur C ++ est que le thispointeur est passé explicitement plutôt qu'implicitement. Le code compilé de InitializeFoo()et un C ++ correspondant Foo::Foo()sont exactement les mêmes.