Use of the noexcept specifier in function declaration and definition?

一个人想着一个人 提交于 2019-12-08 15:50:03

问题


Consider the following function:

// Declaration in the .h file
class MyClass
{
    template <class T> void function(T&& x) const;
};

// Definition in the .cpp file
template <class T> void MyClass::function(T&& x) const;

I want to make this function noexcept if the type T is nothrow constructible.

How to do that ? (I mean what is the syntax ?)


回答1:


Like this:

#include <type_traits>

// Declaration in the .h file
class MyClass
{
    public:
    template <class T> void function(T&& x) noexcept(std::is_nothrow_constructible<T>::value);
};

// Definition in the .cpp file
template <class T> void MyClass::function(T&& x) noexcept(std::is_nothrow_constructible<T>::value);

Live example

But please also see Why can templates only be implemented in the header file?. You (generally) cannot implement a template in the source file.




回答2:


noexcept can accept an expression and if the value of the expression is true, the function is declared to not throw any exceptions. So the syntax is :

class MyClass
{
template <class T> void function(T&& x) noexcept (noexcept(T()));
};

// Definition in the .cpp file
template <class T> void MyClass::function(T&& x) noexcept (noexcept(T()))
{

}

Edit : the use of std::is_nothrow_constructible<T>::value as below is a bit less dirty i that case



来源:https://stackoverflow.com/questions/20837681/use-of-the-noexcept-specifier-in-function-declaration-and-definition

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!