Motivé par cette question 1 , j’ai créé le code suivant: struct X { X(int) {} }; struct Y { operator X() { return X{1}; } operator int() { return 1; } }; int main() { X x(Y{}); } Démo en direct avec des messages d’erreur . Ce code: génère une erreur d’ambiguïté avec toutes […]
Disons que j’ai du code c ++: if (error) goto exit; … // size_t i = 0; //error size_t i; i = 0; … exit: … Je comprends que nous ne devrions pas utiliser la goto , mais quand même pourquoi size_t i; i = 0; comstackr alors que size_t i = 0; n’est-ce pas? […]
Je me souviens d’avoir appris la structure de données cousue en angle il ya un certain nombre d’années et en suis fasciné depuis. Il a été créé avec un article d’Ousterhout . J’ai cherché et n’ai pas été en mesure de trouver une implémentation libre / ouverte. Je préférerais une implémentation C ++, mais accepterais […]
Dans cette réponse , tloveless a souligné qu’il était possible d’utiliser this->foo::foo(42); pour que la délégation de constructeur appelle directement un constructeur: #include struct foo { int m; foo(int p) : m(p) { std::cout << "foo("<<p<foo::foo(42); std::cout << "foo(), " << m << "\n"; } }; int main() { foo f; std::cin.ignore(); } J’ai été […]
programme: #include struct bar_t { int value; template bar_t (const T& t) : value { t } {} // edit: You can uncomment these if your comstackr supports // guaranteed copy elision (c++17). Either way, it // doesn’t affect the output. // bar_t () = delete; // bar_t (bar_t&&) = delete; // bar_t (const bar_t&) […]
Comme je le sais, toute classe désignée pour avoir des sous-classes doit être déclarée avec le destructeur virtuel afin que les instances de classe puissent être détruites correctement lors de leur access via des pointeurs. Mais pourquoi il est même possible de déclarer une telle classe avec un destructeur non virtuel? Je crois que le […]
En C ++, la durée de vie d’une valeur temporaire peut être étendue en la liant à une référence: Foo make_foo(); { Foo const & r1 = make_foo(); Foo && r2 = make_foo(); // … } // both objects are destroyed here Pourquoi est-ce permis? Quel problème cela résout-il? Je n’ai pas pu trouver d’explication […]
En C ++, la déclaration et la définition de fonctions, variables et constantes peuvent être séparées comme suit: function someFunc(); function someFunc() { //Implementation. } En fait, dans la définition des classes, c’est souvent le cas. Une classe est généralement déclarée avec ses membres dans un fichier .h, et ceux-ci sont ensuite définis dans un […]
Considérons une hiérarchie de classe où A est la classe de base et B dérive de A Si le constructeur de copie n’est pas défini dans B , le compilateur en synthétise un. Lorsqu’il est appelé, ce constructeur de copie appelle le constructeur de copie de la classe de base (même celui synthétisé, si aucun […]
Supposons que l’espace de nom std Le projet N3690 du comité C ++ 14 définit std::make_unique ainsi: [n3690: 20.9.1.4]: création unique_ptr [unique.ptr.create] template unique_ptr make_unique(Args&&… args); 1 Remarques: Cette fonction ne doit pas participer à la résolution de surcharge, sauf si T n’est pas un tableau. 2 renvoie: unique_ptr(new T(std::forward(args)…)). template unique_ptr make_unique(size_t n); 3 […]