Je pense que la meilleure question est pourquoi devrait-il? Après tout:
MyObject foo;
foo.DoBar();
Est à peine plus difficile. C'est plus lisible aussi (bien que cela puisse évidemment être biaisé.) Même si vous pouviez construire-appel, il serait probablement étiqueté comme une "mauvaise chose" à faire. Sorte de comment plusieurs déclarations sur la même ligne sont autorisées, mais diminuent souvent la lisibilité. Une telle construction ajoute des règles et de la complexité à un langage déjà complexe, lorsqu'une solution probablement préférable est déjà présente. Voulons-nous vraiment ajouter du sucre coûteux à une langue juste pour sauver quelques frappes?
En réponse à: «Je pouvais le voir être utile que lorsque vous voulez construire un objet et il suffit d'appeler une fonction sur elle »
Si vous voulez construire un objet juste pour appeler une fonction, serait-il possible de faire de cette fonction une fonction libre? Après tout, il fonctionne sur les données par défaut ou les données qui ont été transmises au constructeur de toute façon. La seule chose qui manque serait le destructeur.
Sans parler de l'autre option:
struct MyObject
{
MyObject(bool pCallDoBar = true)
{
if (pCallDoBar)
DoBar();
}
void DoBar(void)
{
}
};
MyObject foo;
Ou tout simplement:
MyObject().DoBar(); // destructor called here, though
Je pense que vous auriez besoin d'un exemple concret pour faire vraiment une affaire.
J'aime cette syntaxe: "MyObject foo(). SetConfidential(). SetAsynchrone()", je trouve qu'il est plus facile à utiliser qu'un tas de variations de constructeurs qui ne font qu'aggraver le pauvre utilisateur. –
@Matthieu: Vous pouvez chaîner des mutateurs d'état dans la ligne après la déclaration. Je ne pense pas que ce soit un vrai problème. –
@David: oui, heureusement. Ou pouvez-vous utiliser une fausse assignation 'MyObject foo = MyObject(). Set();' bien que je me demande si elle est correctement optimisée. –