空の構造体との配列比較で異なる結果が生じる理由
空の構造体へのポインタの配列が与えられた場合に、配列の等価比較が行われるのはなぜですかtrue と評価される場合もあれば、true と評価される場合もありますfalse?
動作の探索
package main import "fmt" type myStruct struct{} func main() { s, ss := myStruct{}, myStruct{} arr1 := [6]*myStruct{&s} arr2 := [6]*myStruct{&ss} fmt.Println(&s == &ss, arr1 == arr2) // Produces mixed results (e.g., false, true or true, false) l, ll := myStruct{A: 1}, myStruct{A: 1} arr3 := [6]*myStruct{&l} arr4 := [6]*myStruct{&ll} fmt.Println(&l == &ll, arr3 == arr4) // Always evaluates to false }
説明
Go 言語仕様には次のように記載されています。
動的行動と逃走分析
この動作は、Go コンパイラーによって実行されるエスケープ分析を考慮することで説明できます。
影響
以上が空の構造体へのポインターの配列を比較すると一貫性のない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。