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


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

C++相談室 part123



1 名前:デフォルトの名無しさん mailto:sage [2016/02/21(日) 16:36:27.08 ID:jZESqUY+.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part122
peace.2ch.net/test/read.cgi/tech/1453557975/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1439849418/

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

331 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 10:36:48.16 ID:OLUNjZSr.net]
>>330
この仕様ってポインタに対しても有効?
以前似たような質問が議論されてたんだけど。
echo.2ch.net/test/read.cgi/tech/1439849418/184

332 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 11:13:34.09 ID:l944yzKo.net]
330じゃないけどポインタもscalar typeだから同じくゼロ初期化でしょ
でもvalue initializeルールに依存するようなクラスは書くべきじゃないなあ
echo.2ch.net/test/read.cgi/tech/1439849418/184
をNode node;ってやっちゃったらやっぱりnode.nodeは不定だよ
こんなコードは書かずにちゃんとコンストラクタを書いて明示的にnullptrで初期化しなくちゃいかん

333 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 11:23:42.71 ID:mBEuB6ly.net]
デストラクター作ってPODを諦めてるのに、適切に初期化するコンストラクター無いとか
ただのバグでしかない

334 名前:デフォルトの名無しさん [2016/03/10(木) 11:46:11.58 ID:xbWf2tod.net]
やっぱりvc2012でも2013でもxはゼロで初期化されません
バグですか
gccではゼロになります

335 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 13:35:05.45 ID:l944yzKo.net]
バグだね
>>308のBはxの初期値が重要ならこれもバグ

336 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 18:43:26.84 ID:uK8a0ubO.net]
VCの規格無視はいつもの事らしいから気にすんな

337 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 20:58:27.62 ID:l944yzKo.net]
調べたらこのバグは2012年6月にはもう報告されているね
https://connect.microsoft.com/VisualStudio/feedback/details/746973/incorrect-c-11-value-initialization-for-type-with-implicitly-declared-but-non-trivial-default-constructor
VC++ 2015 RCでやっと直ったらしい

338 名前:デフォルトの名無しさん [2016/03/10(木) 21:21:03.49 ID:wKO6hiHF.net]
そもそもが、int()で0だなんて馬鹿げたルールができたばっかりに...

339 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 21:38:31.66 ID:kxB40Mc+.net]
マイクロソフト「C++11対応は2015 Update 2から本気出す」



340 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 22:09:45.41 ID:1z8FCjXU.net]
>>331
有効
using P = int *;
P p{};
はp==nullptrになる

341 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 22:59:23.79 ID:XIXQ4NCN.net]
変数の初期値がどうなるかというだけの話でこんな議論になるのはC++ぐらいだろうなぁ。

342 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 11:55:53.38 ID:+X87dz7B.net]
値か0の初期化を当たり前にし、初期化なしを例外記述にする方向性なのだろう。
今のところ(バグがあるので)値初期化を信じず、
未初期化を前提に書けと言うのは、ある意味正しいのかもしれないが、
考え方としては逆行しているね。

343 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 12:52:11.72 ID:Y6ECzuws.net]
ある意味正しいじゃなくてパフォーマンスを考慮すると未初期化がデフォなのはC++としては完全に正しいんだよ
0初期化がデフォになってしまったらCを継承したC++の利点が薄れてしまう
value initializationこそがC++の思想に逆行してると思う

344 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:05:18.46 ID:kWA4jyXp.net]
>>308
そもそも非POD型をメンバーに持つPOD型は非POD型になるだろ。

cpplover.blogspot.jp/2010/06/c0xpod.html
>さらに、非PODな非staticデータメンバーを持たないこと。

345 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:10:43.94 ID:vYMpLkUm.net]
コンストラクタの強制なんかを見ると、
うっかり未初期化の値を使うことによる不具合を防ぐって
言語思想も含まれてるでしょ。
となると、単純な値にも何らかの初期値が保証される方向性もアリかと。

初期値は保証されるが、そのことによるパフォーマンス上のペナルティがない、
プログラマが初期化すればデフォルト初期値の処理は発生しない、
という仕様なら八方丸くおさまると思ったり。

346 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:12:37.67 ID:+X87dz7B.net]
>>343
正しいなら実装側でstack protectorなんてデフォルトにならないよ。
現状もパフォーマンスが欲しいときだけ別にするというのが基本だ。

347 名前:デフォルトの名無しさん [2016/03/11(金) 13:13:39.58 ID:2/u08KSA.net]
基本強制初期化で
int a = noinit;
みたいにしたら初期化しない方式で

348 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:21:02.38 ID:zH9xDiQd.net]
デフォは未初期化で記述方法によっては初期化もしてくれるって方針だろ。

その記述方法が紛らわしいのと、規格通り実装しないのがメジャーなコンパイラの1つなのが問題

もう少し分かりやすい記述なら良いのに、現状だとデフォルトconstructorが呼ばれているようにしか見えない。

349 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 14:21:15.08 ID:49om0mRF.net]
>>347
Dでは
int i = void; // デフォルトの初期値を省く

コンパイラのオプションで従来動作も選べればすぐ導入可能だと思うがね



350 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 15:25:46.64 ID:dykTweBs.net]
>>349
だからどうしたって話

int i{0}; とタイプすることもできないのか

351 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 15:35:13.63 ID:kWA4jyXp.net]
int i(); でもいいよ。

352 名前:デフォルトの名無しさん [2016/03/11(金) 15:36:56.24 ID:kuBG6faz.net]
int i = 0;
while(std::cin >> i) std::cout << i;
こんな馬鹿っぽい初期化いらんし邪魔だ

353 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 18:27:14.35 ID:0EDCO8WT.net]
>>351
ウソを書くな

354 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 22:49:53.55 ID:YlUxysAB.net]
>>351
それは関数宣言だと何度

355 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 22:52:02.91 ID:RA7SR1be.net]
お前ら一体 何を言ってるんだ

356 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 22:56:28.69 ID:YlUxysAB.net]
>>344
その通りだけど、ゼロ初期化とは何の関係も無い件

357 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:02:09.89 ID:4G2Dcq4h.net]
15年C++書いてきて
別案件でC#と数ヶ月戯れたけど
C++はやっぱり変態だと感じたわ
良くも悪くも

358 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:09:07.85 ID:RA7SR1be.net]
C++はぐちゃぐちゃ汚いよね

359 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:30:50.24 ID:RoKMXwVB.net]
それは綺麗なC++コーダに出会ってない坊やだからさ



360 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:31:51.83 ID:+X87dz7B.net]
またハゲの話してる…。

361 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:33:00.33 ID:RA7SR1be.net]
いや書き方の問題じゃなくて言語仕様自体の問題なんd

362 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:35:30.87 ID:a6R8C1/e.net]
C++はヘンタイだし、クソ言語だと思うけど、
大好き

363 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:36:37.63 ID:+X87dz7B.net]
あなたの落とした物はこのC++CLIですか?それともこのJ#ですか?

364 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:37:36.54 ID:RA7SR1be.net]
言語体系や構文ではC#が上だが、玄人好みなのはC++

365 名前:デフォルトの名無しさん [2016/03/11(金) 23:43:00.34 ID:+X87dz7B.net]
ヘンタイな玄人好みって、まるで素人童貞みたいな言い草だな。

366 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:44:29.48 ID:RA7SR1be.net]
すまんわかるようでわからん

367 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:53:03.42 ID:YlUxysAB.net]
お前ら一体 何を言ってるんだ

368 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:54:21.02 ID:RA7SR1be.net]
ほんとだよ全く

369 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 00:03:43.97 ID:z2WBnFu0.net]
でもそれがc++なんだよね。



370 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 00:35:06.18 ID:FH3bqKTZ.net]
こういうことをC++でやるにはあの機能ではダメでこの機能を使ったこの設計でなければならない
っていう無知と思い込みから汚いコード書いて無駄に苦労してる人は珍しくないぞ

371 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 01:39:29.17 ID:Zbyfy48z.net]
自分だけはキレイなコードかいてるという前提

372 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 01:43:01.42 ID:Pl4Qm8o2.net]
データ構造を隠蔽したままinterfaceを隔離する方法ってありませんか?

class IContainer {
};

class Ifold {
  virtual do(IContainer& container) const = 0;
};

class VectorContainer : public IContainer {
private:
  std::vector<double> container_;
};

みたいな感じでIfoldのインターフェースはコンテナに依存しないようにしたいです。
visitorパターンにするとIContainerに、Ifoldの具象クラスのacceptメソッドが増えていくのが…。
何かうまい実装はありませんでしょうか?

373 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:13:17.49 ID:VClvi+pB.net]
言っている意味が全然わからない。
Ifoldの具象型がIContanerの具象データに依存してるって事?
上位型だけでやりとりしたいなら、IfoldかIContainerどっちでも良いが、
具象型の中でダウンキャストでもすればいいだろ。

374 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:16:35.39 ID:VClvi+pB.net]
もし外でvisit/accept可能か確認したいなら、
bool supports(IContainer&) (またはIfold&)とか付ける。
それ以外思いつかないが、そういうことじゃない?

375 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:18:19.39 ID:Pl4Qm8o2.net]
>>373
Ifoldの具象型がIContainerの具象型が中で持ってるデータ構造に依存するのはOKです
ダウンキャストというと、どのように行えばいいですか?
インターフェースクラスからは具象クラスがわからないため何にダウンキャストすればいいか決定できません…

376 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:19:31.10 ID:Pl4Qm8o2.net]
>>374
すみません、具体的にどのような実装になるかイメージができません…

377 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:21:31.37 ID:VClvi+pB.net]
>>375-376
いまいち要領を得ないが、具象クラスにdo(IContainer& x);を実装、
中でIContainerからVectorContainerなどにキャストすれば良いんじゃないのか?
これ以上は何がしたいのかよくわからないから何とも言えん。

378 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:42:31.41 ID:VClvi+pB.net]
もしかしてIfoldではなく、その具象クラスすら、
受け取るべき具象コンテナが決まってないって事か?
それもう設計破綻してるから無理だろ。

そうではなく特定型にキャスト可能かわからないってだけなら、
自分でID付けてis_a(int id)とか実装して調べるか、dynamic_cast。

379 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:51:53.53 ID:9NhLr4qt.net]
>>372
class IContainer {
virtual double& at(int index)=0;
virtual void push_back(double& v)=0;
};



380 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 09:19:37.98 ID:Vp+P3H45.net]
>>372
std::accumulateみたいなことがしたいように見受けられるけどそうかね?

381 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 09:54:48.36 ID:fbT4KBM6.net]
std::stack<T, C>を
IContainerを受け取るIStackに魔界造したイメージだろうきっと

382 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 11:36:06.87 ID:oS3fCNyN.net]
欲しいのは単にiteratorじゃね?
visitorはfoldの仕方が変わるからaccept必要でしょ?

383 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 13:19:48.43 ID:VClvi+pB.net]
てっきりテンプレート無しに異なる数値型を扱いたいって事かと思ってたよ。
テンプレート使うならStrategyだけで済んじゃうし。

384 名前:デフォルトの名無しさん [2016/03/14(月) 22:12:09.15 ID:bYJAKtH4.net]
結局何だったんだ…?

385 名前:デフォルトの名無しさん [2016/03/15(火) 18:46:33.79 ID:7F6lH4i+.net]
すみません、visitorパターンを使うとacceptを持つインターフェースクラス(ライブラリコード)が、
具象クラスであるvisitor(ユーザーコード)に依存してしまうという問題を解決したかったのですが、いまいち伝わらなかったみたいです。

>>378
型タグによるダウンキャストは、メンテの観点から採用できません...

>>382
自分がなにを抽象化したいのか再考するきっかけになりました。
ありがとうございました。

結局visitorを内部のコンテナ型に依存するインターフェースクラスとすることで解決しました。
実際にはIVectorContainerとかIListContainerのような形にしました。
正確にはvalue_typeは決まってたのでテンプレートテンプレートパラメータを使いました。

386 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:37:53.71 ID:drELySke.net]
それだとデータ別にインターフェースできるから統一できないんじゃないの。
ダウンキャストの方が見えてる分まだマシかと。

387 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:46:48.46 ID:7F6lH4i+.net]
>>386
ダウンキャストだとコンテナ型が増えるたびにif文を追加しなくてはならず、
しかも追加し忘れてもコンパイル時にエラーが出ないので…

388 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:51:40.14 ID:drELySke.net]
>>387
またわけわからん事言っとるね君。
テンプレートだろうが、結局特定のコンテナのインターフェースに依存するだから、
その部分は場合分けしなきゃならんでしょ。

389 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:54:05.87 ID:7F6lH4i+.net]
>>388
いや、それはaccept側のオーバーライドで解決します
これがvisitorパターンの一般的な実装かと思いますが、どこがわかりませんか?



390 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 21:12:36.21 ID:drELySke.net]
>>389
うむわけわからんよ。
どうやってacceptのオーバーライドで別種のvisitorを分ける?

そもそもテンプレート型に仮想関数付ける形こそ始末が悪くメンテしにくいのだから、
それならいっそインターフェースも消して、
テンプレートの構造的部分型だけで十分だと思うんだが。

391 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 21:13:54.39 ID:7F6lH4i+.net]
>>390
家に帰ったら実装書きます

392 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 22:59:29.47 ID:7F6lH4i+.net]
>>390
こういうことです
https://ideone.com/JpA22R

これダウンキャストで実装すると、acceptを一つにまとめてif文で一つずつキャストを試すわけですよね?
その場合ConcreteXxxContainerがひとつ増えるとacceptを修正し忘れてもコンパイルが通ってしまって困ります

