草庐IT

exception_class

全部标签

C++ 异常:为什么要使用或扩展 std::exception?

根据thissite抛出字符串或整数非常有用。我发现这非常干净且易于理解。throw"descriptionofwhathappened"而不是throwstd::runtime_error("descriptionofwhathappened")有什么缺点? 最佳答案 那个网站很愚蠢,教的是糟糕的设计。如果您抛出int或char*,那么您将不得不使用int或char*捕获它>只有。您可以使用const对其进行限定。如果您抛出std::runtime_error,那么您可以使用std::runtime_errorconst&或其基类

c++ - 当我尝试使用异常时,为什么我的代码在 Qt Creator 中使用 -fno-exceptions 进行编译?

在我指定的项目.pro文件中:QMAKE_CXXFLAGS+=-fno-exceptions但我能够在我的应用程序中抛出异常。对此有什么想法吗?示例:这不应该起作用,但它起作用了#include#includeintmain(intc,char**v){QApplicationapp(c,v);try{throw1;}catch(inti){}returnapp.exec();} 最佳答案 您不能通过设置QMAKE_CXXFLAGS来关闭异常,因为此选项由CONFIG处理。你应该使用CONFIG-=exceptions关闭它们。QM

c++ - 如何处理失败的方法 : by using exceptions or making the methods return bool?

如何处理失败的方法:使用异常使方法返回bool值第一种方法是当出现问题时抛出异常。但是有问题的代码需要放在tryblock中,然后你需要编写catchblock。您需要检查返回值的第二种方法方法,然后做一些事情。那么基本上不是同一个机制吗?你有两个部分:检测到出现问题然后采取措施。那么我使用哪种方法重要吗? 最佳答案 异常的主要好处是它们是非本地的。您可以在抛出异常的地方捕获几个调用层之外的异常。这样,介于两者之间的代码就不必关心异常(除了确保在展开期间进行适当的清理,即异常安全),这使得异常情况不太可能被遗忘。但这种好处是有代价的

c++ - 错误 : redefinition of class

这是我的代码://inmain.cpp#include"iostream"#include"circle.cpp"#include"rectangle.cpp"#include"shape.cpp"usingnamespacestd;intmain(){Shapeshapes[10];for(inti=0;iwidth=width;}virtualvoidsetHeigth(intheight){this->height=height;}};//inshape.cppclassShape{public:virtualintgetArea()const=0;};编译时,我得到这个错误:e

c++ - 为我的类(class)重载流运算符 << >> 的正确方法是什么?

我对如何在C++中为我的类重载流运算符感到有点困惑,因为它们似乎是流类上的函数,而不是我的类上的函数。这样做的正常方法是什么?目前,对于“getfrom”运算符,我有一个定义istream&operator>>(istream&is,Thing&thing){//etc...哪个有效。Thing类的定义中没有提到它。我希望它能够在其实现中访问我的Thing类的成员-我该怎么做? 最佳答案 您的实现没有问题。您需要执行的唯一额外步骤是在Thing中将您的运算符(operator)声明为friend:classThing{public:

c++ - 为什么 C+ +'s <vector> templated class doesn' t 打破了一个定义规则?

也许这是一个蹩脚的问题,但我不明白!如果我包括或在多个翻译单元(不同的.cpp)中,为什么它不破坏ODR?据我所知,每个.cpp的编译方式都不同,因此将为每个目标文件分别生成vector的方法代码,对吧?所以链接器应该检测到它并提示。即使它不会(我怀疑这是模板的特殊情况),当我将所有链接在一起时,它会在每个单元中使用一个代码还是不同的克隆代码集??? 最佳答案 同样,任何模板定义都不会破坏ODR—ODR特别指出,模板定义可以在翻译单元之间重复,只要它们确实是重复的(并且,因为它们是重复,不可能有冲突或歧义)。[C++14:3.2/6

C++ 风格约定 : Parameter Names within Class Declaration

我是一个相当新的C++程序员,我想听听支持和反对在类声明中命名参数的争论。这是一个例子:Student.h#ifndefSTUDENT_H_#defineSTUDENT_H_#includeusingnamespacestd;classStudent{private:stringname;unsignedintage;floatheight,GPA;public:Student(string,unsignedint,float,float);voidsetAge(unsignedint);};#endif/*STUDENT_H_*/对比#ifndefSTUDENT_H_#defineS

c++ - c++ 中是否有任何类是所有类的父类(super class)?

像javaJava.lang.Object是所有类的父类(superclass)所以在C++中是否有任何类像对象? 最佳答案 不,没有。在C++中,您为使用的东西付费,而不是更多。你可以有void*可以指向任何东西,或者如果有意义的话,写你自己的基类。 关于c++-c++中是否有任何类是所有类的父类(superclass)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1831

c++ - 模板类中函数指针的成员给出错误 : must be a class or namespace when followed by '::'

我试图在C++中声明一个模板函数指针。templateclassMyClass{public:typedefconstunsignedchar*(T::*MyTemplatedEvent)(unsignedlong&myParameter);};但出于某种原因,我不断收到此错误:'T':mustbeaclassornamespacewhenfollowedby'::'有人能告诉我哪里做错了吗?编译器应该知道T是一个类。它在MyClass声明上方这样说...... 最佳答案 对于T::*MyTemplatedEvent,您期望T是类类

c++ - 非类型模板参数 : how to pass reference to base class object?

似乎无法传递对的引用派生对象的基类对象作为模板参数,正如我在这里尝试做的那样:structa{int_v;constexpra():_v(0){}constexpra(intv):_v(v){}};structc:publica{constexprc():a(){}constexprc(intv):a(v){}};externconstcdefault_a;constexprconstcdefault_a{1};consta&c_as_a=default_a;//^--thisline(16)causesnoerror-ccanbeconvertedtoatemplatestructb