C++ 中的不可变整数

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);
}

应该取两个整数和 returns 最大公约数。但是我没有找到使 a 和 b 不可变的方法,因此可以在函数内更改它们,例如,如果我们在函数中添加一行:

*(int *)&a = 555;

它打破了一切。如何在 C++ 中创建不可变变量?

您永远不能禁止一段代码更改其原始数据类型的本地副本,这一点应该很清楚。这在函数式语言中也是一样的。

C++ 方法可能是将 int 包装到一个 class 中,该 class 只有一个构造函数采用 int 并且只有 const 方法来读取内容。

如果您让 "others" 无法访问此单个构造函数,那么他们将无法自行构建更改后的对象。

或者您可以 return 一个 lambda 表达式,return 是 int。在内部,编译器会动态生成一个 class 的实例。从性能上看,这应该大致相同,但阅读起来可能不那么笨拙。

您的代码正在调用未定义的行为,之后一切都是可能的。所以,你问的是完全不可能的 - 在 UB 之后,即使是不可变的变量也是可变的。

你说的是整数。只需通过省略引用符号来复制它们,对 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);
}