393 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:00:15.31 ID:18/5NGhU.net]
visitorクラスの基底クラスをライブラリ側が提供すれば良いのでは?

394 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:01:00.99 ID:7F6lH4i+.net]
>>393
という風にしました

395 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:04:19.56 ID:z48QWO4Q.net]
ダウンキャストとか言ってるアホはやばいだろ
コード書かせちゃダメなレベル

396 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:11:15.71 ID:18/5NGhU.net]
>>394
申し訳

397 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:48:10.07 ID:L3nufqEx.net]
結局具体的に何をやりたいのか分からんな
そもそもVisitorパターンが本当に適切なのか?
Visitorパターンみたいな汚くなりがちなものはなるべく避けるべきだと思うが

398 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 06:31:57.64 ID:+XU07v9B.net]
>>392
なんだオーバーライドじゃなくてオーバーロードじゃないの。
静的なのがいいなら構造部分型や標準コンテナの模倣で十分だろう。
そこまでしてインターフェースとVisitorに拘る理由は何?

>>395
dynamic_castなら危険でも何でもない。
そうやってダウンキャストを危険危険と、
いちいち大げさに騒ぎ立てる方がアホというか初心者だな。
実際OOPなら多くの場所で使われてるし、設計が簡単になるなら使っても良いんだよ。

399 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 06:42:44.25 ID:+XU07v9B.net]
そんなに静的なチェックが重要と言うなら、オーバーロードもやめとけ。
それぞれ別の名前にしたほうがより安全確実だからね。馬鹿みたいだけど。



400 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 07:47:22.56 ID:Jbc4KVVa.net]
そんなに言うならコード提示すればいいのに

401 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 11:05:22.41 ID:9QBMlTeC.net]
> ダウンキャストとか言ってるアホはやばい
> そうやってダウンキャストを危険危険と

個人的には「ダウンキャスト」っていう用語自体がアホ
アップ/ダウンの概念を不用意に持ち込んだ初心者ワードだと思う

暗黙の型変換(implicit conversion)
キャスト演算[明示的な型変換(explicit conversion)

後者を単にキャストと呼ぶのがC/C++の文化

402 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 12:20:06.84 ID:hEm8Gz+A.net]
>>401
お前のルールをさも普遍的なものであるかのように語られても

403 名前:デフォルトの名無しさん [2016/03/16(水) 15:13:44.46 ID:YWKSC+YR.net]
参照を返す関数は戻り値の一時オブジェクトは作成されないのですか

404 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 17:05:09.47 ID:noSrSdLM.net]
一体どこに一時オブジェが作成される要素があるというのか

405 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 17:32:24.76 ID:P1US5avI.net]
>>403
まさかとは思うがローカル変数の参照を返したりしてないよな?

406 名前:デフォルトの名無しさん [2016/03/16(水) 17:34:09.97 ID:bCkVw2Gt.net]
>>405
返すこともありますが
参照が有効か無効かは問題にしてません

407 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 17:35:54.73 ID:P1US5avI.net]
漢だな

408 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 18:42:01.29 ID:Sre9WvB0.net]
天才だ

409 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 20:48:14.54 ID:Zxg3aYLU.net]
>>401
それダウンキャストと何の関係もない話だよね?



410 名前:デフォルトの名無しさん [2016/03/16(水) 21:09:39.81 ID:8e8fbPBE.net]
>>401
律儀に規格用語だけ使って話すのと
アホかどうかは関係ねえぞ

おまえが体現しているようにw

411 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:20:12.09 ID:ejdJRW9Z.net]
>そんなに静的なチェックが重要と言うなら、オーバーロードもやめとけ。

これ意味不明だな
オーバーロードは静的なのに

412 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:42:57.82 ID:+XU07v9B.net]
>>411
オーバーロードに型チェックはあるが、
ユーザー定義変換のように、使用者側から見れば暗黙に見える変換が起きうるぞ。
なので確実なチェックが欲しいなら一つずつ名前を付けた方が良い。
どうだ馬鹿みたいだろう?

413 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:51:19.58 ID:noSrSdLM.net]
>>412はstd::abs(double)やstd::fabs(float)が許せないタイプ

414 名前:デフォルトの名無しさん [2016/03/16(水) 21:53:11.55 ID:8e8fbPBE.net]
そんなに動的なチェックが重要というなら、dynamic_castもやめとけ。

415 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:56:22.65 ID:9IPG0ZaQ.net]
だからdynamic_cast版のコード書いてみろってば
じゃないと比較のしようがない

416 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 22:14:17.92 ID:Sre9WvB0.net]
男ならCスタイルキャストオンリー

417 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 08:31:39.81 ID:yET/+Bsj.net]
>>412
> 変換が起きうるぞ。
意味わからん
具体例プリーズ

418 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 10:21:34.32 ID:mXayW7+h.net]
>>417
あんま触るな
コード出さない時点で誰かわかるだろ

419 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 12:44:04.09 ID:Mb/PAzMm.net]
仮に変換が起こったとしても、静的でしょ
dynamic_castとは別物



420 名前:デフォルトの名無しさん [2016/03/17(木) 21:19:25.81 ID:Nqbbnzs6.net]
githubに置いてあるゲームをmakeするとコケた。
error: cannot convert 'bool' to 'boolean' for argument '2' to 'int jpeg_read_header(j_decompress_ptr, boolean)'
jpeg_read_header(&cinfo, true);

エラーをみて思ったんだが、bool 型と boolean 型の違いって何なんだろ?

421 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 21:27:52.26 ID:3douJvdz.net]
>>417
void func( std::string );

func( "filename" ); ← 1

1.大丈夫だが、func( char* )ではないし、std::stringの構築が行われている


のやつ言ってるんじゃない?
ユーザ定義変換と書いてあるし

422 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 21:36:57.43 ID:1OZ8wjSn.net]
boolをbooleanに変換するoperatorひとつ記述してやればよくね?
そんなに手間じゃないやろ

423 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 21:44:32.93 ID:K9pRNqs8.net]
>>420
コードの該当箇所見た?

424 名前:デフォルトの名無しさん [2016/03/17(木) 22:09:31.51 ID:Nqbbnzs6.net]
jpeglib.hでboolean型が定義されていた。
(boolean) tureでコンパイルは通る。
Cにはbool型は無いんだな。

425 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:12:09.48 ID:K9pRNqs8.net]
ないねえ

426 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/17(木) 22:20:29.77 ID:ucqcC/SU.net]
stdbool

427 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:38:53.07 ID:rjBvJtG9.net]
あるっちゅーねん

428 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:40:27.06 ID:ucqcC/SU.net]
あるっ中年

429 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:41:49.16 ID:ucqcC/SU.net]
アル中中年



430 名前:デフォルトの名無しさん [2016/03/17(木) 22:42:41.64 ID:JPCzu/ni.net]
C17で入れるか審議中。

