Go 中创建映射时是否涉及临时的匿名对象?

问题描述 投票:0回答:1

我在长期使用 C/C++ 进行开发后,最近开始学习 Go。所以我还是有把 Go 语法类比为 C/C++ 的倾向。

我的 Go 导师 (ChatGPT :( ) 告诉我,这就是在 Go 中创建 + 初始化映射(从字符串到 int)的方法:

var foo = map[string]int{}

var foo = make(map[string]int)

对于我偏向于 C/C++ 的人来说,

=
的使用看起来像是从类型为
foo
的临时匿名对象分配的默认初始化变量
map[string]int

(ChatGPT 没有对
make()
做出令我满意的解释,但它仍然“看起来”隐含着一个临时的匿名对象,因为
make()
返回的假定对象被分配给
foo
=

我的问题是:
上述两条语句是否涉及临时匿名对象的赋值?
如果是,(如何)在 Go 中实例化(并默认初始化)一个

map
对象而不涉及任何临时的匿名对象?

我尝试过的:
以下两项在 Go 中似乎都无效:

var foo map[string]int
var foo map[string]int{}

我将这个 Go 语法类比为 C++ 的“等价”

std::map<string, int> foo;

std::map<string, int> foo = map<string, int>();
c++ go constructor temporary-objects anonymous-objects
1个回答
0
投票

var x = y
(或
x := y
)是在 Go 中声明变量并用值初始化它的方式。您正在寻找的替代语法不存在,并且此处没有创建“临时变量”。

© www.soinside.com 2019 - 2024. All rights reserved.