草庐IT

EXCEPTION_INLINE

全部标签

C++ fstream : throwing exception when reaching eof

我想读取两个文件,直到读到其中一个文件的末尾。如果出现问题,fstream应该抛出异常。问题是,设置eof位时也会设置坏位或失败位。ifstreaminput1;input1.exceptions(ios_base::failbit|ios_base::badbit);input1.open("input1",ios_base::binary|ios_base::in);ifstreaminput2;input2.exceptions(ios_base::failbit|ios_base::badbit);input2.open("input2",ios_base::binary|io

C++ `inline` 关键字和编译器优化

我一直听说inline关键字不再用作现代编译器的提示,而是用于避免多源项目中的多重定义错误。但是今天遇到了编译器服从关键字的例子。没有inline关键字,如下代码#includeusingnamespacestd;voidfunc(constintx){if(x>3)cout使用命令g++-O3-Sa.cpp,生成func未内联的汇编代码。但是,如果我在func的定义前添加inline关键字,func将被内联到main中。生成的汇编代码部分为.LC0:.string"HAHA\n".LC1:.string"KKK\n".text.p2align4,,15.globl_Z4funci.t

c++ - 如何将消息附加到 std::exception?

我想做以下事情:std::stringfileName="file";std::ifstreamin(fileName.c_str());in.exceptions(std::istream::failbit);try{loadDataFrom(in);}catch(std::ios_base::failure&exception){std::stringlocation=std::string("infile\n")+fileName;//appendthe"location"totheerrormessage;throw;}如何将错误消息附加到异常? 最

c++ - 安置新的和异常(exception)

“placementnew”运算符声明如下:void*operatornew(std::size_tsize,void*ptr)noexcept;但是虽然它不涉及任何实际分配,因此消除了错误的分配异常,但指针仍然可能指向错误的位置,在这种情况下,人们会期望得到一个范围或溢出/下溢错误,但是它被声明为noexcept的事实不会直接终止执行吗?这是否也意味着在C++11之前放置new将抛出并尝试处理std::unexpected而不是直接处理std::set_unexpected崩溃?“以防万一”,难道不应该有大量的placementnew吗? 最佳答案

c++ - boost::exception 和 std::exception 之间的关系

假设有如下代码:try{//Dosomebooststuffhere}catch(conststd::exception&stdEx){cout问题:1)我知道代码适用于某些boost异常,即使std::exception和boost::exception不在同一个继承路径上。为什么它会起作用?2)它是否适用于所有boost异常?换句话说,是否有可以触发低于std::exception处理程序的boost::exception处理程序的示例? 最佳答案 如您所说,boost::exception不是从std::exception派生

c++ - std::current_exception 是否应该从类的析构函数中的 catch block 返回非空

我和我的同事认为我们在VisualC++2012和2013中发现了一个错误,但我们不确定。以下代码中对std::current_exception的调用是否应该返回一个非空的exception_ptr?似乎在我们尝试过的大多数其他编译器上:#include#include#includeclassA{public:~A(){try{throwstd::runtime_error("ohno");}catch(std::exception&){std::clog在VisualC++下运行时,我们得到“0”(假,这意味着返回的exception_ptr为空)。其他编译器,例如g++,打印“

现在允许对ConstexPR静态数据成员的重新定义? (但不是Inline Const)?

以下未能在C++14中的GCC和Clang下进行编译,但C++1Z成功:structCls{staticconstexprintN=0;};constexprintCls::N;constexprintCls::N;C++14错误是可以预见的:redefinitionof‘constexprconstintCls::N’是什么改变了这一合法?我发现:N465910.1.5[DCL.Constexpr]使用ConstexPR规范声明的函数或静态数据成员隐含是内联函数或变量所以我认为这可能与内联变量有关,但是两个编译器下的C++1Z失败structCls{staticinlineconstintN

c++ - 为什么 MSVC 10.0 编译器经常忽略 inline 关键字?

我有一些非常复杂的c++代码,用于实时系统,因此对速度绝对敏感。它是在Linux上开发的,为了加快它的速度,许多函数都标有“内联”关键字,并移至头文件中以允许内联。现在我将此代码移植到Windows(msvc10.0、Windows7),它的运行速度大约慢了30%。在做了一些分析之后,我发现问题基本上是很多函数没有内联。当我改用“__forceinline”时,我很容易看到速度提高了10-20%。有人对此有解释吗?仅仅是因为msvc中的算法更加保守吗?还是我只是做错了什么,比如缺少配置选项? 最佳答案 您需要检查您的MSVC优化设置

c++ - 与 std::current_exception 关联的数据的生命周期

考虑以下代码:std::exception_ptreptr{std::current_exception()};constchar*msg=0;try{if(eptr!=std::exception_ptr{}){std::rethrow_exception(eptr);}}catch(conststd::exception&ex){msg=ex.what();}我可以在catch之外使用msg吗?换句话说,ex是否引用与eptr相同的异常实例?谢谢! 最佳答案 rethrow_exception的描述说:Throws:theexc

c++ - 编译器是否更有可能使用指定的 inline 关键字在类声明中内联函数?

我最近在查看一位同事的代码,注意到他在类声明中定义的一堆Getter函数前面放置了“inline”关键字。例如classFoo{public:inlineboolGetBar()const{returnm_Bar;}private:boolm_Bar;};我在代码审查中建议他删除内联关键字,正如我在许多不同的地方读到的那样,在类声明中定义函数是由编译器解释的(在这种情况下为MSVC,但显然是C++标准的一部分)作为作者想要内联函数的指示。我的感觉是,如果额外的文本没有任何作用,那只是不必要的困惑,应该删除。他的回应如下:inline关键字让与此代码交互的其他程序员清楚地知道这些函数是/