Supposons que je veux transmettre un objet temporaire dans une fonction. Existe-t-il un moyen de le faire dans 1 ligne de code vs. 2, avec une structure? avec une classe, je peux faire: p> donné : P> struct test_struct
{
int a;
short b;
};
void struct_func(const test_struct & a_struct)
{
printf("%d %d\n", a_struct.a, a_struct.b);
}
5 Réponses :
Je ne suis pas expert en C ++, mais ne pouvez-vous pas simplement placer la déclaration de création dans la liste des arguments de votre appel de fonction? p>
Non, certains compilateurs permettent ce genre de chose et c'est en C ++ 0x (§5.2.3 / 3), mais ce n'est pas la norme actuelle.
Vous pouvez le faire de la même manière que vous le faites avec la classe. Donnez simplement à votre structure un constructeur et vous pouvez le créer en ligne comme la structure. Vos objections sur l'utilisation d'un constructeur ne sont pas fondées. La principale différence entre une classe et une structure est la visibilité par défaut associée à celle-ci. Pour les cours, c'est privé; Pour les structures, le public. Il n'y a pas de "chaudière" et vous n'avez pas besoin d'obéir à des "conventions" que vous ne voulez pas.
@Terry Mahaffey, vous pouvez définitivement utiliser l'initialisation de la corset avec une classe. Les contraintes sont les mêmes que pour la structure. La différence entre struct code> et
class code> est i> la visibilité par défaut seulement (pour les membres et les classes de base). Vous pouvez même mélanger les mots-clés:
struct t {}; Classe t v; code>.
Oui, tu as raison. Je pensais que seules les structures pourraient être des pods pour une raison quelconque. Je retire mon commentaire
Les structures peuvent également avoir des constructeurs afin de pouvoir faire la même chose avec eux que vous faites avec l'exemple de classe. P>
Ceci est possible dans le C ++ 11 standard . Fondamentalement, vous pouvez faire cela:
struct_func(test_struct{5, 7});
En fait, vous n'avez même pas besoin de déclarer explicitement le type, à moins qu'il n'y ait aucune ambiguïté sur les types pouvant être créés par la liste des init de la BRACED: #include
Une alternative à la fourniture d'un constructeur dans votre structure serait de fournir une fonction gratuite make_xxx: une raison pour laquelle vous voudrez peut-être éviter les constructeurs dans les structures consiste à autoriser l'initialisation de la corset Dans les matrices de structures: p> vs p>
Notez qu'en C ++ 11, l'utilisation peut utiliser l'initialisation de la corset, même si le constructeur code> le point code> est défini. Dans ce cas, les arguments dans les accolades seront transmis au constructeur. Cette fonctionnalité s'appelle Initialisation uniforme .
Vous pouvez toujours écrire un constructeur en gardant les variables des membres publics. Donc, vous n'avez pas besoin de méthodes get / définies. Y a-t-il un problème dans cela?
Voulez-vous dire pour atteindre l'initialisation des structures en C? En C ++, une structure peut également faire ce que vous faites dans la classe.