假设您有一个通常永远不会失败的函数,例如:
std::string convert_integer_to_string(int x);
原则上,这将是noexcept
. 但是,实现很可能涉及动态内存管理,因此在使用运算符分配内存时,它总是会抛出std::bad_allocnew
。
是否建议将函数注释为 noexcept?
从实际的角度来看,以合理的方式处理内存不足的情况是极其困难的。大多数程序只是假设有足够的可用内存。std::terminate
如果noexcept
函数 throws会发生调用,std::bad_alloc
在这种情况下似乎是合理的。
对我来说noexcept
是某种形式的文档。这是您(或优化器)可以安全地假设此函数永远不会抛出的承诺。如果您正在编写一个不关心内存不足情况的应用程序,那么它仍然是一个有效的假设。
我想最安全的建议是永远不要使用noexcept
如果std::bad_alloc
可以抛出异常。另一方面,我想知道如果noexcept
您不关心内存不足的情况(即,如果std::terminate
可以的话),是否有任何优势可以使用。