Selon Herb Sutter, le code ci-dessous ne serait pas compilé. Voir ce site http://www.gotw.ca/gotw/066.htm d’où j’ai extrait le texte suivant concernant les function-try-blocks : Vers certaines morales Incidemment, cela signifie également que la seule utilisation possible (pour la répétition uniquement) d’un constructeur function-try-block consiste à traduire une exception levée à partir d’un sous-object base ou […]
Dupliquer possible: Peut-on accéder à la mémoire d’une variable locale en dehors de sa scope? Code: #include using namespace std; class B{ public: int b; B():b(1){} ~B(){cout << "Destructor ~B() " << endl;} }; class A{ public: B ob; A()try{throw 4;} catch(…){cout << "Catched in A() handler : ob.b= " << ob.b<<endl;} }; int main()try{ […]
Selon les normes de codage LLVM , “LLVM n’utilise pas […] d’exceptions“. Cependant, LLVM utilise les conteneurs standard de C ++, tels que std::vector . Comment est-il possible pour LLVM d’utiliser les conteneurs standard sans exceptions? Comment gère-t-il une situation dans laquelle un conteneur devrait normalement être throw ? Par exemple, que se passe-t-il si […]
J’essaie d’attraper une exception levée lorsqu’une erreur survient lors de la lecture d’un fichier dans une méthode de classe depuis main. Le code simplifié est le suivant: #include #include #include class A { public: A(const std::ssortingng filename) { std::ifstream file; file.exceptions( std::ifstream::failbit | std::ifstream::badbit); file.open(filename); } }; int main() { std::ssortingng filename(“file.txt”); try { A […]
Je lis actuellement le livre Effective C ++ de Scott Meyers. Il indique que je devrais préférer inline fonctions en inline à #define pour les macros de type fonction. Maintenant, j’essaie de coder une fonction en ligne pour remplacer ma macro d’exception. Ma vieille macro ressemble à ceci: #define __EXCEPTION(aMessage) \ { \ std::ossortingngstream stream; […]
Le destructeur de la classe de base std::exception C ++ 11 n’est pas noexcept , et peut donc (en théorie) émettre une exception, ce qui entraîne une autorisation relâchée pour toutes ses classes dérivées (y compris std::bad_alloc et std::runtime_error ). Le destructeur de std::exception C ++ 98 avait cependant une spécification d’exception throw() , indiquant […]
Pour faire suite à ma question précédente : Si je change le code comme suit: struct ExceptionBase : virtual std::exception{}; struct SomeSpecificError : virtual ExceptionBase{}; struct SomeOtherError : virtual ExceptionBase{}; void MightThrow(); void HandleException(); void ReportError(); int main() { try { MightThrow(); } catch( … ) { HandleException(); } } void MightThrow() { throw SomeSpecificError(); […]
J’ai une bibliothèque partagée avec la classe: // HPP: class WorldSettings { private: static std::unordered_map mIntegerStorage; static std::unordered_map mFloatStorage; static std::unordered_map mSsortingngStorage; public: template static T &Get(const std::ssortingng &key); template static T &Set(const std::ssortingng &key, T value); }; // CPP: #define DoReturn(MapName, Key, Type) { \ assert( MapName.find(Key) != MapName.end() && “No such key in […]
Je me souviens d’avoir lu comment des exceptions pouvaient être détectées sans l’utilisation de try / catch. Fondamentalement, lorsqu’une exception est générée, telle que “Exception non gérée” via la suppression de la définition d’un pointeur null, un processus est déclenché même lorsqu’un test try / catch n’est pas codé pour l’exception. Je crois que cela […]
mon projet utilise 2 compilateurs C ++ différents, g ++ et nvcc (compilateur cuda). J’ai remarqué que les exceptions renvoyées par les fichiers d’object nvcc ne sont pas sockets en compte par les fichiers d’object g ++. les exceptions C ++ sont-elles supposées être compatibles binarys sur la même machine? qu’est-ce qui peut causer un […]