Is there any point in declaring a deleted function as noexcept?

萝らか妹 提交于 2019-12-01 14:33:09

问题


Consider these two possible definitions for a class:

Exhibit A:

struct A
{
    A() = delete;
};

Exhibit A′:

struct A
{
    A() noexcept = delete;
}

Is there any point in declaring a deleted function as noexcept?


回答1:


(Posted this initially as a comment, but encouraged to post as an answer.)

Simply, no. A function that is deleted cannot be called (or, in the case of a constructor, used to initialise an object) let alone throw an exception.

Edit:

hvd mentioned in comments below that noexcept(f()) does not call f(). If the constructor of class A is deleted, then noexcept(A()) will fail to compile, regardless of whether the constructor is declared noexcept. This is (essentially) a consequence of the requirement that noexcept(expression) be given a valid expression - and an expression A() for a class A requires a valid constructor.

Revolver_Ocelot also correctly points out that it is not possible to overload on noexcept (i.e. it is not possible to have two functions with the same signature, except that one is noexcept and one isn't). So, within a definition of class A, both A() = delete and A() noexcept = delete both have the same effect i.e. class A not having a non-argument constructor.



来源:https://stackoverflow.com/questions/38279368/is-there-any-point-in-declaring-a-deleted-function-as-noexcept

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