草庐IT

noexcept-ness

全部标签

c++ - 如果异常被禁用,所有功能都是 "noexcept"吗?

如果您通过使用-fno-exceptions编译来关闭异常,所有函数都被视为noexcept,例如std::move_if_noexcept还是您仍然需要声明函数noexcept因为这个原因? 最佳答案 -fno-exceptions会阻止你抛出异常,但它不能阻止从库中抛出异常。例如,下一个示例将因为未捕获异常而终止:#includeintmain(){std::vectorv{1,2,3,4,5,6};returnv.at(55);}但下一个示例将无法编译,因为-fno-exceptions选项:intmain(){throw22

c++ - 如果异常被禁用,所有功能都是 "noexcept"吗?

如果您通过使用-fno-exceptions编译来关闭异常,所有函数都被视为noexcept,例如std::move_if_noexcept还是您仍然需要声明函数noexcept因为这个原因? 最佳答案 -fno-exceptions会阻止你抛出异常,但它不能阻止从库中抛出异常。例如,下一个示例将因为未捕获异常而终止:#includeintmain(){std::vectorv{1,2,3,4,5,6};returnv.at(55);}但下一个示例将无法编译,因为-fno-exceptions选项:intmain(){throw22

c++ - noexcept 会 boost 性能吗?

noexcept函数说明符是否旨在boost性能,因为生成的对象中可能没有记录异常的代码,因此应尽可能将其添加到函数声明和定义中?我首先想到了可调用对象的包装器,其中noexcept可能会产生一些影响,尽管检查表达式可能会“膨胀”源代码。值得吗? 最佳答案 从理论上讲,noexcept会boost性能。但另一方面,它也可能会导致一些问题。在大多数情况下,不应指定,因为专业人士太少而无法考虑,并且可能会使您的代码升级变得痛苦。Thispost由Andrzej撰写,详细介绍了原因。如果太长,请采纳我从中得出的以下建议:用noexcept

c++ - noexcept 会 boost 性能吗?

noexcept函数说明符是否旨在boost性能,因为生成的对象中可能没有记录异常的代码,因此应尽可能将其添加到函数声明和定义中?我首先想到了可调用对象的包装器,其中noexcept可能会产生一些影响,尽管检查表达式可能会“膨胀”源代码。值得吗? 最佳答案 从理论上讲,noexcept会boost性能。但另一方面,它也可能会导致一些问题。在大多数情况下,不应指定,因为专业人士太少而无法考虑,并且可能会使您的代码升级变得痛苦。Thispost由Andrzej撰写,详细介绍了原因。如果太长,请采纳我从中得出的以下建议:用noexcept

c++ - "main"函数可以用 "noexcept"说明符声明吗?

以下代码在C++中有效吗?intmain()noexcept{}clang++3.8.0和g++7.2.0compileitfine(带有-std=c++14-O0-Wall-Wextra-Werror-pedantic-errors编译标志)。main函数的noexcept规范中是否允许使用复杂条件(例如包含noexcept操作符)?那么C++17呢?据我所知,noexcept说明符成为该标准修订版中函数类型的一部分。 最佳答案 标准[[basic.start.main]]对main函数指定以下约束:Animplementatio

c++ - "main"函数可以用 "noexcept"说明符声明吗?

以下代码在C++中有效吗?intmain()noexcept{}clang++3.8.0和g++7.2.0compileitfine(带有-std=c++14-O0-Wall-Wextra-Werror-pedantic-errors编译标志)。main函数的noexcept规范中是否允许使用复杂条件(例如包含noexcept操作符)?那么C++17呢?据我所知,noexcept说明符成为该标准修订版中函数类型的一部分。 最佳答案 标准[[basic.start.main]]对main函数指定以下约束:Animplementatio

c++ - 析构函数和 noexcept

我对析构函数和noexcept有点困惑。我的理解是,在C++11中,任何析构函数,包括用户定义的,都是隐含的noexcept(true),即使我们从中throw也是如此。如果出于某种原因他们希望这样,则必须明确指定noexcept(false)。我看到完全相反的情况——在GCC4.7.2中,用户定义的析构函数,无论类和析构函数多么原始,都是隐含的noexcept(false)。我在这里想念什么?用户定义的析构函数是否存在一些隐藏的问题? 最佳答案 这是knownbug(归功于OP查找错误报告),并且它似乎已在GCC4.8.0中修复。

c++ - 析构函数和 noexcept

我对析构函数和noexcept有点困惑。我的理解是,在C++11中,任何析构函数,包括用户定义的,都是隐含的noexcept(true),即使我们从中throw也是如此。如果出于某种原因他们希望这样,则必须明确指定noexcept(false)。我看到完全相反的情况——在GCC4.7.2中,用户定义的析构函数,无论类和析构函数多么原始,都是隐含的noexcept(false)。我在这里想念什么?用户定义的析构函数是否存在一些隐藏的问题? 最佳答案 这是knownbug(归功于OP查找错误报告),并且它似乎已在GCC4.8.0中修复。

c++ - 为什么动态检查 C++0x 的 `noexcept`?

我很好奇C++0xFCD中noexcept背后的基本原理.throw(X)已被弃用,但noexcept似乎做同样的事情。编译时没有检查noexcept是否有原因?如果这些函数被静态检查,它们只在tryblock中调用抛出函数,似乎会更好。 最佳答案 基本上,这是一个链接器问题,标准委员会不愿破坏ABI。(如果由我决定,我会这样做,它真正需要的只是重新编译库,我们已经有了线程启用的这种情况,而且它是可管理的。)考虑它会如何运作。假设要求是每个析构函数都是隐式的noexcept(true)可以说,这应该是一个严格的要求。抛出析构函数总是

c++ - 为什么动态检查 C++0x 的 `noexcept`?

我很好奇C++0xFCD中noexcept背后的基本原理.throw(X)已被弃用,但noexcept似乎做同样的事情。编译时没有检查noexcept是否有原因?如果这些函数被静态检查,它们只在tryblock中调用抛出函数,似乎会更好。 最佳答案 基本上,这是一个链接器问题,标准委员会不愿破坏ABI。(如果由我决定,我会这样做,它真正需要的只是重新编译库,我们已经有了线程启用的这种情况,而且它是可管理的。)考虑它会如何运作。假设要求是每个析构函数都是隐式的noexcept(true)可以说,这应该是一个严格的要求。抛出析构函数总是