草庐IT

Noexcept

全部标签

c++ - 是否有自动 noexcept 说明符?

我听说noexcept关键字更像是“它永远不应该抛出异常”而不是“它不会”。如果我不确定是否抛出异常,我认为使用noexcept关键字不是很好,但是noexcept关键字有时与性能有关就像在移动构造函数中一样。所以我尝试使用noexcept限定符,但如果它在定义中有多个语句并且它变成一种复制和粘贴的东西,它会变得更加困难。templatevoidf(T&&t)noexcept(noexcept(statement_1)&&noexcept(statement_2)&&noexcept(statement_3)&&noexcept(statement_4)&&noexcept(state

c++ - 是否有自动 noexcept 说明符?

我听说noexcept关键字更像是“它永远不应该抛出异常”而不是“它不会”。如果我不确定是否抛出异常,我认为使用noexcept关键字不是很好,但是noexcept关键字有时与性能有关就像在移动构造函数中一样。所以我尝试使用noexcept限定符,但如果它在定义中有多个语句并且它变成一种复制和粘贴的东西,它会变得更加困难。templatevoidf(T&&t)noexcept(noexcept(statement_1)&&noexcept(statement_2)&&noexcept(statement_3)&&noexcept(statement_4)&&noexcept(state

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中修复。