我不明白为什么?我不认为兼容性应该是一个问题,因为在没有说明符的情况下声明的函数实际上已将其隐式定义为false。如果是关于名称修改-我们是否可以假设旧的(现有)将暗示noexcept(false)并为noexcept(true)添加另一个新符号。这在使用模板时很有用,因为现在比较函数类型和noexcept说明符应该分开进行。我的基本意思是:intfunc()noexcept(true),func_1()noexcept(false);decltype(func)==decltype(func_1);//thisnowequalstrue但另一方面,如果我们使用指针或引用进行函数赋值,
我不明白为什么?我不认为兼容性应该是一个问题,因为在没有说明符的情况下声明的函数实际上已将其隐式定义为false。如果是关于名称修改-我们是否可以假设旧的(现有)将暗示noexcept(false)并为noexcept(true)添加另一个新符号。这在使用模板时很有用,因为现在比较函数类型和noexcept说明符应该分开进行。我的基本意思是:intfunc()noexcept(true),func_1()noexcept(false);decltype(func)==decltype(func_1);//thisnowequalstrue但另一方面,如果我们使用指针或引用进行函数赋值,
您可能知道C++11有noexcept关键字。现在丑陋的部分是这样的:Notethatanoexceptspecificationonafunctionisnotacompile-timecheck;itismerelyamethodforaprogrammertoinformthecompilerwhetherornotafunctionshouldthrowexceptions.http://en.cppreference.com/w/cpp/language/noexcept_spec那么这是委员会部分的设计失败,还是他们只是将其作为编译作者的练习:)从某种意义上说,体面的编译器
您可能知道C++11有noexcept关键字。现在丑陋的部分是这样的:Notethatanoexceptspecificationonafunctionisnotacompile-timecheck;itismerelyamethodforaprogrammertoinformthecompilerwhetherornotafunctionshouldthrowexceptions.http://en.cppreference.com/w/cpp/language/noexcept_spec那么这是委员会部分的设计失败,还是他们只是将其作为编译作者的练习:)从某种意义上说,体面的编译器
我有以下代码:classMyClass{staticconstexprboolfoo(){returntrue;}voidbar()noexcept(foo()){}};我希望因为foo()是一个staticconstexpr函数,并且由于它是在声明bar之前定义的,所以这将是完全可以接受。但是,g++给了我以下错误:error:‘staticconstexprboolMyClass::foo()’calledinaconstantexpression这...没什么用,因为在常量表达式中调用函数的能力是constexpr的全部要点。clang++更有帮助。除了指出noexcept的参数
我有以下代码:classMyClass{staticconstexprboolfoo(){returntrue;}voidbar()noexcept(foo()){}};我希望因为foo()是一个staticconstexpr函数,并且由于它是在声明bar之前定义的,所以这将是完全可以接受。但是,g++给了我以下错误:error:‘staticconstexprboolMyClass::foo()’calledinaconstantexpression这...没什么用,因为在常量表达式中调用函数的能力是constexpr的全部要点。clang++更有帮助。除了指出noexcept的参数
我不熟悉noexcept说明符的使用,我不明白为什么std::array::front和std::array::back未声明noexcept(而std::array::begin和std::array::end是).这是什么原因? 最佳答案 来自cppreferenceThereisaspecialcaseforazero-lengtharray(N==0).Inthatcase,array.begin()==array.end(),whichissomeuniquevalue.Theeffectofcallingfront()o
我不熟悉noexcept说明符的使用,我不明白为什么std::array::front和std::array::back未声明noexcept(而std::array::begin和std::array::end是).这是什么原因? 最佳答案 来自cppreferenceThereisaspecialcaseforazero-lengtharray(N==0).Inthatcase,array.begin()==array.end(),whichissomeuniquevalue.Theeffectofcallingfront()o
以下面的示例代码为例:voidtest(constItem&item=Item()){...}假设一旦item被传递给函数,this就不能抛出。问题是:函数应该标记为noexcept还是noexcept(noexcept(Item()))?IHMO,前者应该没问题,但我不确定。非常感谢标准的引用! 最佳答案 默认参数是函数调用者的快捷符号。所以,当函数执行时,构造就已经完成了。因此,noexcept应该就足够了。在standard[dcl.fct.default]状态:Ifaninitializer-clauseisspecifie
以下面的示例代码为例:voidtest(constItem&item=Item()){...}假设一旦item被传递给函数,this就不能抛出。问题是:函数应该标记为noexcept还是noexcept(noexcept(Item()))?IHMO,前者应该没问题,但我不确定。非常感谢标准的引用! 最佳答案 默认参数是函数调用者的快捷符号。所以,当函数执行时,构造就已经完成了。因此,noexcept应该就足够了。在standard[dcl.fct.default]状态:Ifaninitializer-clauseisspecifie