回答編集履歴

1

追記

2020/08/03 23:53

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -45,3 +45,69 @@
45
45
  }
46
46
 
47
47
  ```
48
+
49
+
50
+
51
+ [追記]
52
+
53
+ cin >> str >> m[str] だと cin >> str によって str が書き換わる前に
54
+
55
+ m[str] が評価されてると推察されます。その検証:
56
+
57
+
58
+
59
+ ```C++
60
+
61
+ #include <iostream>
62
+
63
+ #include <string>
64
+
65
+
66
+
67
+ std::string key;
68
+
69
+ int val;
70
+
71
+
72
+
73
+ int& foo(const char* str) {
74
+
75
+ key = str; // 引き渡された文字列をコピーののち
76
+
77
+ return val; // val の参照を返す
78
+
79
+ }
80
+
81
+
82
+
83
+ int main(void){
84
+
85
+ using namespace std;
86
+
87
+ char buffer[64] = "ABRACADABRA";
88
+
89
+ cin >> buffer >> foo(buffer);
90
+
91
+ cout << "key =[" << key << "]\n"; // foo() に引き渡された文字列
92
+
93
+ cout << "val =[" << val << "]\n";
94
+
95
+ }
96
+
97
+ ```
98
+
99
+ 実行結果
100
+
101
+ ```
102
+
103
+ abc 3 ← 入力
104
+
105
+ key =[ABRACADABRA]
106
+
107
+ val =[3]
108
+
109
+ ```
110
+
111
+ たしかに。
112
+
113
+ ※ Windows/Visual C++ 2019 での結果です。