回答編集履歴
4
微修正
test
CHANGED
@@ -20,9 +20,9 @@
|
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
その結果stringのコンストラクタとマッチするので string(500)、
|
23
|
+
その結果stringのコンストラクタ:string(int x=0, int y=0)とマッチするので string(500)、
|
24
24
|
|
25
|
-
デフォルト引数で y=0 が補われて string(500,0) が返ります。
|
25
|
+
すなわちデフォルト引数で y=0 が補われて string(500,0) が返ります。
|
26
26
|
|
27
27
|
|
28
28
|
|
3
微修正
test
CHANGED
@@ -4,19 +4,25 @@
|
|
4
4
|
|
5
5
|
「それがルールだから」では納得できませんかね。
|
6
6
|
|
7
|
+
|
8
|
+
|
7
9
|
return (p + stm.p, q + stm.q);
|
8
10
|
|
9
|
-
式を , で繋ぐと左から順に評価され、(~) 全体としては最終式の評価値となります。それがルール。
|
11
|
+
式を , で繋ぐと左から順に評価され、(~) 全体としては最終式の評価値となります。まずそれがルール。
|
10
12
|
|
11
13
|
|
12
14
|
|
13
|
-
なので (300, 500) は 500と評価され
|
15
|
+
なので (300, 500) は 500と評価されるのですが、
|
16
|
+
|
17
|
+
関数(ここでは operator+)はstringを返すと定義したのですから、
|
14
18
|
|
15
19
|
コンパイラは500をstringに変換しようと試みます。
|
16
20
|
|
17
21
|
|
18
22
|
|
19
|
-
その結果stringのコンストラクタとマッチするので string(500)、
|
23
|
+
その結果stringのコンストラクタとマッチするので string(500)、
|
24
|
+
|
25
|
+
デフォルト引数で y=0 が補われて string(500,0) が返ります。
|
20
26
|
|
21
27
|
|
22
28
|
|
2
追記
test
CHANGED
@@ -33,3 +33,19 @@
|
|
33
33
|
前者は評価の優先度を強制する(数式で出てくるフツーの)カッコ
|
34
34
|
|
35
35
|
後者は関数(ここではコンストラクタ)の引数を指定するカッコ
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
[追記] いまどきのC++なら
|
40
|
+
|
41
|
+
```C++
|
42
|
+
|
43
|
+
string operator+(string& stm) {
|
44
|
+
|
45
|
+
return {p + stm.p, q + stm.q};
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
```
|
50
|
+
|
51
|
+
と書くとアラ不思議...
|
1
加筆
test
CHANGED
@@ -25,3 +25,11 @@
|
|
25
25
|
|
26
26
|
|
27
27
|
stringのコンストラクタを明示的に呼び出すからです。
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
※ 両者は () の意味が違う。
|
32
|
+
|
33
|
+
前者は評価の優先度を強制する(数式で出てくるフツーの)カッコ
|
34
|
+
|
35
|
+
後者は関数(ここではコンストラクタ)の引数を指定するカッコ
|