Go 语言没有引用类型,指针也与众不同

2023-08-19 16:17:02 +08:00
 justonelastdance
兄弟们实锤了奥,go 就是值传递,可以确认的是 Go 语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。因为拷贝的内容有时候是非引用类型( int 、string 、struct 等这些),这样就在函数中就无法修改原内容数据;有的是引用类型(指针、map 、slice 、chan 等这些),这样就可以修改原内容数据。

是否可以修改原内容数据,和传值、传引用没有必然的关系。在 C++中,传引用肯定是可以修改原内容数据的,在 Go 语言里,虽然只有传值,但是我们也可以修改原内容数据,因为参数是引用类型。

有的小伙伴会在这里还是懵逼,因为你把引用类型和传引用当成一个概念了,这是两个概念,切记!!!
1347 次点击
所在节点    Go 编程语言
7 条回复
SingeeKing
2023-08-19 17:38:28 +08:00
刚好相反的是 java ,一切都是传引用
BeautifulSoap
2023-08-19 18:19:24 +08:00
。。。。。lz 这是没学过 c 语言吗
LuckyPocketWatch
2023-08-19 18:40:26 +08:00
void print_info(const People& p);
这个 C++函数,传引用,你看这个函数能不能修改 p 的值。。。
geelaw
2023-08-19 18:42:51 +08:00
@LuckyPocketWatch #3 虽然楼主的理解问题比较大,不过

struct People
{
mutable int mutable_field;
int field;
};

void print_info(const People &p)
{
p.mutable_field = 1;
const_cast<People &>(p).field = 2;
}

int main()
{
People inst;
print_info(inst);
}
ke1e
2023-08-19 19:43:22 +08:00
@geelaw 这就是 c++恶心的地方 一个 const 都能玩出花来
oldshensheep
2023-08-19 20:04:25 +08:00
@geelaw 又是 const 又是 mutable 再来个 const_cast ,C++太可怕了
codingbody
2023-08-20 09:33:41 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX