[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 05/18 13:20 / Filesize : 132 KB / Number-of Response : 562
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part142



1 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:17:05.84 ID:wmfpIKt/.net]
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
C++相談室 part141
https://mevius.5ch.net/test/read.cgi/tech/1550772463/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

232 名前: mailto:sage [2019/04/14(日) 07:51:31.17 ID:AVvjfIV7.net]
>>231
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?

233 名前:デフォルトの名無しさん [2019/04/14(日) 08:04:00.89 ID:YohaqxbG.net]
>>232
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。

234 名前: mailto:sage [2019/04/14(日) 08:50:47.24 ID:AVvjfIV7.net]
>>233
私は EU には否定的(グローバリストの巣窟であり、普通選挙/自由選挙による合意形成をスキップするポジションを作って人を操作するからくり、トルコもたぶん目が覚めているのでは?)ですが、それはさておき、
すでにある java/classpath スケルトンを真似してしまおう、という低姿勢・低いプライドを貫くのであれば、規格策定者は基本要らなくなりませんか?だって真似するだけだし…

235 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 08:59:21.33 ID:k2b6YaL9.net]
まだC++98しか知らないと、取り残されますか。

236 名前:デフォルトの名無しさん [2019/04/14(日) 09:09:36.38 ID:YohaqxbG.net]
まずは、Javaと瓜二つな C#、.NET、C++/CLIが今どうなっているか考えてみては。

237 名前:L mailto:sage [2019/04/14(日) 09:28:45.12 ID:Y1IcINvd.net]
>>229
ちょっと話しはズレるけど、あなたの賛同で嬉しくなったので、入手した耳寄りな
情報を書いておこうと思う。既に知ってる人も当然いると思うけど、
WebAssemblyで作ったようなWebAppliは、ブラウザのURL欄やタイトルバーなどが
表示されてしまうのが難点として残っていた。ところがなぜかElectronでは消せて
いたのでChromeではなくChromiumを使っているからかと思っていた。
ところが、manifest.json なるものを書いて、HTMLにそのファイルを使うように
書いておいて、display プロパティーを standalone やfullscreen にすると、
URL欄が消せるらしい。

238 名前: mailto:sage [2019/04/14(日) 09:41:42.35 ID:AVvjfIV7.net]
>>237
もう時代はすっかり html/css/js ですね…
VSCode も Electron ですし…

239 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 10:28:52.88 ID:k2b6YaL9.net]
質問を変えてみよう。
C++11やC++14のコードは、職場で取り入れられてますか。

240 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 11:49:20.77 ID:q+cUY/8y.net]
>>239
ガンガン取りいれてるよ。

なにげにでかいのが日本語識別子の保証。適切に使うと可読性が笑っちゃうくらい上がるw
ヘッダーのプロトタイプ宣言とかが特におすすめかな。

