Articles of explicite

Constructeurs explicites et non explicites

class Test { public: Test(int i) { cout<<"constructor called\n";} Test(const Test& t) { cout<<" copy constructor called\n";} }; class Test1 { public: Test1(int i) { cout<<"constructor called\n";} explicit Test1(const Test1& t) { cout<<" copy constructor called\n";} }; int main() { Test t(0); Test u = 0; //Test1 t1(0); Line 1 //Test1 u1 = 0; Line […]

constructeur explicite de paramètre non unique

Quelqu’un peut-il expliquer pourquoi un constructeur de paramètre non unique désigné comme compilé explicitement? Autant que je sache, ce mot-clé est absolument inutile ici, alors pourquoi comstackr sans erreur? class X { public: explicit X(int a, int b) { /* … */} };

Constructeur de copie explicite et std :: sort

Lors du sorting d’un conteneur d’objects ayant une copie explicite ctor j’obtiens des erreurs de compilation (de g ++ 4.8.2 et de clang ++ 3.4, toutes deux en mode –std = c ++ 11) que je ne comprends pas. J’ai créé un exemple simple pour illustrer le problème class A { public: explicit A(int i): […]

Pourquoi je ne peux pas invoquer ‘explicit a (ssortingng x)’?

Je ne suis pas capable d’appeler ‘explicite une (chaîne x)’ en utilisant l’object a3, j’ai deux erreurs de compilation comme: [Erreur] Conversion non valide de ‘const char *’ à ‘int’ [-fpermissive] [Erreur] Initialisation du premier argument de ‘a :: a (int)’ [-fpermissive] Ma sortie attendue est ‘int int double ssortingng’; Quelqu’un pourrait-il m’aider à éliminer […]

Foo f = Foo (); // pas de fonction correspondante pour l’appel à ‘Foo :: Foo (Foo)’… hein?

class Foo { public: explicit Foo() {} explicit Foo(Foo&) {} }; Foo d = Foo(); erreur: pas de fonction correspondante pour l’appel à ‘Foo :: Foo (Foo)’ J’ai essayé de changer Foo(Foo&) en Foo(Foo) comme le suggère l’erreur, AFAIK n’étant pas un constructeur valide, et j’ai bien entendu: erreur: constructeur invalide; tu voulais probablement dire […]

Affectation explicite ou affectation implicite

Je suis en train de lire un tutoriel pour C ++ mais cela ne m’a pas réellement donné de différence (en dehors de la syntaxe) entre les deux. Voici une citation du tutoriel. Vous pouvez également affecter des valeurs à vos variables lors de la déclaration. Lorsque nous affectons des valeurs à une variable à […]

Le constructeur de copie explicite est ignoré même si l’argument exact est fourni

Le constructeur de copie a été fourni. Lors de son utilisation, exactement le même type est passé à argument. Il semble que le compilateur (gcc / g ++ 4.8.2) ignore l’existence du constructeur de copie explicite. Le code génère une erreur de compilation. Pourquoi? L’erreur est: t.cpp: In function ‘A f(const A&)’: t.cpp:19:12: error: no […]

Quelles modifications apscopes à C ++ ont permis d’initialiser la copie pour une classe avec un constructeur explicite?

Considérons ce code: struct X{ explicit X(){} explicit X(const X&){} }; void foo(X a = X()){} int main(){} En utilisant la norme C ++ 14, GCC 7.1 et Clang 4.0 rejettent le code, ce à quoi je m’attendais. Cependant, en utilisant C ++ 17 ( -std=c++1z ), ils acceptent tous les deux le code. Quelle […]

C ++ utilise toujours un constructeur explicite

Après avoir lu le blog suivant: http://xania.org/200711/ambigu- overloading J’ai commencé à me demander “ne dois-je pas toujours définir explicitement mes constructeurs?” J’ai donc commencé à lire plus que ce que j’ai découvert cet article: http://www.sjbrown.co.uk/2004/05/01/always-use-explicit/ Ce qui montre un autre exemple, et explique également ses pensées derrière. Mais bien sûr, ce sont les pensées d’un […]

Mot clé explicite sur le constructeur multi-arg?

Je suis récemment tombé sur une classe étrange à trois constructeurs: class Class { public: explicit Class(int ); Class(AnotherClass ); explicit Class(YetAnotherClass, AnotherClass ); // … } Cela n’a pas vraiment de sens pour moi – je pensais que le mot clé explicite était de protéger la construction choisie par le compilateur d’un type étranger. […]