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

回答編集履歴

4

追記

2018/11/22 09:43

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -75,6 +75,27 @@
75
75
  見てわかるように、インスタンスが必要以上に生成されています。
76
76
  `MyClass c2{0.5, 0.5}`の方が無駄が無いです。
77
77
 
78
+ コメントを受けて
79
+ ---
80
+ ```
81
+ In function 'complex f(const complex&)':
82
+ warning: left operand of comma operator has no effect [-Wunused-value]
83
+ complex s = (1.0, 0.0);
84
+ ^~~
85
+ In function 'complex df(const complex&)':
86
+ warning: left operand of comma operator has no effect [-Wunused-value]
87
+ complex s = (3.0, 0.0);
88
+ ^~~
89
+ In function 'int main()':
90
+ warning: left operand of comma operator has no effect [-Wunused-value]
91
+ xn = (0.5, 0.5);
92
+ ^~~
93
+ warning: format '%lf' expects argument of type 'double', but argument 2 has type 'complex' [-Wformat=]
94
+ printf("ans=%lf\n", xn1);
95
+ ```
96
+
97
+ まず警告を全部解消しましょう。
98
+
78
99
  コードの書き方について
79
100
  ---
80
101
  teratailには、コードを見やすく表示する機能があります。

3

追記

2018/11/22 09:43

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -72,6 +72,9 @@
72
72
  引数は一つ
73
73
  ```
74
74
 
75
+ 見てわかるように、インスタンスが必要以上に生成されています。
76
+ `MyClass c2{0.5, 0.5}`の方が無駄が無いです。
77
+
75
78
  コードの書き方について
76
79
  ---
77
80
  teratailには、コードを見やすく表示する機能があります。

2

追記

2018/11/22 09:26

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -31,6 +31,47 @@
31
31
  単に (0.5, 0.5) と書いた場合、カンマ演算子が適用され 0.5 が返されます。
32
32
  そのためc1とc3の結果が同じになるのです。
33
33
 
34
+ というか、[std::complex](https://cpprefjp.github.io/reference/complex/complex.html)使えば良いんじゃないですかね。
35
+
36
+ 実験
37
+ ---
38
+ ```C++
39
+ #include <iostream>
40
+
41
+ class MyClass {
42
+ public:
43
+ MyClass() {
44
+ std::cout << "引数なし\n";
45
+ }
46
+ MyClass(double d) {
47
+ std::cout << "引数は一つ\n";
48
+ }
49
+ MyClass(double d1, double d2) {
50
+ std::cout << "引数は二つ\n";
51
+ }
52
+ };
53
+
54
+ int main() {
55
+ std::cout << (1, 2, 3, 4) << "\n";
56
+
57
+ MyClass c1, c2, c3;
58
+ c1 = (0.5, 0.5);
59
+ c2 = {0.5, 0.5};
60
+ c3 = 0.5;
61
+ }
62
+ ```
63
+
64
+ **実行結果** [Wandbox](https://wandbox.org/permlink/ZuA7e0nVns4o0NXX) 『//』以降は回答に際して加筆
65
+ ```
66
+ 4 // (1, 2, 3, 4)の評価値は4
67
+ 引数なし // MyClass c1
68
+ 引数なし // MyClass c2
69
+ 引数なし // MyClass c3
70
+ 引数は一つ
71
+ 引数は二つ
72
+ 引数は一つ
73
+ ```
74
+
34
75
  コードの書き方について
35
76
  ---
36
77
  teratailには、コードを見やすく表示する機能があります。

1

追記

2018/11/22 09:22

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -29,4 +29,10 @@
29
29
  ```
30
30
 
31
31
  単に (0.5, 0.5) と書いた場合、カンマ演算子が適用され 0.5 が返されます。
32
- そのためc1とc3の結果が同じになるのです。
32
+ そのためc1とc3の結果が同じになるのです。
33
+
34
+ コードの書き方について
35
+ ---
36
+ teratailには、コードを見やすく表示する機能があります。
37
+ 質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
38
+ ![C++](e378967f71829feb9e6187e5be60349f.gif)