[英]Is there any point in declaring a deleted function as noexcept?
考慮一個類的這兩個可能的定義:
附件A:
struct A
{
A() = delete;
};
圖表 A':
struct A
{
A() noexcept = delete;
}
將已刪除的函數聲明為noexcept
什么noexcept
嗎?
(最初將此作為評論發布,但鼓勵將其作為答案發布。)
簡單地說,沒有。 被刪除的函數不能被調用(或者,在構造函數的情況下,用於初始化一個對象)更不用說拋出異常了。
編輯:
hvd 在下面的評論中提到noexcept(f())
不調用f()
。 如果類A
的構造函數是delete
d,則noexcept(A())
將無法編譯,無論構造函數是否聲明為noexcept
。 這(本質上)是要求為noexcept(expression)
提供有效表達式的結果 - 並且類A
的表達式A()
需要有效的構造函數。
Revolver_Ocelot 也正確地指出不可能在noexcept
上noexcept
(即不可能有兩個具有相同簽名的函數,除了一個是noexcept
一個不是)。 因此,在類A
的定義中, A() = delete
和A() noexcept = delete
都具有相同的效果,即類A
沒有非參數構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.