あとchar16_t/char32_tも結構ありがたい。WindowsとUNIX系のOS間で同じ文字コードとして共通で使える型が以前はなかったからね。
20でようやく入るみたいだが、なぜchar8_tを入れかったのか(´・ω・`)

std::initializer_listもかなり便利。型安全で個数も分かる上に、引数の一番後ろじゃなくてもいいので、cの...と違って気軽に使える。

あとよく使うのは範囲for文と、イテレータの簡略化かな。いくつかの演算子をオーバーロードすれば良いだけだから、
結構気軽に範囲for文対応のイテレータを書ける。

ラムダ式も関数の引数に直接関数を埋め込んだりできて便利。



241 名前: mailto:sage [2019/04/14(日) 12:36:24.13 ID:AVvjfIV7.net]
>>240
>char16_t/char32_tも結構ありがたい

確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… https://mevius.5ch.net/test/read.cgi/tech/1434079972/53

242 名前:はちみつ餃子 mailto:sage [2019/04/14(日) 12:43:45.83 ID:+qOUcSLR.net]
ガンガン最新を追うべきとまでは思わないけど、
C++11 は最低限度じゃないかなぁ。

243 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 14:27:39.08 ID:6Gooiv09.net]
17便利すぎ
variant,visit,lambda,if constexpr
のコンボで捗る

244 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 14:34:56.13 ID:GSX89KOm.net]
つーか今はもうC++11の機能は使わずにC++で書け!といわれても
やりきる自信がなくなった・・

245 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 14:39:38.95 ID:krJLkXqZ.net]
古い環境だと最近のサンプルがビルドできなくて困る

246 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:02:33.26 ID:YQLb8Tsj.net]
c++11とか名乗るから誤解されるんだよ。
c++++とかのがイメージ的に正しい。

247 名前:デフォルトの名無しさん [2019/04/14(日) 16:06:36.29 ID:dZAE6IVm.net]
C#ってことか。

248 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:12:40.18 ID:YQJCzKEv.net]
repeat文って入らないの?

249 名前:はちみつ餃子 mailto:sage [2019/04/14(日) 16:16:59.50 ID:+qOUcSLR.net]
>>248
どんな機能?

250 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:20:53.89 ID:YQJCzKEv.net]
>>249
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能



251 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:22:55.01 ID:6Gooiv09.net]
>>250
そんなどうでも良いもののために予約語追加する意味って
その文法じゃ初期値すら変えられない

252 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:24:45.44 ID:6Gooiv09.net]
初期値はi=0とかすればいいのか
でもそうなるとi=1にした場合何回ループするのか混乱しそう

253 名前:デフォルトの名無しさん [2019/04/14(日) 16:32:41.09 ID:IovzG98E.net]
>>229
QtとかGtk、wxとか色々有るじゃん。。。
入れるの面倒くさいなら、Power Builder(だっけ?)とかの有料開発環境はVSを除いてマルチプラットフォームなライブラリが売りだぞ。

254 名前: mailto:sage [2019/04/14(日) 16:36:01.32 ID:AVvjfIV7.net]
>>253
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか

255 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:44:39.61 ID:YQJCzKEv.net]
>>251
Linuxのカーネルにrepeatマクロ大量にあるもん

256 名前:はちみつ餃子 mailto:sage [2019/04/14(日) 16:52:53.22 ID:+qOUcSLR.net]
>>255
ならマクロでいいじゃねぇか。

257 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:53:20.02 ID:6Gooiv09.net]
こんなので十分だろ
https://ideone.com/I6e8NZ

258 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 16:59:12.33 ID:6Gooiv09.net]
>>254
wxでもQtでもメジャー言語のbinding位あるだろ

259 名前:デフォルトの名無しさん [2019/04/14(日) 17:09:53.36 ID:IovzG98E.net]
>>254
うん。
それはまさにそうで、だからQt,Gtk,wxあたりのメジャー所は色んな言語にラッパーがある。

260 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 17:10:32.89 ID:h7KNzBMl.net]
webプログラマーなんですが、右辺値、fowardっていつ使うのか気になります
というかなんでそこまで、厳密に分ける必要があるのか 
業務で使ってる方、使用例を教えてください



261 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 17:20:10.51 ID:sCsh6GnA.net]
右辺値というかムーブ関数の定義といらなくなるオブジェクトにstd::move付けとくのは絶対損にはならないからとりあえずやっとく
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ

262 名前:さまよえる蟻人間 mailto:sage [2019/04/14(日) 17:25:45.47 ID:86P3zzV7.net]
コピーにコストがかかる場合は、std::swapやstd::moveのが早い場合があるからね。ムーヴはコピーじゃなくて引っ越しだから。

263 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 17:27:07.70 ID:YQLb8Tsj.net]
まあ理論上はね。。そういう実装になってるかどうかはコード見ないとわからんけどね。

264 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 17:29:38.84 ID:6Gooiv09.net]
基本的には高速化が目的でmove使わなくてもなんとかなるが、
所有権絡むとmoveは必須になる

forwardはtemplateで引数渡すときにmoveやら参照やらの完全転送する場合必須

265 名前:さまよえる蟻人間 mailto:sage [2019/04/14(日) 18:16:04.21 ID:86P3zzV7.net]
ちょっと実際にやってみようか。コピーコンストラクタで十秒待つコードを書く。ムーヴコンストラクタとムーヴ代入でなにもしない。
この状態でstd::moveを使わないで代入すると十秒かかる。

266 名前:さまよえる蟻人間 mailto:sage [2019/04/14(日) 18:17:20.92 ID:86P3zzV7.net]
訂正。「コピー代入で十秒待つコードを追加」

267 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 18:47:05.84 ID:xCvd3oj/.net]
>>264
>所有権絡むとmoveは必須
必須とまでは言えない
 T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しで逝ける

268 名前:はちみつ餃子 mailto:sage [2019/04/14(日) 18:50:44.06 ID:+qOUcSLR.net]
>>260
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。

場合分けが出来るなら、どうしてもやらなければならないこと、やらなくてもいいことを「区別」できる。
区別できるなら、やらなくてもいいことは省略できる。

言語での区別が無くても、たとえば C でも区別を陽に書けばムーブみたいなことだって、そりゃあ出来るけども、
そんなクソ面倒くさいことはしたくないので言語でのサポートがあるとありがたい。

まあ速度的にそこまで必要ないってのなら、区別を積極的に利用しなくてもかまわないよ。
でも、必要なときに出来る方法が用意されているとうれしいし、
C++ を使うときというのはそれなりに実行速度が必要なときだろうし。

269 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 18:52:09.33 ID:xCvd3oj/.net]
とわいえmoveコンストラクタの方が意図が明確なコードが書けるから良い。
moveコンストラクタがふさわしい例っていやーつぎごケース。
class BarWithBigData {
  Foo* m_pBigData;
  BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
  ~BarWithBigData() { delete[] m_pBigData; }
  BarWithBigData(BarWithBigData&& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
  Foo* refBigData() { return m_pBigData; }
};

ちなstd::arrayは使った無いから知らん

270 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 18:53:54.12 ID:xCvd3oj/.net]
訂正orz、

誤:
  Foo* m_pBigData;
  BarWithBigData() : m_pBigData(new Foo[1000000000000] { }

正:
  Foo* m_pBigData;
public:
  BarWithBigData() : m_pBigData(new Foo[1000000000000]) { }



271 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 18:54:00.95 ID:mEGAHR/Y.net]
コピコンの中でconst剥がしってちょっと何言ってるか分からない

272 名前:さまよえる蟻人間 mailto:sage [2019/04/14(日) 18:55:03.68 ID:86P3zzV7.net]
十秒待つ待つコードはWindowsなら#include <windows.h>してSleep(10*1000);であり、
Linuxなら#include <unistd.h>してsleep(10);だ。
C++11ならstd::chronoに待つ関数があったはず。

273 名前:さまよえる蟻人間 mailto:sage [2019/04/14(日) 18:57:07.74 ID:86P3zzV7.net]
const_castだろ。jk

274 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 18:57:37.12 ID:xbTIwD1q.net]
>>271 「move無しで(未定義動作に)逝ける」ってことでしょ。

275 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 18:57:39.39 ID:xCvd3oj/.net]
>>271
こうじゃわ;
BarWithBigData::BarWithBigData(const BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; }

>>269もmoveコンストラの変わりに↑のように書いても逝ける

276 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 19:10:15.32 ID:sCsh6GnA.net]
まあ実際にはそんなムーブをゴリゴリ書くことはなくて
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな

277 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 19:21:51.01 ID:kBfBajGR.net]
auto_ptrよりヤバイ奴
const_castでconst外した後実際に書き換えてしまうとかw

278 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 19:38:34.53 ID:xCvd3oj/.net]
>>277
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ

279 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 19:46:40.04 ID:xbTIwD1q.net]
>>278
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。

const 無しで構築されたオブジェクトを指す const& の話と混同してそうだね。

280 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 19:53:21.04 ID:uvZ0DMTi.net]
質問: c🐴++のrust相対の優位性はなんですか?



281 名前:はちみつ餃子 mailto:sage [2019/04/14(日) 19:57:27.42 ID:+qOUcSLR.net]
>>280
正しくないコードをコンパイル出来る。
C++ はプログラマを信頼するのだ。

282 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 19:57:44.28 ID:6Gooiv09.net]
>>278
未定義じゃないか
c++03 5.2.11の7にはこんなことが書いてある
[Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data
member resulting from a const_cast that casts away a const-qualifier68) may produce undefined behav-
ior (7.1.5.1). ]

283 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:14:45.20 ID:xCvd3oj/.net]
>>282
Depending on the type of the objectにおいてmay produce undefined behaviorである
すわなちオブジェクトの型によっては未定義動作に成りえる、
と言っているだけなのでconst T&渡しされたパラメータの書き換えがNGの祥子にはなんね

>>279
>const T 型で構築されたオブジェクトを書き換えたら未定義動作になる
それはそう。しかしconst T&渡しされた関数内でコンパイラはそれを判断できないから
そういった関数内で、参照型かポインタ型引数で関数に渡されたlvalueのconst_castした結果はあくまでlvalue扱い
のはず…

284 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:25:38.94 ID:xbTIwD1q.net]
>>283
関数内では const& であることを根拠に最適化に使えないのは合ってる。
でもだからといって const& で受け取ったものを書き換えてもよいとは言えない。

void f1(int const&);
int f2()
{
int const x = 1;
f1(x);
return x;
}

x は int const なので、 f2() の return x は f1() が const_cast して x を
書き換える可能性を無視して return 1 に最適化できる、という話。

BarWithBigData const x; が >>275 のコピーコンストラクタに渡された後も
const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; を無視して書き換え前の
m_pBigData が使われる可能性がある。

285 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:33:37.36 ID:mEGAHR/Y.net]
規格が云々言わなくても、9割のプログラマの意図に反してるで終わる話
頼むからそんなコードは頭の中にしまっといてほしい

286 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:37:26.81 ID:6Gooiv09.net]
つまりはそれ自体は問題ないが、constとして生成したオブジェクトを渡した瞬間にダメになると言うことか
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。

287 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:39:28.07 ID:6Gooiv09.net]
てか、mutable付けとけば問題なくなるな。

288 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:40:25.78 ID:6Gooiv09.net]
const_castも要らないし良いことずくめじゃないかw

289 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 20:45:26.81 ID:xCvd3oj/.net]
>>285
わかりたそうする。>>275のケースは素直にムーブコンストラクタを使えば良い。または↓でもだいたいおk
BarWithBigData::BarWithBigData(BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }

だいたいというのはムーブコンストラクタ有りの規格のC++コンパイラで↑の非constなコピコンだけ書く警告が出ることがあるからイヤン、

>>286
>つまりはそれ自体は問題ないが
いや問題がある可能性が潰せていない。
void f1(int const&);
int f2()
{
int x = 1;
f1(x);
return x;
}
(xがconst無し)の場合であってもf1(x)がxを書き換えない前提の最適化がf2()にかかったりすると、
f1(x)内で変更したxの値がreturnされるxの値に反映されない可能性がある(f1(x)の呼び出し前後でxがレジスタに乗ったままであるとか、

290 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 21:11:05.08 ID:xbTIwD1q.net]
>>289
その x の型は const じゃないから return x は最適化できないよ。



291 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 21:48:29.79 ID:uvZ0DMTi.net]
>>281
わからないです。それはメリット?

292 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 01:36:50.54 ID:20PlYkfs.net]
ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?

293 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 02:40:05.27 ID:e1RUhzz1.net]
測ればいいだろ

294 名前:はちみつ餃子 mailto:sage [2019/04/15(月) 02:50:17.52 ID:94OTneyx.net]
>>291
メリットのときもデメリットのときもあるだろう。

295 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 02:59:24.82 ID:XbOtvNIU.net]
参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。

296 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 09:13:13.35 ID:+swIGlrx.net]
それはわからんだろ
ブロック待ちするかもしれないわけで

297 名前:デフォルトの名無しさん [2019/04/15(月) 19:29:41.18 ID:8vw8m6ly.net]
引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。

298 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 19:36:28.26 ID:XbOtvNIU.net]
いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。

299 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 20:08:47.93 ID:Auf6nZgf.net]
C言語じゃダメなんですか!

300 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 20:20:07.70 ID:NSErsM12.net]
いいよ



301 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 20:25:01.30 ID:IXPbMXJW.net]
無駄に複雑にしとるな。

302 名前:デフォルトの名無しさん [2019/04/16(火) 01:01:07.13 ID:ZVmLHBMP.net]
>>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?

303 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 02:15:09.28 ID:WfxisTJA.net]
海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++

304 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 02:27:07.22 ID:WfxisTJA.net]
>>303
https://insights.stackoverflow.com/survey/2019#technology-_-what-languages-are-associated-with-the-highest-salaries-worldwide

305 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 15:01:04.19 ID:RMLQoksE.net]
本当に、コンパイル時に何かしたいならRustだけどね

306 名前:デフォルトの名無しさん [2019/04/16(火) 18:28:44.44 ID:ZVmLHBMP.net]
>>304
Java圧倒的な強さだな。

307 名前:デフォルトの名無しさん [2019/04/16(火) 18:30:10.89 ID:ZVmLHBMP.net]
全部足すと500%位になりそうだから、複数の言語を使う人が多いんだろね。

308 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 21:18:54.40 ID:dFuxCqAG.net]
江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。

309 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 21:36:49.03 ID:jMhdT2ep.net]
こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る

310 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 23:25:27.27 ID:LsPOsuul.net]
なんか私怨でもあるんかいな



311 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 23:41:35.10 ID:InK+cNH/.net]
喫煙者が目に入った途端癇癪起こして殴り掛りかかる狂犬なんだっけ?

312 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 00:03:12.24 ID:vVzTJh6n.net]
知らね
よく人を招いているようだし揉めたことがある人も少なくはないんじゃいか

313 名前:はちみつ餃子 mailto:sage [2019/04/17(水) 01:12:11.58 ID:UWuCQ9XR.net]
>>310-311
当事者の様々な主張の食い違いがあるので、結論としては「わからない」。
少なくとも彼自信の主張としては掴みかかってきたのを払いのけた結果として眼鏡が割れたということになっている。
(江添が殴りかかったわけではなく、むしろ防衛した側、と江添は主張している。)

江添が煙草について過激な意見を持っているのは確かだが、
シェアハウス内で禁煙場所であると合意がなされている場所で煙草を吸った客人がいたというところは当事者全体が認めているようだ。

314 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 08:21:52.75 ID:DaACwh1w.net]
恨みというかまともにコード書かない奴がクソ意見で現場荒らすって事自体がクソだと思うわけで、
まあその反動で現場で働くことができないって事になればザマァって思う。

315 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 09:46:31.27 ID:vVzTJh6n.net]
現場を荒らしてる?

316 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 09:53:30.15 ID:vVzTJh6n.net]
どのプロジェクトにも参加してないと認識してたけど乗り込んでケチつけてたりするのかな
まあ俺ドワンゴとは縁が無いからどこで何してようが関係ないけど

317 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 17:08:02.09 ID:I32j715f.net]
C++がPython抜いて3位 - 4月TIOBE言語ランキング 2019/04/17 10:55 後藤大地
https://news.mynavi.jp/article/20190417-810363/

TIOBE Softwareから、2019年4月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語が
どれだけ話題になっているかをインデックス化したもの。

4月TIOBE Programming Community Index / 円グラフ
https://news.mynavi.jp/article/20190417-810363/images/001.jpg

2019年4月はC++がPythonを抜いて3位に返り咲いた。ただし、Pythonのシェアが下落したの
ではなく、Pythonの増加傾向をC++の増加が上回ったことによる結果と思われる。C++は
長期にわたって下落傾向が続いていいたものの、2019年に入ってから増加傾向へ転じている。
Pythonも増加傾向が続いており、どちらも今後さらにインデックス値を増やす可能性がある。

長期にわたって1位を確保しているJavaは依然として1位のポジションにあるが、下落の
傾向が続いている。2位のC言語も長期で見ると下落を続けており、C++やPythonの存在感が
強くなってきている。

318 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 17:11:50.34 ID:hoIwj+sG.net]
>>317
何回だからみんな何回もググってるんだよ

319 名前:デフォルトの名無しさん [2019/04/17(水) 18:34:58.84 ID:LllPIzo0.net]
俺が検索しまくったからだろうな。

320 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 19:59:29.56 ID:fJF68+PR.net]
今もしインターネットが完全にシャットダウンされると
プログラム書けなくなるプログラマけっこう数いるだろうな



321 名前:はちみつ餃子 mailto:sage [2019/04/17(水) 20:18:46.81 ID:UWuCQ9XR.net]
>>320
cpprefjp はとりあえず手元にダウンロードしてあるけど。

322 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 20:35:09.94 ID:P5fp2rRi.net]
どうやってダウンロードしたの?
巡集じゃできなかった…

323 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 20:39:18.77 ID:WWgiT6Ow.net]
githubじゃない?

324 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 21:27:54.32 ID:P5fp2rRi.net]
そうなんだ、ありがとう

325 名前:デフォルトの名無しさん [2019/04/19(金) 02:16:29.43 ID:/DYxLH/O.net]
どういたしまして。

326 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 08:26:54.03 ID:gmGy9oTC.net]
江添は職質裁判でも、不当判決が出たので控訴するみたい

警官は、複数人で口裏合わせするから、民間人は勝てない

漏れもやられたけど、酒酔い運転でも、漏れが機械に息を吹き掛けても、ランプが点かない。
そこで、警官がクルッと後ろを向くと、ランプが点く

そっと見たら、酔っ払い警官が、自分で息を吹きかけて、ランプを点ける

こういう裁判で争っている人もいるけど、
警官は複数人で口裏合わせするから、絶対に勝てない!

警官は皆、このやり方で出世しとる

327 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 08:33:03.47 ID:PWe5dNBv.net]
ありゃ普通に対応してりゃ済む話だと思うがね。

やってることは完全に当たり屋だろ。

328 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 09:27:15.01 ID:biH+fvR8.net]
>>326
Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。

329 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:05:02.85 ID:rPSCrubJ.net]
どんだけ江添好きなの?w

330 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 13:28:48.91 ID:W5tFDDw/.net]
日本でC++真剣にやってるのって彼だけだし



331 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 13:41:25.74 ID:mypEidUJ.net]
だけ、というのは言い過ぎだと思うが、
日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。

江添本人は自分のことを実務家ではなく教育者だと考えているようだし、
(肩書は何なんだろ? エヴァンジェリストのようにも見えるが……)
今のポストは妥当なとこだろ。
そのままやってくれればありがたいもんだ。

332 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 13:41:50.58 ID:i8rhoxHy.net]
つまり他の日本人は竹刀とか木刀ってことか。

333 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 13:50:35.12 ID:rPSCrubJ.net]
江添個人の裁判は完全にスレチなんだよなあ
仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし

334 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 14:15:26.68 ID:JVA9qfGz.net]
江添すなわちC++なのだから
江添の話題は全てC++の話題だょ

335 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 15:08:33.32 ID:j263LUSd.net]
宗教の話はよそでやってくれないか

336 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 15:16:01.57 ID:JwgM4FAg.net]
もう少しc++の話をしてくれと思う事もある

337 名前:デフォルトの名無しさん [2019/04/19(金) 18:50:10.05 ID:/DYxLH/O.net]
はちみつさんも真剣にやってると思います。

338 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 19:16:13.92 ID:yj9Iz3m1.net]
こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ
C++に関しておかしなことは言っていない
ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?

339 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 19:17:39.46 ID:j263LUSd.net]
肉料理にはちみつを入れること自体はわりと普通
量の問題

340 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 19:28:19.17 ID:PWe5dNBv.net]
いや明らかに開発してねーだろって感覚じゃねーか。
まあここならそれでもいいんだろうけれど。



341 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 19:51:37.44 ID:mypEidUJ.net]
>>338
ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。

その昔、 higepon が自分でもどうして higepon などと名乗ったかわからない
と述べていたので、そのくらい意味不明感じにしようと思って適当に
思いついた語をコテハンにした。
Scheme スレが本来の住処なので当初は SCHEME餃子 と名乗っていたけど、
他のスレにも顔を出すようになったのでなんとなくはちみつ餃子になった。
およそ意味不明な組合せにしたつもりだったんだけど、
実際にある料理だとは後になってから知った。

342 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 21:11:54.81 ID:fEN/Hp+M.net]
initializer_listを引数に取るオブジェクトを引数に取る関数で
下記のケースでUniversal Initializationが効かないのですが
何かいい手はないでしょうか

using KVPCollectionType = std::map<std::string, std::string>;
void f(const KVPCollectionType&& kvps = {});

f(); // OK
f({}); // OK
f(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK

f({{"key1", "value1"},{"key2","value2"}}); // NG これをやりたい!!

343 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 21:13:17.21 ID:UQpKfTQY.net]
エピ…いや何でもない

344 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 21:17:05.52 ID:fEN/Hp+M.net]
すみません、訂正です
× void f(const KVPCollectionType&& kvps = {});
○ void f(const KVPCollectionType& kvps = {});

345 名前:デフォルトの名無しさん [2019/04/19(金) 21:22:53.30 ID:/DYxLH/O.net]
アークエンジェルに搭載されてるstd::variant<>。

346 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 22:49:42.25 ID:DWxUZ3pl.net]
wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?

347 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 00:01:37.25 ID:a7z6m7l4.net]
ごめんなさい、ごめんなさい。本当にごめんなさい。
勝手に脳内で要約したのが間違えまくってました

正確には以下の通りです。
#include <map>
#include <memory>
using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};
int main()
{
auto ok = std::make_shared<c>(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK
auto ng = std::make_shared<c>({{"key1", "value1"},{"key2","value2"}}); // NG!!!
}

348 名前:デフォルトの名無しさん [2019/04/20(土) 10:47:21.77 ID:5oa1AZjP.net]
全てのバグを絶滅せよ。
「今日は死に日和」好評発売中。

349 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 11:08:43.59 ID:3kBWifqd.net]
C++11や14を使ってる人、コンパイラは何ですか。

350 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 11:25:30.96 ID:m+a2EYsq.net]
ゲームエンジン作ってる人いますか



351 名前:デフォルトの名無しさん [2019/04/20(土) 11:30:38.02 ID:5oa1AZjP.net]
clとgcc。

352 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:20:15.93 ID:lwVpLCzw.net]
c+11以降はバージョン違うと全く別のコンパイラ

353 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:23:19.12 ID:8Vh3F1FF.net]
Twitchでプログラミングしてるやつの中でゲームエンジンも居たような

354 名前:はちみつ餃子 mailto:sage [2019/04/20(土) 13:30:02.11 ID:7hm/FBJ7.net]
>>347
テンプレートの推論ルールとして「関数テンプレートのパラメータとして波カッコの初期化子リストを渡して型推論させることはできない。」
ということになっている。 ( https://cpprefjp.github.io/lang/cpp11/uniform_initialization.html )
make_shared の実際の型は template <class T, class... Args> shared_ptr<T> make_shared(Args&&... args); なので、
このとき Args が推論できない以上はどうにもならん。
型を固定した専用の関数をはさんでこんな感じにするくらいのことしか思いつかないな。

#include <map>
#include <memory>
#include <initializer_list>
#include <utility>

using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
c(const std::initializer_list<typename KVPCollectionType::value_type>){}
};

std::shared_ptr<c> make_c_shared(std::initializer_list<typename KVPCollectionType::value_type> a) {
return std::make_shared<c>(std::move(a));
}

std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}

int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}

355 名前:はちみつ餃子 mailto:sage [2019/04/20(土) 13:32:51.70 ID:7hm/FBJ7.net]
>>347 >>354
呼出す側で

auto ng = std::make_shared<c, std::initializer_list<typename KVPCollectionType::value_type>>({{"key1", "value1"},{"key2","value2"}});

というように型を明記してもかまわないけど、使う側でいちいちこんなこと書きたいわけじゃないだろ?

356 名前:はちみつ餃子 mailto:sage [2019/04/20(土) 13:35:42.76 ID:7hm/FBJ7.net]
>>347
ちゃんと考えたら >>354 はいらんことしとるな……
これで充分か

#include <map>
#include <memory>
#include <utility>

using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};

std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}

int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}

357 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 08:19:35.76 ID:jJhiZdMc.net]
>>354-356
ありがとうございます、その手を使わせていただきます
状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。

358 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 23:55:58.01 ID:uyfay/gq.net]
メンバアクセスにthis->つける?

359 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:01:58.24 ID:cW1os5L0.net]
エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。
が、たまに忘れる。

360 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:02:35.52 ID:BSgCsXpz.net]
IDEの都合で付ける事が良くある
付けないと補完候補多すぎて



361 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:09:08.10 ID:JKfCESEZ.net]
ああなるほど
補完候補を絞るのには便利ですね

362 名前:デフォルトの名無しさん [2019/04/23(火) 18:16:01.64 ID:Wx+D+gzo.net]
メンバであるという保証ができるので付ける

363 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:39:28.32 ID:cE0Yu4R7.net]
メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき

364 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:42:38.83 ID:JKfCESEZ.net]
仮引数と別の名前つけるのだるいからm_は別に良いと思う

365 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:02:01.86 ID:8XemHsTC.net]
メンバ変数に専用の色付けたらいいじゃん

366 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:13:43.06 ID:sktjqElV.net]
引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ

367 名前: mailto:sage [2019/04/23(火) 20:16:13.74 ID:JSYnwir1.net]
>>366
それって var(var) でも問題ないんですよ…

368 名前:さまよえる蟻人間 mailto:sage [2019/04/23(火) 21:18:06.78 ID:DAl4rXky.net]
バーバー

369 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:32:08.36 ID:BSgCsXpz.net]
>>367
綴り間違えたら悲惨なことになった

370 名前:デフォルトの名無しさん [2019/04/23(火) 21:34:08.78 ID:3k1+3l7a.net]
ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。



371 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:35:06.30 ID:8XemHsTC.net]
ゴミ使ってる奴のことなんか知らん

372 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:36:10.37 ID:BSgCsXpz.net]
あれ可読性落ちるだろ

373 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:39:11.30 ID:lLaZpSEH.net]
定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ

374 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:40:37.34 ID:lAbUfbw7.net]
C#で入力補完のないエディタがどうとかさすがにナンセンスでは
だってvisual studio使うじゃん

375 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:41:16.53 ID:ZkNEZW45.net]
どっちでもいいわ。
大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。

376 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:45:47.89 ID:lLaZpSEH.net]
>>375
こういうやつがそのうちハマって丸1日つぶしたりするんだよなw

377 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:51:11.17 ID:8XemHsTC.net]
>>373
関係なくて草

378 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:55:03.06 ID:lLaZpSEH.net]
関係あることわかってなくて草

379 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:55:54.04 ID:8XemHsTC.net]
黙ってろゴミw

380 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:59:25.62 ID:ZkNEZW45.net]
>>376
だから人を嵌めるようなコード書くなつってんだよばか。



381 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 22:06:36.15 ID:lLaZpSEH.net]
>>380
コードの問題じゃなくて言語仕様の問題だから
こういうえらそうなくせに何もわかってないカスが一番始末に困る

382 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 22:53:19.60 ID:ZkNEZW45.net]
いつの間にかハンガリアンが言語仕様になってた。。

383 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:10:13.77 ID:lLaZpSEH.net]
ハンガリアンも防御的なプログラミングと考えたら悪くないよ
成り立ち調べてみな
でも基本型とポインタだけだな
クラスには無用だと思う

384 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:27:23.37 ID:8XemHsTC.net]
てめーらはまともなIDEかエディタ使ってねえのかよ

385 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:37:57.35 ID:JKfCESEZ.net]
むしろVSがないと何も書けない

386 名前:デフォルトの名無しさん [2019/04/23(火) 23:55:15.96 ID:UPBQPhwq.net]
VSがあっても何も書けない。

387 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:55:30.60 ID:ZkNEZW45.net]
c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。

388 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 01:00:02.97 ID:pnt3hUol.net]
前方宣言したクラスをTにしたスマポメンバでコンパイル通るときと通らないときがあって調べてたら
デストラクタがインライン(暗黙)だと駄目だとわかった
しかもこの問題が起こるのはunique_ptrのときだけでshared_ptrはデストラクタの定義に関係なく通る
わけわからんぞ
教科書に書いておいてくれ

class ClassB;
class ClassA{
public:
ClassA();
private:
std::unique_ptr<ClassB> u; // NG
std::shared_ptr<ClassB> s; // OK
}

---

class ClassB;
class ClassA{
public:
ClassA();
~ClassA(); ←これでunique_ptrもOK
private:
std::unique_ptr<ClassB> u; // OK
std::shared_ptr<ClassB> s; // OK
}

389 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 07:38:59.52 ID:IdP8M60W.net]
>>388
unique_ptr<T>のデストラクタはインスタンス化するときにTが完全型であることを要求する(デストラクタで直接Tのデストラクタを呼ぶ)
unique_ptrを内包するクラスのデストラクタが暗黙だとクラス内でコンパイラによって実装されるけど、その場でunique_ptrのデストラクタを要求する
しかし、その翻訳単位内でTの定義が無ければコンパイルエラーとなる

unique_ptr<T>を内包するクラスのデストラクタがとりあえず宣言だけでもあると
実際の定義がある場所で同様の事が起こるので、その場所でTの定義が見つかればいい
その場合に定義を書かないと、コンパイラさんが適切な翻訳単位内に定義をおいてくれるみたい

shared_ptrは動的削除子のおかげでデストラクタが呼ばれるところで適切にデリータを定義し、デストラクタを呼ぶようになっているのでこの様な問題は起こらない
shared_ptr<T>のデストラクタ内ではTのデストラクタを直接呼び出すようなコードが無い

390 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 18:54:26.06 ID:pnt3hUol.net]
>>389
解説ありがとう



391 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 01:05:34.79 ID:UW94aXeh.net]
うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし
情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね

392 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 19:40:01.51 ID:aJMYFNVy.net]
set<double> って int のときと同様にちゃんとソートされるんですか?

393 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 20:34:04.97 ID:Fns+A8Ou.net]
NaNが無ければ大丈夫NaNじゃね

394 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 20:34:22.70 ID:Fns+A8Ou.net]
NaNが無ければ大丈夫NaNじゃね

395 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 22:17:06.30 ID:PbDaLlJb.net]
のちに永久保存される平成最後のスベり

396 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 23:59:20.16 ID:LBUDtqYL.net]
たしかにそうだな・・いよいよ平成最後なんだな
みなさん、>>393-394 みたいな事にならないよう、気をひきしめましょう

397 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:20:06.56 ID:nrL5Mhiq.net]
平成最後っていう言い回し使われすぎて嫌いになってきた

398 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:23:11.48 ID:v7q7vgVx.net]
イテレータの参照を次に移すときってなんでitr++ではなく++itrなの?

399 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:33:20.40 ID:nrL5Mhiq.net]
ヤフーでぐぐれ

400 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:04:24.73 ID:oB7jkl++.net]
素直な実装だとitr++より++itrのほうが速いんじゃないかなあ、となんとなくみんなが思っているから



401 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:07:57.61 ID:v7q7vgVx.net]
速度に差が出るのか
知らなかった

402 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:35:51.19 ID:KjSesqKI.net]
インクリメント後のイテレーターの値を返す処理の実装を考えると
先の場合はインクリメントしてそのまま渡せばいいけど
後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから
・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん

403 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:38:33.58 ID:EJ6OYH9I.net]
it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、
++itだと、ポインタを進めた後に参照を返すだけでするからな。

404 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:39:08.58 ID:EJ6OYH9I.net]
被ったw

405 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 11:13:20.29 ID:qp4sR6Ay.net]
>>398
ite++と++iteなんて気持ちの問題
てか範囲for文使えばいい

406 名前:デフォルトの名無しさん [2019/04/27(土) 11:46:20.51 ID:Tan1PMrG.net]
>>402-405
cppcheck にかけたらちゃんと警告出るね。

407 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 14:06:33.77 ID:dwPa57iA.net]
どうせ戻り値捨てるんだったら++itを選んでおいて損はない
無駄にit++を使うのは時期尚早な最不適化って奴だ

408 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 19:31:57.61 ID:Ht8C3PIL.net]
C++で書くんだから後置インクリメントの方がメインに決まってんじゃん
前置は異端だ

409 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 19:37:22.12 ID:nrL5Mhiq.net]
殺せ

410 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:12:28.01 ID:uerCNQ9f.net]
++C



411 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:53:36.82 ID:hHA0b+W+.net]
C++でいいんだよ。
規格は一歩進むけど、使ってるやつはbetter Cばかりってな

412 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:55:05.03 ID:nrL5Mhiq.net]
++C++まだかよ

413 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 22:37:09.45 ID:Czz6ceI0.net]
>>411
vectorとかstringとか使わんの?

414 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 03:35:47.43 ID:c2OY2Ben.net]
CArrayとCStringだぞ
コピコンは定義されてないから自分で作るぞ

415 名前:デフォルトの名無しさん [2019/04/28(日) 11:01:20.49 ID:DJV+PGkd.net]
CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。

416 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 13:46:52.13 ID:nadmD8id.net]
>>413
この思考がbetter C

417 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:25:38.47 ID:n1RanWws.net]
>>416
わけわからん

418 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:29:28.69 ID:c2OY2Ben.net]
俺がBest Cだ

419 名前:はちみつ餃子 mailto:sage [2019/04/28(日) 14:56:12.05 ID:mA4VukHK.net]
>>415
イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね?
そうでもない?

420 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 15:37:56.41 ID:UbqPSgHc.net]
inconsistent begin/end types in range-based ‘for’ statement

gcc(g++) 8.2で -std=c++17オプションでコンパイルで
範囲forでこのエラーが出るんだが
begin endの型不一致の制限緩和されいるはずだよな?
原因わかる方いますか?



421 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 15:49:39.60 ID:4R543R/q.net]
>>415
GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?

422 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:05:30.47 ID:n1RanWws.net]
>>420 比較演算子定義されてないとか?

423 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:22:25.11 ID:UbqPSgHc.net]
>>422
int _n = 0;
auto __begin = _container.begin();
auto __end = _container.end();
for (; __begin != __end; ++__begin) {
_n = *__begin;
}
比較演算子はちゃんと定義してるし
上のコードは何故かコンパイル通る
だけど
for (const auto _n : _container) {
//hoge
}

は何故か通らない

424 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:41:14.97 ID:n1RanWws.net]
範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?

425 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:43:13.35 ID:UbqPSgHc.net]
>>424
auto&&にした時のみエラーが増えます
cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type

426 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:54:13.46 ID:/ZzCGjK1.net]
beginとendのシグニチャは?

427 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:02:57.34 ID:UbqPSgHc.net]
>>426
using iterator = typename std;;vector<int>::iterator;
using const_iterator = typename std;;vector<int>::const_iterator;
using my_iterator = MYIterator;
my_iterator begin();
iterator end();
const my_iterator begin() const;
const_iterator end() const;
const my_iterator cbegin() const;
const_iterator cend() const;

428 名前:デフォルトの名無しさん [2019/04/28(日) 17:18:10.81 ID:HBE/zmE6.net]
これで動かん?
for (auto&& _n : _container) {
}

429 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:28:42.95 ID:UbqPSgHc.net]
>>428
動かないです

430 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:12:40.94 ID:/ZzCGjK1.net]
MYIteratorの実体がunsigned longみたいだけど
vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?



431 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:13:25.64 ID:7uO4eV2c.net]
>>420
wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。
https://mevius.2ch.net/test/read.cgi/tech/1187922645/

432 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:53:07.97 ID:B+3vkW9O.net]
>>423
bool operator != (〜) const ← これ付け忘れてないか?

433 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:57:20.67 ID:HwAGJ3yN.net]
constつけ忘れは時々はまる

434 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 23:15:17.87 ID:UbqPSgHc.net]
>>427
自己解決
const iteratorとconst_iteratorが一緒だと勘違いしていた
const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした

435 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 08:12:30.69 ID:caHZo185.net]
struct A{
int member;
};
struct B: A{
void run(){member = 0;}//ok
};

template<typename T>
struct TA{
T member;
};
template<typename T>
struct TB:TA<T>{
void run(){member = 0;}//NG。this->memberとするとok
};
クラステンプレートを継承してクラステンプレートを作成した場合にthisでないと継承元のメンバーが見えないのは仕様?

436 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 10:32:33.68 ID:ytpB6N2f.net]
仕様
一寸前までのmsvcではなぜか通っていたけど

437 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 11:47:53.29 ID:atpu4K08.net]
>>436
なんでそんな仕様になってるんだろう…

438 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 12:13:25.59 ID:TWBg2sM/.net]
>>437
2phase lookupだから
最初のTB解釈時にはTAが型引数一つのtemplate classであるという情報以外使わない
だいたいTAが特殊化される可能性があるだろ

439 名前:デフォルトの名無しさん [2019/04/30(火) 10:16:07.47 ID:5viqjSMx.net]
8bitや16bitのintしか使えない環境で、
32bitなどの大きな数を扱うにはどうすれば良いですか?
変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。
ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。

440 名前:439 [2019/04/30(火) 10:20:33.67 ID:5viqjSMx.net]
補足させて下さい。
足し算、引き算は出来るようにしたいです。
可能でしたら、掛け算や割り算もできると助かります。



441 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 10:25:07.05 ID:l5C1eDEl.net]
多倍長演算で検索

442 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 10:45:28.19 ID:Cm5pFeJF.net]
>>438
> だいたいTAが特殊化される可能性があるだろ
なるほどそりゃそうか、サンクス

443 名前: mailto:sage [2019/04/30(火) 11:43:40.55 ID:iYYZTFZo.net]
>>439-440
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
近々、委譲をやめて継承に戻すつもりです
あと掛け算はkaratsubaを適用できる目処がたちました
x64 に特化してインラインアセンブラ化することも考えています

444 名前:はちみつ餃子 mailto:sage [2019/04/30(火) 12:03:49.54 ID:MGpUBTsC.net]
karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど

445 名前: mailto:sage [2019/04/30(火) 12:09:22.58 ID:iYYZTFZo.net]
>>444
多分それは乗算FFTのことかと

446 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 12:28:54.66 ID:44LYo/LT.net]
>>439
stdint.h で int_least32_t とか使えるのでは?

447 名前: mailto:sage [2019/04/30(火) 13:43:58.68 ID:iYYZTFZo.net]
>>446
8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?

448 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 14:19:40.82 ID:44LYo/LT.net]
>>447
「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。
「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。
その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。

449 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 14:19:47.17 ID:gDkH0fQs.net]
8bit pic用XCでもlongは32bitなのに

450 名前: mailto:sage [2019/04/30(火) 15:03:05.44 ID:iYYZTFZo.net]
>>449
それはそれですごいインプリメンテーションですね…
8 bit PIC で 32bit int がさくさく書けちゃうとは、そのインプリメンターは根性がありますね、それか頭のねじが何本か外れていて「無理を無理と思わない人」とか…



451 名前:デフォルトの名無しさん [2019/04/30(火) 15:29:16.24 ID:0LsajAP1.net]
shortは16bit固定でlongは32bit固定でしょ。何言ってんの?

452 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 16:18:35.89 ID:coQMvXAj.net]
>>451
いや、お前こそ何を言ってるんだ?

453 名前: mailto:sage [2019/04/30(火) 16:37:10.66 ID:iYYZTFZo.net]
>>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!

454 名前:さまよえる蟻人間 mailto:sage [2019/04/30(火) 16:45:08.36 ID:lzNlO/OB.net]
>>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん

455 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 17:46:03.06 ID:bcA0O1+B.net]
intが16bitならISOの規格は満たしてることになるかな。

32bit以上の長い整数はクラスと演算子オーバーロードで誤魔化すか。
頑張ってもリテラル表記もダメだろうから、使い勝手は悪いよな。

456 名前:デフォルトの名無しさん [2019/04/30(火) 19:51:46.33 ID:tnl21ewQ.net]
>>451
うろ覚えだが
VC Win32bit: int 32bit long 32bit pointer 32bit
gcc Linux32bit: int 32bit long 32bit pointer 32bit -ここまでは同じ

VC Win64bit: int 32bit long 32bit pointer 64bit -int64_tで64bit整数
gcc Linux32bit: int 32bit long 64bit pointer 64bit

457 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:17:37.41 ID:YvhWBPAF.net]
既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ
https://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88#64%E3%83%93%E3%83%83%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB

458 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:34:29.38 ID:4LCMFhXh.net]
厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ

459 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:56:09.36 ID:ba2OmOyM.net]
じゃあ何を使えばいいの?

460 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:59:46.66 ID:jq/I62+g.net]
int_leastシリーズでは?



461 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:02:03.72 ID:tJFiug19.net]
intの配列のラッパーのようなものから再発明すりゃーいい

class Bignumber{
int number[4];

Bignumber(const String num){
for(int i=0; i<4; i++){
number[i] = //考えるのが面倒臭い
}
}

Bignumber operator+(){
//以下、延々とオペレータオーバーロードが続く
}

};

462 名前: mailto:sage [2019/04/30(火) 21:02:11.05 ID:iYYZTFZo.net]
>>459
int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました

463 名前:デフォルトの名無しさん [2019/04/30(火) 21:08:03.86 ID:0LsajAP1.net]
あ…ありのまま 今 起こった事を話すぜ。
平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。
何言ってるかわからねーと思うが(以下略

464 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:08:35.71 ID:QYmLdpSV.net]
なんかもうビットという表現すら無くそうとしてるんじゃなかった?

465 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:19:14.38 ID:l5C1eDEl.net]
制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど

466 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:42:28.23 ID:ba2OmOyM.net]
>>462
なるほど、cstdint ですか!
教えてくださりありがとうございます

467 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 23:24:19.16 ID:xHYWEb3z.net]
ビット数を付けるのは、MISRA-C で決まっているだろ

int8, 16, 32
uint8, 16, 32

468 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 00:05:54.61 ID:rGIFhODV.net]
C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上
だったと思った

469 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:23:13.87 ID:EdGuPz7E.net]
class ClassA
class ClassB: public ClassA
class ClassA::ClassC

のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?

470 名前: mailto:sage [2019/05/01(水) 06:32:09.33 ID:JcO9/TOD.net]
>>469
>class ClassA::ClassC
この意味はなんですか?



471 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:32:44.82 ID:TS5dpT59.net]
基底クラス
スーパークラス
親クラス
ベースクラス

472 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:56:41.43 ID:q4ZM9Khf.net]
細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。
int_fast32_t, int_least32_t なら定義される。

8bit単位じゃないCPUへの配慮らしいから、
普通の(この表現も危険だけど)コンピュータを使う分には
int32_t があると仮定して書いてもたいがい大丈夫だろうけど。
コンパイルエラーが出るから出たら対処、で十分かと。

473 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:06:00.95 ID:EdGuPz7E.net]
>>470
クラス内で定義したクラスです

class ClassA {
public:
...
private:
class ClassC;
ClassC * C;
}

class ClassA::ClassC {
...
}
の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません

474 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:25:40.44 ID:shCLaGGL.net]
「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。

475 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:36:13.31 ID:EdGuPz7E.net]
おお、なるほど
ありがとうございます

476 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 09:29:42.19 ID:HwrGV3PF.net]
内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな

477 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 10:28:09.06 ID:imZnb7dZ.net]
Inner Class、Java用語なのか。そう呼んじゃってたわ

478 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 17:22:15.78 ID:Ul5/0sra.net]
今よみがえる構造体ネストの悪夢

479 名前:はちみつ餃子 mailto:sage [2019/05/01(水) 17:31:05.65 ID:Gk4iJJA0.net]
>>473-474
nested class は仕様にあるので、
これが公式な用語と思って良いみたいだね。

480 名前:デフォルトの名無しさん [2019/05/01(水) 19:23:34.42 ID:DLNQH846.net]
以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?



481 名前: mailto:sage [2019/05/01(水) 19:59:09.50 ID:JcO9/TOD.net]
>>480
ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…)
www.kt.rim.or.jp/~hisashim/gabriel/WIB.ja.html
この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか

482 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 22:03:28.27 ID:EdGuPz7E.net]
>>479
ありがとう

483 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 17:19:13.49 ID:x8LtSB02.net]
>>480 https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good

484 名前:デフォルトの名無しさん [2019/05/06(月) 08:44:53.70 ID:Omhj+R8I.net]
ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。
でもあそこ迄遅くする必要があったのだろうか。

485 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 10:41:12.07 ID:ZJRraXBB.net]
突然何?

486 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:17:09.96 ID:jqdyfBGc.net]
3.5  ストリーム
ttps://sicp.iijlab.net/fulltext/x350.html

これだろう
理想的にはこうなるべきだが、技術的には未だに追いついてないだけであり、将来的には解決される

なのでC++では他のどの言語も真似してない<<や>>がある
逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く

487 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 15:05:44.09 ID:XjarcZ9f.net]
今やどの言語もprintfのような書式付き文字列を指定する方式に回帰した(jsすら!)。
少なくとも書式付き出力に限れば、ストリームはプログラミング言語の中ではもう淘汰されてしまったんだと思うよ。
早いとこ、string::format()とかbasic_ostream::format()とか作ってほしいわ

488 名前:デフォルトの名無しさん [2019/05/06(月) 15:24:11.52 ID:ecbY6TsO.net]
多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。

489 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 15:30:05.12 ID:HRNpJ9Fc.net]
ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう

490 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:03:09.57 ID:ZJRraXBB.net]
どうしてprintf使わないの?



491 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:28:48.00 ID:YSlWnmwv.net]
オーバーロードできないから

492 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:36:53.99 ID:oGUqqIoM.net]
<<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。

493 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:40:04.95 ID:DF3zK1Xx.net]
文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。

494 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:45:40.32 ID:Yv9FD/Sb.net]
そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの?
どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。
引数で判断してくれよ。

495 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:51:17.77 ID:oGUqqIoM.net]
>>493
え、そう?
文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない?
std::string str;
str << "hoge" << 123 << ".txt";
みたいな。

496 名前: mailto:sage [2019/05/06(月) 17:27:51.75 ID:vu8V8zIe.net]
>>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…

497 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:37:23.51 ID:QULX0INn.net]
>>495
そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る

498 名前:デフォルトの名無しさん [2019/05/06(月) 17:37:57.33 ID:ecbY6TsO.net]
コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。
string str;
hogestream sstr(str);
sstr << "hoge" << 128;

499 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:42:30.68 ID:B4KNKrTg.net]
別にstringstreamで良いじゃない

500 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:42:46.83 ID:B4KNKrTg.net]
別にstringstreamで良いじゃない



501 名前:デフォルトの名無しさん [2019/05/06(月) 18:13:11.14 ID:L6nFhRY+.net]
iostreamの<<はC++の黒歴史の一つだね

502 名前:はちみつ餃子 mailto:sage [2019/05/06(月) 18:19:09.50 ID:K/rO19sE.net]
stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら
単に operator<< を定義すれば出来るけど……。

https://wandbox.org/permlink/dIkEh0LDZEixGoiF

503 名前:デフォルトの名無しさん [2019/05/06(月) 18:27:12.43 ID:ecbY6TsO.net]
>>499,500,501
ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。
stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。

504 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 18:58:24.90 ID:oGUqqIoM.net]
>>502
をを、なるほど、これは素晴らしいw

505 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:02:54.05 ID:ZJRraXBB.net]
>>492
stringstream・・・

506 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 19:51:10.38 ID:FbrTB0S1.net]
basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない

507 名前:デフォルトの名無しさん [2019/05/08(水) 21:52:50.27 ID:iQQm+nuQ.net]
to_charsというものをみつけました。

508 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:03:02.17 ID:PdPEbd3c.net]
b配列全てをa配列のケツにコピーするとき

std::vector<char> a;
char b[]={0,1,1,3,4};
a.insert(a.begin(),&b[0],&b[sizeof b]);

これでいいの?

&b[sizeof b]
これが死ぬほど気持ち悪いんだけど

509 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:18:44.76 ID:JXKWFyOS.net]
そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));

510 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:25:51.81 ID:PdPEbd3c.net]
なるほど!ありがとう



511 名前:はちみつ餃子 mailto:sage [2019/05/09(木) 18:44:16.05 ID:IVoLxnXn.net]
>>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。

512 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:53:31.44 ID:vbHvKAwn.net]
>>511
insertのが速いんでね?
resizeしてmemcpyになるはず

513 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 23:40:45.34 ID:q7ofaYCv.net]
アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな

514 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 00:47:30.50 ID:5C678nxv.net]
ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね

515 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:00:01.95 ID:KAkBQh2y.net]
&b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな

516 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:08:59.15 ID:pPfi71KH.net]
sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも

517 名前:はちみつ餃子 mailto:sage [2019/05/10(金) 12:01:59.87 ID:g2QrvVju.net]
>>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。
(名前が妥当であれば。)

518 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:02:43.61 ID:UhKi+qPE.net]
嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね?
https://gogotsu.com/wp-content/uploads/2019/05/01-9.jpg

519 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:10.83 ID:curN/h5M.net]
>>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか

520 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:16.55 ID:TAwz/zT/.net]
javascriptやん



521 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:36:57.50 ID:tfYAY6pz.net]
こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる

522 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:47:05.61 ID:oOPMkjEw.net]
てかこんなもの韓国に出すのね
安くなさそう
ってもしや北の方?

523 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:53:19.07 ID:oOPMkjEw.net]
parseInt(Num).lengthって動かなそう

524 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:57:58.16 ID:TAwz/zT/.net]
ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw

525 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 22:59:11.84 ID:HK1/2Yro.net]
型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。

526 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:25:31.58 ID:u3uVdMgu.net]
ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか
シーンクラスが管理クラスのインスタンスを持ちたくありません

527 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:30:31.35 ID:0WVRNDv3.net]
>>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね

528 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:55:31.69 ID:tshfuAdx.net]
>>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか

529 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 03:16:15.93 ID:xsmcwCcm.net]
早速情報漏洩やらかしたの?

530 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:30:07.92 ID:f5HniSEP.net]
>a.insert(a.begin(),&b[0],&b[sizeof b]);


これ、添字オーバーしてるけどメモリエラーとかにならないの?



531 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:54:36.87 ID:RjxICFG6.net]
>>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス
それは普通の実装ではアクセスされることはない
規格的にも最後の次の要素へのポインタだけは未定義じゃない

532 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 11:55:52.83 ID:Y1ZlGg0p.net]
>>530
アクセスしてるからダメそう

533 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:40:07.82 ID:3XjGQ6E0.net]
[]はただのアドレス計算じゃん

534 名前:デフォルトの名無しさん [2019/05/11(土) 12:42:52.29 ID:DVWj7ai3.net]
&p[N]はp + Nと同じって規格にあったっけ?

535 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:44:31.45 ID:RjxICFG6.net]
確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう

536 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:56:49.51 ID:FaKAPAIh.net]
>>533
a[i]は a+i ではなく *{a+i}

537 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 13:12:17.25 ID:2v2BzL6t.net]
経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)

538 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 18:44:16.82 ID:fU686pnk.net]
&*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?

539 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 06:58:46.18 ID:x4ccFx6b.net]
>>530
int a[5];
int *p = &a[5];
というコードが有効、つまり
「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、
という仕様から、この場合は許される、というのが >>531 の指摘か。
一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。

流れの元になった >>508 を見返したら、
a.insert(a.begin(),&b[0],&b[sizeof b]);
これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。

540 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 07:43:52.68 ID:2y1+p9UL.net]
>>530
>>a.insert(a.begin(),&b[0],&b[sizeof b]);
>>

>これ、添字オーバーしてるけどメモリエラーとかにならないの?

508だけど、これは
a.insert(a.begin(),&b[0],&b[sizeof b]);

こっちの間違いです。ごめんなさい。
a.insert(a.end(),&b[0],&b[sizeof b]);

&b[sizeof b]);
この部分は

b+sizeof(b)
これなら問題ない感じ?
どちらでも動くけど、たまたまいてる可能性捨てきれないから不安なんだよね。

実際のソースはsizeof(b)がbに格納されているデータのサイズを示していて、

char b[256];
int s = read( fd, b, sizeof b);

a.insert(a.end(),&b[0],&b[s]);

みたいな感じで書いてます。
んで、b最大数来た場合にちゃんと動くか気になったというわけっす。

int s = read( fd, b, (sizeof b)-1);
無難にこれの方がいいですかね?



541 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:19:05.13 ID:k8bUqGvO.net]
>>539
>int *p = &a[5];
これは多分だめで、ポインタ値としての存在なら許される
int *p = a+5;

542 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:53:09.39 ID:nuZIUjqi.net]
ややこしいからoperator <<を定義しようw

543 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:25:00.10 ID:8/5ODvoI.net]
VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね

544 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:25:11.86 ID:yr8YjJOU.net]
std::transformって並列処理されてますか?

545 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 23:20:05.82 ID:jFoQmc6B.net]
c++17のparallel版使えば並列実行されるかもしれない

546 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 01:24:36.27 ID:RKe/NLvg.net]
visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら
OpenMP>普通にfor≧transform だった

547 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:49:38.54 ID:YS57w6Jq.net]
おとなしくpthead使えよ。

548 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:56:12.40 ID:WUu3P+2G.net]
非並列使ったならそりゃそうなるだろ

549 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:02:33.17 ID:1v50lv4I.net]
struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか?
A a;
B b = a;
みたいにしたいんですけど親を派生先にキャストはできないので困ってます

550 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:06:57.91 ID:mZDDPYlt.net]
struct B : public A
{
B* operator=(const A& a){ this->hoge = a.hoge;}
};
これ初期時にも使えるんかな



551 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:25:05.62 ID:1v50lv4I.net]
コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね

552 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:28:08.55 ID:mZDDPYlt.net]
スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな?
なんか危ういからやろうともしなかったが

553 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:25:17.13 ID:/dAesd8e.net]
cloneメソッド用意するとか

554 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:31:42.80 ID:ebJ8HHSX.net]
>>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。
代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。

555 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:33:37.60 ID:C3C4SHXA.net]
普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A)
B::operator =(const &A)
A::operator B()
雑なキャストでよければdynamic_cast<A>でおk

556 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:38:27.18 ID:C3C4SHXA.net]
↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);

557 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 11:40:14.21 ID:74mGoL8y.net]
>>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。
あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw

558 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:20:00.24 ID:PgzYowjZ.net]
549です
解決しましたありがとうございます

以下のように書いたら思っていたことが出来ました
(派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした)
代入は現状使う予定がないので大丈夫です
B::B(const &A a) : A(a) {}

559 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:17:29.46 ID:mr2QiBZl.net]
その内容だったら=defaultでいいよ

560 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 21:32:58.41 ID:/aEDSlbd.net]
引数付きコンストラクタって、=default使えるの?



561 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 22:09:55.18 ID:jJO9F8Je.net]
使えないよね
うかうかっと読み過ごしてたわw






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<132KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef