簡體   English   中英

C ++中的不可變int

[英]Immutable int in C++

如何在C ++中創建簡單的不可變int? 我有一個功能:

int NOD(const int &a, const int &b) {
    if (b == 0) {return a;}
    const int remainder = a % b;
    return NOD(b, remainder);
}

它應該采用兩個整數並返回最大公約數。 但是我沒有找到使a和b不可變的方法,因此可以在函數中更改它們,例如,如果我們在函數中添加一行:

*(int *)&a = 555;

它破壞了一切。 如何在C ++中制作不可變變量?

您正在談論整數。 只需刪除參考符號即可復制它們,並且對a和b的所有可能更改都位於NOD函數的本地。 有兩個通常的原因使用參考。 第一,您希望更改它們(但您不需要在這里)。 其次,有時引用提供的性能要高於副本。 但這不是事實,因為整數與C / C ++中的事物一樣便宜。

int NOD(int a, int b) {
    if (b == 0) {return a;}
    const int remainder = a % b;
    return NOD(b, remainder);
}

您的代碼正在調用Undefined Behavior ,之后一切 皆有可能。 因此,您要問的是完全不可能的-在UB之后,即使不可變的變量也是可變的。

您絕對不能禁止一段代碼更改其原始數據類型的本地副本,這一點應該很清楚。 在功能語言中也是如此。

C ++的方式可能是將int包裝到一個類中,該類只有一個采用int的構造函數,並且只有const方法才能讀取內容。

如果使“他人”無法訪問該構造函數,則他們將無法自行構建更改的對象。

或者您可以返回一個lambda表達式,該表達式返回int。 在內部,編譯器將動態生成類的實例。 從性能上講,這應該大致相同,但閱讀起來可能比較笨拙。

暫無
暫無

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

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