teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/08/03 23:53

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -21,4 +21,37 @@
21
21
 
22
22
  return 0;
23
23
  }
24
- ```
24
+ ```
25
+
26
+ [追記]
27
+ cin >> str >> m[str] だと cin >> str によって str が書き換わる前に
28
+ m[str] が評価されてると推察されます。その検証:
29
+
30
+ ```C++
31
+ #include <iostream>
32
+ #include <string>
33
+
34
+ std::string key;
35
+ int val;
36
+
37
+ int& foo(const char* str) {
38
+ key = str; // 引き渡された文字列をコピーののち
39
+ return val; // val の参照を返す
40
+ }
41
+
42
+ int main(void){
43
+ using namespace std;
44
+ char buffer[64] = "ABRACADABRA";
45
+ cin >> buffer >> foo(buffer);
46
+ cout << "key =[" << key << "]\n"; // foo() に引き渡された文字列
47
+ cout << "val =[" << val << "]\n";
48
+ }
49
+ ```
50
+ 実行結果
51
+ ```
52
+ abc 3 ← 入力
53
+ key =[ABRACADABRA]
54
+ val =[3]
55
+ ```
56
+ たしかに。
57
+ ※ Windows/Visual C++ 2019 での結果です。