簡體   English   中英

將已刪除的函數聲明為 noexcept 有什么意義嗎?

[英]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 也正確地指出不可能在noexceptnoexcept (即不可能有兩個具有相同簽名的函數,除了一個是noexcept一個不是)。 因此,在類A的定義中, A() = deleteA() noexcept = delete都具有相同的效果,即類A沒有非參數構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM