回答編集履歴

3

謎マインド

2019/12/16 12:22

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -121,3 +121,39 @@
121
121
 
122
122
 
123
123
  のようにするべきだったのではないかとは思いますが、まあ気にしなくていいと思います。
124
+
125
+
126
+
127
+
128
+
129
+ ---
130
+
131
+
132
+
133
+ 他の質問あったことをすっかり忘れてました。
134
+
135
+
136
+
137
+ > press_buf_size_とpress_buffer_が初期化されていないというメッセージが出ます
138
+
139
+
140
+
141
+ ifの中でreturnしてしまっていることで、すべてのコードパスで初期化されないのが問題です。というかメモリー確保失敗は`std::quick_exit`して迅速に死にましょう。というかそういう意味で`new(std::nothrow)`ってあんま意味ないです。メモリーが確保できないときになにかできることがあるかはかなり微妙なところです。むしろ正常系に対してログを出して、ログが途切れたところを特定するほうが合理的な気もします。
142
+
143
+
144
+
145
+ > 構造体の定義で初期化はしたくないので原
146
+
147
+
148
+
149
+ そもそもC++において構造体はありません。あるのはクラスだけです。`memcpy`できればいい、というクラスを作りたいのであればtrivially copyable classであれば良いのでコンストラクタを書きましょう。
150
+
151
+ [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)
152
+
153
+
154
+
155
+ ---
156
+
157
+
158
+
159
+ とにかく謎の初期化したくないマインドをお持ちのようですが、やめましょう。

2

再現

2019/12/16 12:22

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -89,3 +89,35 @@
89
89
 
90
90
 
91
91
  をVS2019でコンパイルしてみましたが(`/W4`)、再現しません。
92
+
93
+
94
+
95
+ ---
96
+
97
+
98
+
99
+ 追記
100
+
101
+
102
+
103
+ あー、コード分析か。
104
+
105
+
106
+
107
+ 正直`/W4`で出てこない警告は無視していいと思います。
108
+
109
+
110
+
111
+ まあ本来このfor文は0を代入してるのであって、メンバー変数の初期化構文ではないので、
112
+
113
+
114
+
115
+ ```cpp
116
+
117
+ test::test() : b{} {}
118
+
119
+ ```
120
+
121
+
122
+
123
+ のようにするべきだったのではないかとは思いますが、まあ気にしなくていいと思います。

1

再現しません

2019/12/15 05:16

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -35,3 +35,57 @@
35
35
 
36
36
 
37
37
  実行時間短縮に寄与しない無意味な努力ですからやめましょう。物事をシンプルに。
38
+
39
+
40
+
41
+ ---
42
+
43
+
44
+
45
+ そんでもってそもそも
46
+
47
+
48
+
49
+ ```cpp
50
+
51
+ #include <iostream>
52
+
53
+
54
+
55
+ class test
56
+
57
+ {
58
+
59
+ static constexpr int a = 100;
60
+
61
+ int b[a];
62
+
63
+
64
+
65
+ test();
66
+
67
+ };
68
+
69
+
70
+
71
+
72
+
73
+ test::test()
74
+
75
+ {
76
+
77
+ //b[0] = 0; // これがないと警告が出てしまうができれば書きたくない
78
+
79
+ for(int i = 0; i < a; i++) b[i] = 0;
80
+
81
+ }
82
+
83
+ int main() {}
84
+
85
+
86
+
87
+ ```
88
+
89
+
90
+
91
+ をVS2019でコンパイルしてみましたが(`/W4`)、再現しません。