431 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 23:12:37.74 ID:/lOxP0ET.net]
>>421
でそれって
> なので確実なチェックが欲しいなら一つずつ名前を付けた
で解決できるんか?

432 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 23:19:50.72 ID:dAtTnfZR.net]
気付き易くした俺天才
ということだろう
f_char(""); //OK
f_string(""); //きっと誤り

433 名前:デフォルトの名無しさん [2016/03/18(金) 00:31:37.54 ID:bZVTun5z.net]
>>424
C言語はスレ違いだがC99から_Boolという型がある
stdbool.hをincludeしたらboolも定義される

434 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 05:07:52.40 ID:bw5Y7I/7.net]
ゼロオーバーヘッドでないなら他の言語を使った方がいい
実行時効率以外に何の理由があってC++なんぞ使うのか

435 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 06:23:08.41 ID:bw5Y7I/7.net]
一見関係ありそうで全く無関係の書込を強めの口調ですることで、スレのおかしな流れを止めるライフハック

436 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/18(金) 06:47:57.93 ID:Ap+aghgX.net]
それよりお前らClangのソースを読んでみろよ
この世のものとも思えない複雑怪奇
ビルド時間がReactOSよりも長いと来てる

437 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 13:00:52.70 ID:RPKOB45D.net]
convertException(env, [=] () {
Wrapper<WrapperTest>(env, thisj).destroy();
});

↑このコードの[=] () {〜}ってどういう意味?

438 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 13:08:35.67 ID:W5j8+q1I.net]
ttp://en.cppreference.com/w/cpp/language/lambda

439 名前:デフォルトの名無しさん [2016/03/18(金) 13:57:19.97 ID:Kcr5mRax.net]
[=]は俺も初めて見たときなんじゃそりゃーってなった



440 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 15:44:12.24 ID:InA5se8Z.net]
>>437
「C++ ラムダ式」で検索するのが第一歩。
>>438 は正確なのだろうけど、英語というハードルの高低が人により…。

441 名前:デフォルトの名無しさん [2016/03/18(金) 16:01:29.94 ID:HFSK+zOK.net]
[](){}();

!?

442 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 16:16:31.96 ID:410UcNdt.net]
[=a,&b,&c,=d,&e]とか一々修飾しないといけないの?

443 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 16:29:45.63 ID:FVNcSrUO.net]
一律同じ条件じゃダメなときはね

444 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/18(金) 16:30:09.19 ID:Ap+aghgX.net]
>>442
[=]
[&]
[this]
を使え

445 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 19:11:24.91 ID:oTJE6YWd.net]
結局ラムダ式を使うべきところが分からないまま数年経つ

446 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 19:44:50.08 ID:UMQZP4zp.net]
( ・∀・)つ-[](){}();-

447 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 20:18:38.69 ID:vJhS3HXJ.net]
ラムダ式はインラインになり得る?

448 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 21:20:10.79 ID:gDAbGK2s.net]
map を使うとき,キーについて operator-() を定義する必要があるとのことですが,operator==() の定義は必要ないのでしょうか?
実際 operator==() を定義しないままで動いているようですが,気持ち悪いです.
よろしくお願いいたします.

449 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 21:30:29.40 ID:FKb875f6.net]
記号でなんとかしようとするから複雑怪奇で意味不明になっていく



450 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 22:06:18.03 ID:vhFEV+GW.net]
algorithmを使う時にはラムダを結構使うかな。

451 名前:デフォルトの名無しさん [2016/03/18(金) 22:08:14.37 ID:oKqsBnC/.net]
ファンクタはもう出番ないんですか

452 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 22:19:30.53 ID:vhFEV+GW.net]
>>448
そんな話はじめて聞いた。
operator<()か、mapのテンプレートパラメータで適切な比較関数を指定するか、のどちらかやっとけば問題ないはず。

453 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 22:20:00.80 ID:jzV+DAcw.net]
ある程度長くなるなら、ラムダじゃないほうが良くない? そうでもない?

454 名前:デフォルトの名無しさん [2016/03/18(金) 23:38:29.84 ID:BXTY6QO1.net]
実行ファイルにバイナリファイルやテキストファイルなどを同梱したいのですが、どうやればいいのでしょうか?

455 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 23:41:49.45 ID:fdaB6v5T.net]
ソースファイルへ変換する。

456 名前:454 [2016/03/19(土) 01:01:05.43 ID:09FPc+yt.net]
>>455
それだと起動した時のメモリ使用量がスゴイことになりませんか?
jarみたいにできたらいいのですが…

457 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/19(土) 01:38:48.87 ID:qPghKix4.net]
>>456
zlibを使う

458 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 02:01:48.98 ID:ojXVuQaH.net]
どれぐらいのサイズのものを同梱したいんだろ。
メモリを気にするってことは
PCなら数百MBを越え、でかいときには楽に1GB越えるサイズかな。
ひょっとしたらターゲットが組み込みマイコンで小メモリなのかな

459 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 04:25:33.28 ID:A8zNJX4o.net]
>>454
リソースに追加



460 名前:デフォルトの名無しさん [2016/03/19(土) 05:34:50.36 ID:u4PbgbYy.net]
組み込みなら好きな場所にファイルを書き込めるんだから実行バイナリにくっつけるメリットが無い

461 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 06:22:04.15 ID:aVqCTfNk.net]
>>460
> 組み込みなら好きな場所にファイルを書き込める
意味わからん
今時 Linux や Windows Embedded 使ってる組み込みなんていくらでもあるのに

462 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 07:17:32.18 ID:fKG0+8Dg.net]
>>454
Windows + Visual Studio ならリソースに突っ込むのが一番簡単
でもゲーム開発とかなら別個にパックするファイルを用意した方がいい

463 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:27:46.68 ID:oD5CZDwR.net]
>>452
なんで operator<() だけでいいのでしょうか?

464 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:32:44.77 ID:i3aw7Uuy.net]
むしろless以外(同値判定など)がどうして必要なのか

465 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:59:57.29 ID:tKkEJPlU.net]
mapは内部で要素に順序をつけて管理しているため、strict weak orderを満たすlessが必要

順序づけ(要はsort)の条件を指定するのに==では足りないだろう。

466 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:18:49.25 ID:i3aw7Uuy.net]
しまったまた自演に反応してしまった

467 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:28:37.96 ID:/R8BseZf.net]
>>463
operator<があれば同値判定も出来るからというのが本当の答え
!(a<b) && !(b<a)ならa==b

468 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:42:20.95 ID:oD5CZDwR.net]
>>467
ありがとうございます.

469 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 11:56:29.54 ID:i3aw7Uuy.net]
>>467
どうしてそう息を吸ってはくような嘘をつくのか



470 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 12:07:33.31 ID:i3aw7Uuy.net]
mapのキーの話か
勘違いした失礼>>467

471 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 12:33:51.72 ID:P4VbUWO2.net]
変数名はhogeとfooとunkoのどれがいいですか?

