我不明白为什么下面的代码片段没有编译。编译器声明:
cannot take the address of getAString()
代码:
func getAStringPointer() *string {
return &getAString()
}
func getAString() string {
return ""
}
但是,将函数的结果存储在auxliary变量中并返回编译器行为正常的变量的地址。
func getAStringPointer() *string {
var aString = getAString()
return &aString
}
func getAString() string {
return ""
}
答案 0 :(得分:2)
您无法将&
应用于此类值(除非它是复合文字)。来自规范:
对于类型为T的操作数x,地址操作& x生成a 类型* T到x的指针。操作数必须是可寻址的,即 变量,指针间接或切片索引操作; 或可寻址结构操作数的字段选择器;或数组 可寻址数组的索引操作。作为例外 可寻址性要求,x也可以是(可能括在括号中) 复合文字。如果x的评估会导致运行时 恐慌,然后对& x的评价也是如此。