草庐IT

noexcept-ness

全部标签

c++ - 在函数声明和定义中使用 noexcept 说明符?

考虑以下函数://Declarationinthe.hfileclassMyClass{templatevoidfunction(T&&x)const;};//Definitioninthe.cppfiletemplatevoidMyClass::function(T&&x)const;如果T类型不可构造,我想让这个函数noexcept。如何做到这一点?(我的意思是语法是什么?) 最佳答案 像这样:#include//Declarationinthe.hfileclassMyClass{public:templatevoidfunc

c++ - 在函数声明和定义中使用 noexcept 说明符?

考虑以下函数://Declarationinthe.hfileclassMyClass{templatevoidfunction(T&&x)const;};//Definitioninthe.cppfiletemplatevoidMyClass::function(T&&x)const;如果T类型不可构造,我想让这个函数noexcept。如何做到这一点?(我的意思是语法是什么?) 最佳答案 像这样:#include//Declarationinthe.hfileclassMyClass{public:templatevoidfunc

c++ - 判断一个抽象基类的构造函数是否为noexcept?

在C++11及以后,如何判断抽象基类的构造函数是否为noexcept?以下方法无效:#include#include#includestructBase{Base()noexcept;virtualintf()=0;};//staticassertionfails,because!std::is_constructible::value:static_assert(std::is_nothrow_constructible::value,"");//staticassertionfails,because!std::is_constructible::value:static_asse

c++ - 判断一个抽象基类的构造函数是否为noexcept?

在C++11及以后,如何判断抽象基类的构造函数是否为noexcept?以下方法无效:#include#include#includestructBase{Base()noexcept;virtualintf()=0;};//staticassertionfails,because!std::is_constructible::value:static_assert(std::is_nothrow_constructible::value,"");//staticassertionfails,because!std::is_constructible::value:static_asse

c++ - 声明内联函数 noexcept 有意义吗?

据我所知,SO社区在声明函数noexcept是否能够实现有意义的编译器优化方面存在分歧,而这在其他情况下是不可能的。(我说的是compiler优化,而不是基于move_if_noexcept的库实现优化。)出于这个问题的目的,我们假设noexcept确实使有意义的代码生成优化成为可能。有了这个假设,声明inline函数noexcept有意义吗?假设这些函数实际上是内联的,这似乎需要编译器在调用站点的inline函数产生的代码周围生成一个等效的tryblock,因为如果该区域出现异常,必须调用terminate。如果没有noexcept,那么tryblock似乎就没有必要了。我最初的兴趣

c++ - 声明内联函数 noexcept 有意义吗?

据我所知,SO社区在声明函数noexcept是否能够实现有意义的编译器优化方面存在分歧,而这在其他情况下是不可能的。(我说的是compiler优化,而不是基于move_if_noexcept的库实现优化。)出于这个问题的目的,我们假设noexcept确实使有意义的代码生成优化成为可能。有了这个假设,声明inline函数noexcept有意义吗?假设这些函数实际上是内联的,这似乎需要编译器在调用站点的inline函数产生的代码周围生成一个等效的tryblock,因为如果该区域出现异常,必须调用terminate。如果没有noexcept,那么tryblock似乎就没有必要了。我最初的兴趣

c++ - 隐式生成的成员和 noexcept

我最近开始添加新的noexcept规范以尽可能移动构造函数/赋值。现在我开始想知道隐式生成的成员函数的异常规范是什么样的。由于具有noexcept移动函数允许使用更有效的代码路径(例如,在调整vector的大小时)我希望尽可能将它们声明为noexcept。我无法理解标准对此的规定,因此尝试了g++4.6中的以下代码(使用-std=c++0x)来掌握它:structfoobar{};intmain(){foobara,b;std::cout这给了我True,True,True,False,False的输出,这意味着noexcept的默认和复制构造函数/赋值,而没有的移动操作。现在回答我的

c++ - 隐式生成的成员和 noexcept

我最近开始添加新的noexcept规范以尽可能移动构造函数/赋值。现在我开始想知道隐式生成的成员函数的异常规范是什么样的。由于具有noexcept移动函数允许使用更有效的代码路径(例如,在调整vector的大小时)我希望尽可能将它们声明为noexcept。我无法理解标准对此的规定,因此尝试了g++4.6中的以下代码(使用-std=c++0x)来掌握它:structfoobar{};intmain(){foobara,b;std::cout这给了我True,True,True,False,False的输出,这意味着noexcept的默认和复制构造函数/赋值,而没有的移动操作。现在回答我的

c++ - 为什么 "noexcept"说明符不是函数类型的一部分?

我不明白为什么?我不认为兼容性应该是一个问题,因为在没有说明符的情况下声明的函数实际上已将其隐式定义为false。如果是关于名称修改-我们是否可以假设旧的(现有)将暗示noexcept(false)并为noexcept(true)添加另一个新符号。这在使用模板时很有用,因为现在比较函数类型和noexcept说明符应该分开进行。我的基本意思是:intfunc()noexcept(true),func_1()noexcept(false);decltype(func)==decltype(func_1);//thisnowequalstrue但另一方面,如果我们使用指针或引用进行函数赋值,

c++ - 为什么 "noexcept"说明符不是函数类型的一部分?

我不明白为什么?我不认为兼容性应该是一个问题,因为在没有说明符的情况下声明的函数实际上已将其隐式定义为false。如果是关于名称修改-我们是否可以假设旧的(现有)将暗示noexcept(false)并为noexcept(true)添加另一个新符号。这在使用模板时很有用,因为现在比较函数类型和noexcept说明符应该分开进行。我的基本意思是:intfunc()noexcept(true),func_1()noexcept(false);decltype(func)==decltype(func_1);//thisnowequalstrue但另一方面,如果我们使用指针或引用进行函数赋值,