472 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 14:29:27.12 ID:SYQTFOu+.net]
昔はhogeは通用したけど、今時の若い衆にいきなり使うと、なんなのこの人と思われることがあるらしい

473 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 14:53:53.05 ID:g1UHnDq8.net]
昔から「hoge=コミュ障」というイメージです

474 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:06:03.88 ID:4a76PkUY.net]
enumと文字列を同時に宣言するマクロを組んでいるのですが、

#define STR(head ,name) head ## name

#define MAKE(...) \
typedef enum _ENUM{ \
STR(ENUM_,__VA_ARGS__ ),ENUM_Num \
} ENUM; \
const char *Name[ENUM_Num] ={ #__VA_ARGS__ };

というマクロで
MAKE(one,two,three)
とすると、本来はENUM_one ENUM_two ENUM_three というenumの要素が得られるはずなのに、
なぜか生成されるのはENUM_one two threeの三つになってしまいます。
Visual Studio 2015 CommunityのIntelisenceでのエラーなのですが、
これは本来は予期している結果が得られているのでしょうか?
それともこいつが言うように実際は後者のような宣言になっているのでしょうか?

475 名前:デフォルトの名無しさん [2016/03/19(土) 15:37:01.96 ID:4a76PkUY.net]
>>474です 
すみません。ものすごい馬鹿な勘違いをしていました。__VA_ARGSは,も含めてそのまま放り込む
ためのものなんですね。

476 名前:デフォルトの名無しさん [2016/03/19(土) 15:37:46.60 ID:4a76PkUY.net]
すみませんが、>>474でやろうと思っていることを実装できるマクロは
どうやって組めばいいのでしょう?

477 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:54:23.67 ID:ni3uOtuZ.net]
>>476
https://www.google.co.jp/search?q=boost+preprocessor

BOOST_PP_SEQ_〜 を使えば MAKE((one)(two)(three)) でいけるはず。

478 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:57:26.06 ID:ni3uOtuZ.net]
SEQ にしないといけないのは昔の話だった。
いまは MAKE(one,two,three) でもいけそう。
d.hatena.ne.jp/DigitalGhost/20111205/1323052916

479 名前:デフォルトの名無しさん [2016/03/19(土) 19:11:04.92 ID:4a76PkUY.net]
>>476 ありがとうございます!
私はboostを全く知らなかったのですが、今入れてきました。

しかしいまいちよくわかったいないので、どうかboost/preprocessorを使った
プログラムをご教授願えませんでしょうか?



480 名前:デフォルトの名無しさん [2016/03/19(土) 19:48:34.76 ID:4a76PkUY.net]
調べていってはいるものの、全く理解が追い付きません…
(a ,b , c)の引数に対して、
enum{
  ENUM_a,
  ENUM_b,
  ENUM_c,
  ENUM_Num
}
が生成できれば締め切りに間に合うのです!
どなたかお願いします!

481 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:06:06.20 ID:SYQTFOu+.net]
あ、2ch新参の人だ!
2ch新参の人がいるぞ! 囲め!

482 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:13:11.30 ID:cIZsYOxL.net]
どうしてもマクロじゃないと締め切りに間に合わない状況ってなんだろうね

483 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:59:41.54 ID:5djHDgqa.net]
#, ##演算子

文字列化演算子・トークン連結演算子

484 名前:デフォルトの名無しさん [2016/03/19(土) 21:05:44.25 ID:4a76PkUY.net]
>>483 __VA_ARGS__で受け取った場合、引数が(a,b,c)だと
enum{
  ENUM_ ## __VA_ARGS__,
  ENUM_Num
}
としても
enum{
  ENUM_a,b,c,
  ENUM_Num
}
になっちゃいます

485 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 21:35:28.30 ID:IPOoQOnL.net]
ずいぶんレベル下がったなこのスレ

486 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 21:51:12.72 ID:VQqTJbFl.net]
4引数まで版でconst charの中身の展開は省略

#define SELECT4(d1, d2, d3, d4, name, ...) name
#define MAKE_ENUM(...) SELECT4(__VA_ARGS__, MAKE_ENUM_4, MAKE_ENUM_3, MAKE_ENUM_2, MAKE_ENUM_1)(__VA_ARGS__)
#define MAKE_ENUM_1(key) ENUM_ ## key
#define MAKE_ENUM_2(key, ...) ENUM_ ## key, MAKE_ENUM_1(__VA_ARGS__)
#define MAKE_ENUM_3(key, ...) ENUM_ ## key, MAKE_ENUM_2(__VA_ARGS__)
#define MAKE_ENUM_4(key, ...) ENUM_ ## key, MAKE_ENUM_3(__VA_ARGS__)

#define MAKE(...) \
typedef enum _ENUM{ \
MAKE_ENUM(__VA_ARGS__), ENUM_Num \
} ENUM; \
//const char *Name[ENUM_Num] ={ #__VA_ARGS__ };

487 名前:デフォルトの名無しさん [2016/03/19(土) 22:03:39.89 ID:4a76PkUY.net]
>>486 ありがとうございます
恐らく本格的なプリプロセッサを組まれる方は任意引数でやっているだろうなぁ
とは思いますが、自分の力量にしたがいます。

488 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 01:20:47.66 ID:3h/wnv4V.net]
なにバカ言ってるんだか
プリプロセッサでループや再帰(的処理)を行うには何らかの形で
作者が想定した処理できる限界の数だけのマクロをベタ書きで用意するしかない
事前の用意不要で任意の数をループや再帰で処理するのは元より不可能

489 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 01:24:49.08 ID:YNMOH2/p.net]
なめくさりミステイクしてね?



490 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 02:24:48.46 ID:yN6fzEfa.net]
今時C++でマクロ展開のループとかしてる時点で論外だしな。

491 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 02:26:06.45 ID:yN6fzEfa.net]
いやループはマクロだけじゃ無理か。再帰のしかも一定数までだな。

492 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 04:59:40.07 ID:wXobkPts.net]
ハハワロス

493 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 09:05:43.61 ID:9j4drtjC.net]
__VA_ARGS__なんて使わないで、こういう風にすればいいだけじゃ?
www.geocities.jp/rage2050a/rEnumStr/rEnumStr.html

494 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 09:29:08.28 ID:9j4drtjC.net]
ちょっとだけ探した限りだと__VA_ARGS__使うやり方ではこのやり方が一番柔軟で良さそう
www.gamedev.net/page/resources/_/technical/apis-and-tools/maintenance-free-enum-to-string-in-pure-c-with-better-enums-r4230
数の制限はやっぱりベタ書きでなんとかしなくちゃいけないけどね

495 名前:デフォルトの名無しさん [2016/03/20(日) 14:17:44.97 ID:Q9e0J8ZE.net]
BOOST_PP_AUTO_RECってのがある。
こいつは例えばあるマクロ関数「FUNC」があったとして、
再帰の回数分だけFUNC_1 FUNC_2…と作り出す機能がある。
あなたが求める機能は、もし再帰的に書けるなら
MAKE_ENUM_ITER(key, ...) ENUM_ ## key, MAKE_ENUM_ITER(__VA_ARGS__)
のように書けばいいわけだから、

後はわかるだろ?

496 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 14:19:27.99 ID:Q9e0J8ZE.net]
sageてなかった

497 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 15:57:09.34 ID:NZgllOnE.net]
誰に向けたレスだ
> 再帰の回数分だけ
をどうマクロで処理してるかわかってる?
設計としては再帰の回数を管理するカウンタ用のマクロを例えば
COUNT_10,COUNT_9,...と必要な数だけベタ書きで用意して処理に使っているので
あらかじめ用意されてるカウンタ用マクロの数を越える任意の回数の再帰を扱えるわけではない

498 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 16:04:24.63 ID:Q9e0J8ZE.net]
再帰処理させたいマクロをFUNCとして、
FUNCを何回再帰させるかを指定してBOOST_PP系統のマクロを定義すると、
FUNC_nという形になる名前の任意のマクロのうち、まだ定義されていない
名前のマクロを探し出して再帰的にFUNC_nを命名する機能を持っているのだ
>>486のやっているベタ書きを自動的に書いてくれるのだ

499 名前:デフォルトの名無しさん [2016/03/20(日) 18:31:41.32 ID:EqMhetHD.net]
>>498
boost/preprocessor/repetition/repeat.hpp
の中身見たことある?



500 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:48:29.48 ID:ja7H/O1J.net]
百歩譲って
A=A+1
って式を認めよう
この場合のイコールは代入を意味するんだな

そこで質問です
A+1=A
って書いたらどーなるの?
A=A-1
と同じ結果が得られるの?
教えてー

501 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:49:27.42 ID:90Oe+hOc.net]
>>500
コンパイルエラーになるだけです

502 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:50:09.88 ID:ja7H/O1J.net]
>>501
そっか・・・
あんまり論理的ではないのねorz

503 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:17:41.55 ID:d4s8z5nU.net]
あーたの狭い脳内論理にフイットしないってだけで完全に論理的だから

504 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:24:07.46 ID:SoMbpeP6.net]
マセマティカでも使えば幸せになれるかも

505 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:53:49.93 ID:YLhrJ5lt.net]
>>501
おまいはエジソンかよw

506 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 03:41:34.03 ID:ti1fSBNM.net]
だから = は等価(equal, equivalence)じゃなくて割り当て(assignment)だと何度言ったら

507 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 05:12:04.79 ID:YLhrJ5lt.net]
あ、レス番間違えた
エジソンは>>500

508 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 05:55:27.03 ID:uWb5tpCC.net]
質問です。
(コンパイラ絡みの話題なので若干スレチかもしれませんが、このスレが一番詳しい人が多いと思いますのでご容赦ください)

stringやlistなどはc++11でABIが変更になったと聞きますが、これの挙動がgccとclangで違うことを最近知りました。
たとえば以下のコードをビルド(g++ 5.2.0とclang++ 3.7.1)して nm --demangle コマンドでシンボルを見てみると、

$ cat hoge.h
#include <list>
using namespace std;
struct hoge {
list<int> get_list(list<int>);
list<int> get_list();
};

$ cat hoge.cpp
#include "hoge.h"
list<int> hoge::get_list(list<int>) {return list<int>();}
list<int> hoge::get_list() {return list<int>();}

引数のある関数get_list(list<int>)のシンボルはg++、clang++ともに
hoge::set_list(std::__cxx11::list<int, std::allocator<int> >)
ですが、引数のない関数get_list()のシンボルはg++だと hoge::get_list[abi:cxx11]() 、
clang++だと hoge::get_list() でした。
この違いのせいでg++でビルドしたライブラリをclang++のプロジェクトで使うことができません。
やむなく -D_GLIBCXX_USE_CXX11_ABI=0 オプションを付けてビルドし直したのですが
これだとC++11でもたらされた効率化の恩恵が受けられないですよね?
何か上手い方法はないでしょうか?(clangが対応するのを待つしかない・・・?)

# なお、ライブラリのほうをg++でなくclang++でビルドしろというのはなしでお願いします

509 名前:デフォルトの名無しさん [2016/03/23(水) 06:01:35.89 ID:LEkWD+7J.net]
>>500
struct B
{
B& operator + (int) { return *this; }
B& operator - (int) { return *this; }
B& operator = (B&) = default;
};

B A;
A=A+1;
A+1=A;
A=A-1;



510 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:12:52.17 ID:COygSTBI.net]
struct hoge{
std::string s;
};
hogeのムーブコンストラクタはどう書くのが正しいですか

511 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:29:58.57 ID:YLhrJ5lt.net]
>>509
すべてAになるとかエジソンコードかコレw

512 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:31:56.68 ID:LEkWD+7J.net]
メンバポインタで仮想関数を呼び出すとき、基底クラスの関数を指定ってできますか?
struct hoge { virtual void hage() { } };
struct fuga : hoge { void hage() { } };
void (hoge::*hogo)() = &hoge::hage;
fuga hege;
(hege.*hogo)(); //fuga::hageじゃなくhoge::hageにしたい

513 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:56:19.75 ID:GrZPafJv.net]
>>512
出来ない

514 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 11:01:24.81 ID:d4s8z5nU.net]
そもそもメンバポインタなんてものは使うな

515 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 14:32:18.80 ID:LEkWD+7J.net]
>>513
thx
情報密度の高いわずか4文字、その次の真空とは格段に違いますね。

516 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:36:19.09 ID:CsN4wd4t.net]
newとか書くのは老害なんですかね?
今日若いもんに指摘されたんだけども
make_hogehogeとか書いたほうがよいのでしょうか?
老害脱却してナウくてミニマルなコード書きたい

517 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:41:36.09 ID:9Xk0G6q+.net]
指摘したやつに聞いてこいよ
というか指摘されたときにちゃんと理由聞いとけよ

518 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 01:42:21.09 ID:019JwaRF.net]
deleteしわすれるマヌケなコードでなければ使ってもいいが

519 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 02:15:40.78 ID:lQwaLUOO.net]
>>500
上段より下段が時系列的に後
右辺より左辺が時系列的に後
そんなカスケード的概念が根底にある
BASICに行番号が有った頃と何も変わらない

左辺が変数のみなら代入を意味する
左辺が数式なら数式と扱う
どの辺がオブジェクト指向か知らない
ポリモーフィズムとかカプセル化も関係ない

多分、生物は前を向く、みたいな本能に根差した定義が隠れている



520 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:13:12.75 ID:xZz5tDVg.net]
>左辺が変数のみなら代入を意味する
>左辺が数式なら数式と扱う

という妄想でした
(c1 ? gr() : fr()) = 100 ;

521 名前:デフォルトの名無しさん [2016/03/24(木) 08:24:49.44 ID:Nz54sUCC.net]
それを言うなら
*pt = 100;
でしょ

A=100;のAもC++では左辺値という式で
変数とか数式とかいう言葉遣いは行番号BASICの話だろ

522 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:47:03.11 ID:RWWxbY4p.net]
>>516
スマートポインタを調べておいで

523 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:50:35.73 ID:4NO08lYx.net]
俺は数値型はmallocしか使わない

524 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 09:04:10.19 ID:wWfOqsS1.net]
なぜcallocを使わないのか
謎である

525 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 11:15:22.83 ID:biS/7wG3.net]
callocではポインタを初期化出来ないから

526 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 11:17:02.82 ID:biS/7wG3.net]
ああ、数値型限定か。取り下げ。

527 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 12:08:43.62 ID:ZS8UeVhQ.net]
>>516
そう書く以上ある程度は知ってるんでしょ?
まず使ってみて判断すりゃいい。

528 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 14:24:41.64 ID:aFiY6vgp.net]
スマポのデメリットって、
ちょっと記述が長いくらい?

529 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 15:53:26.47 ID:eZePobDJ.net]
そもそもC++において記述量はものの数に入らない。注意はゼロオーバーヘッドに向いている



530 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:10:53.13 ID:aFiY6vgp.net]
まあ、そうなんだけどね

もしC++の開発当初からスマポの概念が存在してたとしたら
もうちょっとシンプルなキーワードになってたのかなと思わなくはない

531 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:32:37.90 ID:5JBRPHnG.net]
スマポ使って記述量増えるか?delete書かなくていいんだし、例外安全なコード書くこと考えたらスマポ使わないと大変な記述量になるぞ

532 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:40:18.89 ID:YciTCaLR.net]
C++とOpenGLで大量のデータ(といっても1ファイル数MBのバイナリファイル)を表示するグラフを作ったんだが
ファイルを次々読んでいくと不正落ちするんだが
タスクマネージャを見る限りメモリリークはしてないっぽいんだが
原因はなんだろう?
エスパーさん助けて

533 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:47:29.18 ID:YnxOCpos.net]
>>532
フツーにVC++でデバッグしろや

534 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:56:15.84 ID:aFiY6vgp.net]
>>531
あくまで宣言時の話ね
安全かどうかはとりあえず置いとく

535 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 17:11:05.46 ID:YciTCaLR.net]
>>533
そういやそうやね
デバッグしたときの思い出したけどメモリのアクセスの違反とかやったかな
ただどこのメモリアクセスかだとかてんで絞り込めなかった記憶が蘇ってきた

536 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 17:11:55.85 ID:bJRa7hQW.net]
スマポは宣言したことないなあ

537 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 18:19:30.58 ID:GuX4g1Aq.net]
class POINT{
int x, y;

POINT(int x, int y){
this.x = x;
this.y = y;
}
};

式にはクラス型が必要です。とエラー出る。
Javaだとこの書き方で来たと思うんだけどどうれば?

538 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 18:20:23.26 ID:HU0hrWcK.net]
this.x

this->x

539 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:05:20.17 ID:4ybpt3lE.net]
コンストラクタ内はthis未定。



540 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:16:58.07 ID:xZz5tDVg.net]
なにをいっているんだこのばかは

541 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:17:43.17 ID:CKYJRfTx.net]
>>537
class POINT{
  int x_, y_;

  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};

542 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 22:26:04.65 ID:zkjgNnUp.net]
>>541はアスペ

543 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 22:39:30.65 ID:f7qbbkg+.net]
>>541
class POINT{
  int x_, y_;
public:
  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};

544 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 23:04:36.81 ID:3G6+DDFH.net]
>>510
struct hoge{
std::string s;
hoge() = default;
hoge(hoge &&) = default;
hoge(hoge const &) = default;
};
struct hoge{
std::string s;
hoge(hoge &&baka) : s{std::move(baka.s)} {}
};

545 名前:デフォルトの名無しさん [2016/03/24(木) 23:49:09.31 ID:zWmpvvy2.net]
>>535
clangやgccならAddressSanitizerでバッファーオーバーフローしたタイミングで止めてコールスタックを表示できるし、
解放済みメモリへアクセスしたときもそのアドレスを解放した箇所のコールスタック表示できる。

546 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:38:22.72 ID:+Ze54dSh.net]
でもOpenGLのデバッグはつらいね。
OpenGLの使い方間違え落ちると呼び出し元がわからんことが多いし。

547 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:52:21.56 ID:UpbiIEYU.net]
>>537
class POINT{
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
だろ

548 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:53:38.91 ID:UpbiIEYU.net]
>>537
ていうか
class POINT{
public:
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
しておかないとコンストラクタ呼べんよ

549 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:58:19.08 ID:BMGk8TKa.net]
>>548 そのアンダースコア要らない。



550 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:05:01.92 ID:UpbiIEYU.net]
でもわかりにくいだろ?

551 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:09:41.99 ID:OQH/xHTw.net]
>>548であれば明確で分かりやすいから要らない

552 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:16:51.01 ID:ea+R8FSN.net]
後ろアンダーラインカコワルイ

553 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 02:09:13.34 ID:9WnSpcyZ.net]
だよね。引数を後ろアンダースコアにするの俺も昔やってたことあるけどカッコ悪すぎるのでもう止めた
メンバ変数は前アンダースコア、引数にはアンダースコア付けないで落ち着いた
後ろアンダースコアって何であんなにカッコ悪いんだろ?m_よりはマシだと思うが

554 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 02:58:29.24 ID:7ath5rIc.net]
変数命名で思い出したけど、いろんな様式あるよねキャメルケースとかスネークケースとかそういうの

どれが流行ってるとか一般的にどうあるべきとかいう一般論あるの?

555 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:08:18.87 ID:cXdBDF9l.net]
前アンダーが処理系予約と知らずに使う方がもっとカッコ悪い

556 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:11:49.84 ID:UodAUCRU.net]
それぞれの流儀で決まる
コーディング規約を守るために努力すんのは無駄極まりないからGoogleの規約基準にしていいと思うけど
さすがにiとかbは消えたけどm_とg_はたまに見かける

557 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:19:28.56 ID:9WnSpcyZ.net]
>>555
規格ちゃんと読んだか?
前アンダースコアが予約されてる条件を理解してるか?
メンバ変数の前アンダースコアは合法だってことを知ってるか?

558 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:58:43.82 ID:F3D1y9dC.net]
法典を示せよ

559 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 04:05:28.83 ID:cXdBDF9l.net]
>>557
マクロはCの制約を適用しなければいけない
必然的に前アンダーは使ってはいけない



560 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 04:16:26.20 ID:9WnSpcyZ.net]
何言ってるんだか
規格を見るのが一番だが、この辺りでも見て自分の頭で考えてね
https://msdn.microsoft.com/ja-jp/library/cc440188%28v=vs.71%29.aspx

_大文字始まりは主にマクロのために全てのスコープで予約されてるが、_小文字始まりはグローバルスコープ以外では合法
これくらいのルールが分からないようじゃプログラマ失格だぞ
法典を示せ?テメエで調べろよ怠け者

561 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 05:55:20.56 ID:Agsep6u6.net]
「_大文字で始まる名前、_小文字で始まる名前は
ここでは許される、ここでは許されない」みたいな部分で
規格のギリギリを突くような書き方が好ましいとは思わないけどね。

場面によらずアンダースコアで始まる名前は一切つけない、
という方針も安全策としてありうるかと。

せいぜい複数人で開発しているときに、
「このメンバ名、_で始まってるけどいいんだっけ?」
「この場合は許されてるんですよ。予約されてるのは…
(しばらく薀蓄タイム)…というわけなのです」
「ふぅん、そうか。要するに問題ないのね」
という会話が生じる程度のネタでしょ。

562 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 06:13:55.38 ID:9WnSpcyZ.net]
ギリギリでもなんでもなく明確に合法なんだが
それにネタ程度の話なんかじゃなくて、メンバ変数を_小文字始まりに統一するとIDEで_を入力するとメンバ変数の一覧が出てきてメッチャ捗るという現実的な恩恵がある
C#では奨励されているスタイルだし、C++とC#を同じくらいやる俺にとってはもうこのスタイルで統一するのがベストという結論

563 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 06:40:08.87 ID:i3XIX2iS.net]
まったくだ

564 名前:デフォルトの名無しさん [2016/03/25(金) 06:52:38.28 ID:MISdMFxz.net]
>>562
どこで奨励されてるの?

https://msdn.microsoft.com/ja-jp/library/ms229045(v=vs.100).aspx
ここには使うなって書いてあるけど

565 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 07:06:04.17 ID:ACUGT+cL.net]
this付ける派閥には一切恩恵がないや…

566 名前:デフォルトの名無しさん [2016/03/25(金) 07:35:12.73 ID:bT5/u8Kc.net]
前アンダースコアはないわ

567 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 07:48:56.52 ID:i3XIX2iS.net]
>>564
そんな不適切なページ

568 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:10:52.98 ID:cXdBDF9l.net]
C++ではグローバルネームだけが前アンスコ予約となってる
Cとの共存に考えがいたらないまま、
>>557
>規格ちゃんと読んだか?
と言ってしまい、引っこみがつかなくなり発狂中

569 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:14:22.84 ID:+Ze54dSh.net]
スレタイ



570 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:16:09.34 ID:i3XIX2iS.net]
大文字と小文字の区別がつかない人間か

571 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:25:16.24 ID:cXdBDF9l.net]
>>569
Cのヘッダーを全くインクルードしなけりゃ良いよ
そんなの学校の宿題くらいしか無いけどね

572 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:29:34.02 ID:UodAUCRU.net]
動けば何をやってもいいのがC++だぞ

573 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:33:00.37 ID:TW5rwKlv.net]
>>541です
物議を醸すようなコードを晒してすみません
個人的には前アンスコでも後アンスコでもいいと思います
同じでプロジェクト単位で統一されていることが重要と思っていてC++としてどちらがいいとかはないと思ってます

574 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 09:11:07.81 ID:+Ze54dSh.net]
素のCヘッダなんて、どうしてもCのライブラリを使いたい場合くらいしか使わんなぁ。
C/C++共用のヘッダじゃなきゃ自分でextern "C"することになるから、そのときに
両方の規格を気にするくらいで。
そもそも、自前のcppコードでメンバにアンダースコア使う話とCヘッダのインクルードが
どう関係あるのか意味不明。

575 名前:535 mailto:sage [2016/03/25(金) 09:21:42.75 ID:qvYXoatK.net]
>>545
だいたい数十ファイル(ばらつき)を読み込んだあたりで突然落ちて
最初はメモリリークを疑ったからかなり明示的にメモリの解放を頻繁に行うようにした
でもやっぱり症状変わらなかった
解放済みメモリへのアクセスもあるかなって思ったけどようわからんかったけど
もうちょい頑張ってみる

>>546
OpenGLとかコードをパクりまくってつぎはぎだらけでなんとか表示させてるからあんまり意味わかってなくてつらい部分は確かにある
このOpenGLあたりでグラフィックメモリがパンクしてんのかとも思ってコード内でグラフィックの使用量吐き出させたりフリーソフトで監視したけどそんなにメモリが増大していってる感じじゃなかったな

576 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 09:37:39.50 ID:KBRwIVst.net]
あれ?これ合法だっけ?ってなる時点で紛らわしいので避けるかな
だったら前this か m_ の方がマシ

577 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 10:22:53.41 ID:AP4XabWz.net]
>>559
classのメンバ変数弄るならInline関数使うべきだろ。
そこ触るのにcとの互換性考慮する必要なくね?

578 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 11:19:19.06 ID:9WnSpcyZ.net]
StyleCop死ねwww
stylecop.codeplex.com/wikipage?title=A%20Brief%20History%20of%20CSharp%20Style&referringTitle=Documentation

579 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 11:27:57.09 ID:9WnSpcyZ.net]
前thisなんてルール作ったところで
this付けなくてもエラーにもなんにもならないしルール違反コード探すのだって容易じゃない
そんなの全く意味ないんだよこのクソバカStyleCop



580 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 15:47:57.54 ID:ACUGT+cL.net]
_fooでもm_barでもthis.bazでも
それを強制されるのなら、コーディング規約としては大して変わらん気がするなあ

581 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 16:01:49.59 ID:ACUGT+cL.net]
あ、ごめん。this.じゃねぇ

582 名前:片山博文MZ ◆T6xkBnTXz7B0 [2016/03/25(金) 17:02:16.92 ID:C4e13KV/.net]
アンパンマン、新しい顔ができたよ!!!

Unboost --- Time to say good-bye to Boost
https://github.com/katahiromz/unboost

583 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 17:22:36.13 ID:ZbElIMvp.net]
g_とかm_とかクッソ気持ち悪い

584 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 17:55:35.65 ID:uQE9fwFQ.net]
前アンスコが一番素敵だワ

585 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:09:09.53 ID:i3XIX2iS.net]
_そ_う_お_も_う_

586 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:12:39.86 ID:i3XIX2iS.net]
しかし_を入力するとメンバ一覧が出てきて捗るなどという考えは皆無だな

587 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:24:41.23 ID:uQE9fwFQ.net]
>>586
ん?便利と思うよ。mでも何でもいいけど。
逆に不便なのが、IDEのコンストラクタやsetter/getter自動生成機能で_やmが関数名や仮引数名についちゃうところ。

588 名前:デフォルトの名無しさん [2016/03/25(金) 20:17:21.95 ID:CiUv48rG.net]
アンダースコアで始まる識別子がたくさん出てくるだけじゃあ






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

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

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