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

質問編集履歴

1

一応結果が上手くいく補足コードを追加しました

2017/05/15 14:06

投稿

shell
shell

スコア13

title CHANGED
File without changes
body CHANGED
@@ -24,9 +24,27 @@
24
24
  ```
25
25
  実行時、`max_length`をキャプチャした所、Debugモードでは`4`を示し、Releaseモードでは意図しない値(例えば`5488576`など)が観測されました。
26
26
 
27
+ - 補足
28
+ 一度変数に代入するという回避策を頂きました。
29
+ 例えば以下のような感じです。
30
+
31
+ ```cpp
32
+ CString str(_T("hoge"));
33
+ CString str2(_T("dog"));
34
+ CString str3(_T("be"));
35
+ int size1 = str.GetLength();
36
+ int size2 = str2.GetLength();
37
+ int size3 = str3.GetLength();
38
+
39
+ int max_length = GetMax(size1, size2, size3); //4が入る
40
+ ```
41
+ これだと確かにコンパイルは通り、実行結果も上手く行きます。
42
+ しかし、**何故直接では駄目で一度変数に逃がす必要がある**のかわからないので、依然として納得できません。
43
+
27
44
  ### 疑問
28
45
  - まず何故このような結果になってしまうのか。
29
46
  - Debugモード / Releaseモードで挙動が違う?検討が付きません。
47
+ - 補足コードのようにすると実行結果は上手くいくが、何故直接`GetLength()`からでは駄目なのか
30
48
 
31
49
  ### 補足情報
32
50
  - Windows 7 Pro SP1 64bit