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

回答編集履歴

3

謎マインド

2019/12/16 12:22

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -59,4 +59,22 @@
59
59
  test::test() : b{} {}
60
60
  ```
61
61
 
62
- のようにするべきだったのではないかとは思いますが、まあ気にしなくていいと思います。
62
+ のようにするべきだったのではないかとは思いますが、まあ気にしなくていいと思います。
63
+
64
+
65
+ ---
66
+
67
+ 他の質問あったことをすっかり忘れてました。
68
+
69
+ > press_buf_size_とpress_buffer_が初期化されていないというメッセージが出ます
70
+
71
+ ifの中でreturnしてしまっていることで、すべてのコードパスで初期化されないのが問題です。というかメモリー確保失敗は`std::quick_exit`して迅速に死にましょう。というかそういう意味で`new(std::nothrow)`ってあんま意味ないです。メモリーが確保できないときになにかできることがあるかはかなり微妙なところです。むしろ正常系に対してログを出して、ログが途切れたところを特定するほうが合理的な気もします。
72
+
73
+ > 構造体の定義で初期化はしたくないので原
74
+
75
+ そもそもC++において構造体はありません。あるのはクラスだけです。`memcpy`できればいい、というクラスを作りたいのであればtrivially copyable classであれば良いのでコンストラクタを書きましょう。
76
+ [C++初心者に贈る強そうな人からC++のclassに関連する謎な用語を使われたときにみるもの: trivialとか#トリビアルにコピー可能なクラス(trivially copyable class)](https://qiita.com/yumetodo/items/424cc4d15de4edad436a#%E3%83%88%E3%83%AA%E3%83%93%E3%82%A2%E3%83%AB%E3%81%AB%E3%82%B3%E3%83%94%E3%83%BC%E5%8F%AF%E8%83%BD%E3%81%AA%E3%82%AF%E3%83%A9%E3%82%B9trivially-copyable-class)
77
+
78
+ ---
79
+
80
+ とにかく謎の初期化したくないマインドをお持ちのようですが、やめましょう。

2

再現

2019/12/16 12:22

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -43,4 +43,20 @@
43
43
 
44
44
  ```
45
45
 
46
- をVS2019でコンパイルしてみましたが(`/W4`)、再現しません。
46
+ をVS2019でコンパイルしてみましたが(`/W4`)、再現しません。
47
+
48
+ ---
49
+
50
+ 追記
51
+
52
+ あー、コード分析か。
53
+
54
+ 正直`/W4`で出てこない警告は無視していいと思います。
55
+
56
+ まあ本来このfor文は0を代入してるのであって、メンバー変数の初期化構文ではないので、
57
+
58
+ ```cpp
59
+ test::test() : b{} {}
60
+ ```
61
+
62
+ のようにするべきだったのではないかとは思いますが、まあ気にしなくていいと思います。

1

再現しません

2019/12/15 05:16

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -16,4 +16,31 @@
16
16
 
17
17
  > 意味もなく値 (0) を入れたくないからです
18
18
 
19
- 実行時間短縮に寄与しない無意味な努力ですからやめましょう。物事をシンプルに。
19
+ 実行時間短縮に寄与しない無意味な努力ですからやめましょう。物事をシンプルに。
20
+
21
+ ---
22
+
23
+ そんでもってそもそも
24
+
25
+ ```cpp
26
+ #include <iostream>
27
+
28
+ class test
29
+ {
30
+ static constexpr int a = 100;
31
+ int b[a];
32
+
33
+ test();
34
+ };
35
+
36
+
37
+ test::test()
38
+ {
39
+ //b[0] = 0; // これがないと警告が出てしまうができれば書きたくない
40
+ for(int i = 0; i < a; i++) b[i] = 0;
41
+ }
42
+ int main() {}
43
+
44
+ ```
45
+
46
+ をVS2019でコンパイルしてみましたが(`/W4`)、再現しません。