在 Go 中是否可以将指向对象的指针传递给函数,但仍然阻止函数修改它?
另外,是否可以防止方法更改结构的字段?
优点是在
bool is_negative(int const & ptr) {
return (ptr < 0) ? true : false;
}
和
int SomeClass::get_value() const {...}
分别。
(很明显,在示例 1 中这是没有意义的,但是代替int
'a 可能会有一些您不想复制其对象的大型类。)
在 Go 中是否可以将指向对象的指针传递给函数,但仍然阻止函数修改它?
另外,是否可以防止方法更改结构的字段?
优点是在
bool is_negative(int const & ptr) {
return (ptr < 0) ? true : false;
}
和
int SomeClass::get_value() const {...}
分别。
(很明显,在示例 1 中这是没有意义的,但是代替int
'a 可能会有一些您不想复制其对象的大型类。)
不。这是该语言的作者在创建它时故意忽略的功能之一。从 常见问题解答:
尤其是不具有不可变值的决定一直是有争议的设计元素之一,Github 上仍然有很多提议将它们添加到语言中。(Go
const
现在拥有的是关于编译时常量,而不是不可变的值;这是有区别的。)有趣的是,在Rob Pike 等人在贝尔实验室 OS 计划 9中使用的C方言中, const关键字 什么也没做,基本上被忽略了。