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


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

C++相談室 part120



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

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

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

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

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

2 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:31:52.43 ID:OXupIzBk.net]
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

3 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 00:59:05.52 ID:9CUn1Ki5.net]
↑はこのスレの恒例です
いちいち煽り返さない・反論するなら具体的に・嘘や我流を挙げない
以上の三つを守って平和に使いましょう

4 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 06:23:06.65 ID:5Xmp3DW7.net]
うちは生ハイレグ非推奨にしてる
通常はvector、生配列と互換性が欲しい時はarray使ってる

5 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 06:23:41.30 ID:5Xmp3DW7.net]
ハイレグって、、、orz

6 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 08:46:02.70 ID:WmdTCvEv.net]
よく使うので予測変換されてしまったのですネ
わかります、わかります

7 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 09:22:49.13 ID:oPnU+EZi.net]
>>1 に「質問する前にFAQに目を通せ」と書かれているけど、
目を通すべきFAQを紹介していただきたい。

「C++ FAQ」と検索しても、ピンとくる情報が見当たらない。
どこかのサイトで公開されているものか、はたまた紙の書籍なのか。

8 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 10:52:16.04 ID:NgB4pPA8.net]
>>7
昔のスレのテンプレでは 2 に載ってた。
peace.2ch.net/test/read.cgi/tech/1345823164/
> 2 :デフォルトの名無しさん:2012/08/25(土) 00:46:47.34
> ■基本■
> [C++ FAQ]
>  www.parashift.com/c++-faq-lite/
>  www.bohyoh.com/CandCPP/FAQ/ (日本語)
>   Cとその仕様を比較しながらの解説なので分かりやすい。
>   ***** 質問の前に必ずこの二つに目を通してください *****

テンプレが貼られなくなったけど、 >>1 だけそのまま残っちゃってる状態。

ひとつめのリンク C++ FAQ Lite は、今だとこっちに取り込まれてるみたい。
https://isocpp.org/wiki/faq/

9 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 12:01:02.21 ID:ZvB3M2By.net]
むしろ生ハイレグだったら推奨したい

10 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 16:34:08.16 ID:9CUn1Ki5.net]
書くんじゃなくてカくんですか分かりません



11 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 19:38:09.08 ID:f5MibCBq.net]
FAQに目を通せと言う奴は何故かバカが多い
中身を理解せずにに単語レベルで脊髄反射してレスするのが典型的な行動パターン

12 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 20:52:10.42 ID:ozV5uknl.net]
低レベルに限ってこういうことを言う

13 名前:7 mailto:sage [2015/10/23(金) 21:18:20.30 ID:oPnU+EZi.net]
>>8
早速のお答えにお礼申し上げる。
柴田さんのところは良いサイトですな。

もう片方 ttps://isocpp.org/wiki/faq/ は英語なので辛そう。
目次を見ると「C++に関する神話と都市伝説」なんて
面白そうなタイトルもあるけど読めるかどうか。

14 名前:デフォルトの名無しさん [2015/10/24(土) 00:07:00.83 ID:hkUmvlfG.net]
>>11
なぜかって、解りきってんじゃん
自分では何も言えないカスがggrksを1つ憶えしてるだけだろ

たとえばこういうスレで低レベルという言葉の使い方がおかしいやつとかw

15 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 00:18:17.72 ID:zfbPKWbg.net]
今頃知ったのですが、返り値のある関数内でreturn文が一つもないのに
コンパイルエラーにならないのって酷くないですか?

16 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 00:26:15.82 ID:bL0EazKV.net]
なるだろ?

17 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 00:26:34.71 ID:ayPUmhGB.net]
>>15
なるが…@VisualStudio

18 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 00:33:06.40 ID:Ir698C46.net]
少なくともmain関数にreturnは要らない

19 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 00:52:41.06 ID:3cj2wJ90.net]
C言語と勘違いしてんじゃね?

20 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 00:56:42.44 ID:NDQYSDCE.net]
// voidを返す関数
void voidReturn(bool b)
{
 if (b)
  return void(0); //なくてもいい
 else
  ;
}



21 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 01:48:44.12 ID:XpmdunGV.net]
なるほど規格では別にエラーにはならんのか
関数末尾に到達した場合、値を返す関数でも値なしのreturnがあるものとして扱う
ttp://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value-without-pr
理由はその関数が途中returnせずに関数の最後に到達するかコンパイル時にチェックしきれないから
だとさ

22 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 05:25:37.76 ID:cp0zv7Rq.net]
ここのサンプルコードに
https://msdn.microsoft.com/en-us/library/windows/desktop/aa965245%28v=vs.85%29.aspx

STDMETHODIMP_(ULONG) Release()
{
// Return a temporary variable for thread safety.
ULONG cRef = CMediaSample::Release();
return cRef;
}

こんなのあるんだけどこれ意味あるんですか?

23 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 06:23:29.91 ID:YiK6tCta.net]
そもそも規格に正しくないソースをコンパイルしたらエラーにしろって書いてないし
まあ今時の処理系で警告出さないのは珍しくなってるとは思うが

24 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 07:22:52.82 ID:c7n9Kxmt.net]
>そもそも規格に正しくないソースをコンパイルしたらエラーにしろって書いてない

どうしてこういう
人を勘違いさせて陥れるようなことを書けるんだろうか

25 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 07:50:50.23 ID:YiK6tCta.net]
>>24
どこかに書いてあると言うならソースよろ

26 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 08:01:45.27 ID:Ir698C46.net]
どうしてこういう
人を陥れるようなミスリードを書けるんだろうか

27 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 08:16:25.18 ID:NDQYSDCE.net]
たぶん、「正しくない」を ill formed のことではなく

未規定 ⊆ 正しくない

の意味で使ってるんだろう。

28 名前:デフォルトの名無しさん [2015/10/24(土) 08:25:21.60 ID:2gR2C/q8.net]
       ☆ チン        ハラヘッタ〜
                     ハラヘッタ〜
 ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< >>23さん、ソースまだ〜?
      \_/⊂ ⊂_)_ \____________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:|  |
   | Visual Studio   .|/
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

29 名前:デフォルトの名無しさん [2015/10/24(土) 08:26:00.24 ID:2gR2C/q8.net]
あ、すまん
23じゃなく24ね

吊ってきます

30 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 08:59:10.31 ID:VUwmRE0S.net]
ダサっ



31 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 09:54:04.96 ID:6XAl/uQ0.net]
マジなの?エラーにするなって書いてあるって、マジなの?
ソースは?ソースはどこにあるの?

32 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 10:10:22.55 ID:7EkRf1mY.net]
> エラーにしろって書いてない

> エラーにするなって書いてある
の区別ができない奴はマ辞めた方がいいと思う

33 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 10:12:44.84 ID:NDQYSDCE.net]
そのような人類はいない

と思う

34 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 12:43:18.70 ID:Ir698C46.net]
>>3

35 名前:1
規格では1.4に診断メッセージを出すこととしか書いてない
エラーにするとかいう記述は無いはず
[]
[ここ壊れてます]

36 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 12:54:50.11 ID:hOfHEHo2.net]
このエラーになるってやつはなんなの?>>16>>17
普通は出ても警告でしょ
VSはエラー扱いにしてんの?

37 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:03:13.47 ID:xlX2ViuV.net]
>>35
そのぐらい自分で確認しろ
webcompiler.cloudapp.net/

38 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:10:01.01 ID:v+2N4LMl.net]
あ の ね mainは特別なんだよ
main以外はVSではデフォルトの設定ならエラーC4716になるよ

39 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:14:45.87 ID:hOfHEHo2.net]
なんだ、警告をエラー扱いにしてるだけじゃん

40 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:32:16.53 ID:ONf7Qbj7.net]
error C4716: 'hoge' : 値を返さなければいけません


怒られた



41 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:42:34.52 ID:hOfHEHo2.net]
https://msdn.microsoft.com/en-us//library/ft5xye74.aspx
Compiler Warning (level 1) C4716

42 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:46:14.61 ID:9aDzkraI.net]
↑なんか言えよアスペ

43 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:47:36.18 ID:hOfHEHo2.net]
こんな簡単な英語も読めないのか
なんでここにいるの?

44 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 13:59:57.97 ID:YiK6tCta.net]
>>34
>>15 は未定義じゃね?
なので診断メッセージも要求されないと思うが

>>35
そのレベルの話は要らんよ

45 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 14:01:44.76 ID:ONf7Qbj7.net]
プロジェクトの設定によっちゃエラーじゃなくて警告になるのかね
そもそもreturn書かないならvoidにするけどさ

46 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 14:07:27.65 ID:Ir698C46.net]
>>43
>>23に『そもそも』と断わりがあったので
一般的な話と理解したのだが

47 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 14:38:52.48 ID:YiK6tCta.net]
>>45
ああすまん、そこは君の言う通りで正しい

48 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 16:30:55.59 ID:Ir698C46.net]
しかしreturn書かないとundefind behaviorなのか
勉強になった

49 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 16:35:32.59 ID:hOfHEHo2.net]
なんだ、どんな高レベルの話なのかと思ったらそんなことか
ある意味びっくりしたわ

50 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 18:29:29.78 ID:3yfAWb6Z.net]
ID:hOfHEHo2がコミュ障すぎて哀れ



51 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 18:41:40.37 ID:hOfHEHo2.net]
コミュ障アスペ言うだけのお仕事お疲れ様です

52 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 20:51:33.26 ID:8lZJgWy6.net]
このスレにはとにかく誰でもいいからケンカしたい人が常駐しています
スタートアップからの削除も不可能です

53 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 20:59:32.25 ID:Ir698C46.net]
>>2を見る限りこのスレはそういうスレなんだから仕方がない

54 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 21:18:24.59 ID:HaxSH1Dy.net]
戻り値のある関数try blockもwell-formedでundefind behaviorだっけか
auto f() -> int
try {
 throw 0;
}
catch (...) {
}
これは何で許されてんだろ

55 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 01:44:04.31 ID:xmPcotqF.net]
>>51
自己紹介乙

56 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 03:56:53.78 ID:4lnR5/Hi.net]
try 〜 catchで、
・throwされる型のコピー/ムーブ コンストラクタ/代入演算子がアクセス不能な場合
・同じ型のreference, const referenceが同時にcatchされている場合
の挙動がよくわからん。
とりあえず
・コピーもムーブも可能な場合
(copy constructible, copy assignable, move constructible, move assignable)
同じ型のreference, const referenceが同時にcatchされていても上の方で
catchされる
→ まぁこれはわかる
・コピーができない場合(move constructible, move assignable)
値渡しのcatchがあるとコンパイルエラー
referenceのcatchとconst referenceのcatch両方あると上の方でcatchされる
catchされるときにムーブコンストラクタ/代入演算子は呼ばれていない
→ これもわかる
・コピーもムーブもできない場合
値渡しのcatchは当然コンパイルエラー
referenceのcatchとconst referenceのcatchもコンパイルエラーになる
→これがわからない。
 ムーブのみ可能なときにムーブコンストラクタ/代入演算子呼ばれてないのに
 なんでムーブ禁止するとコンパイルエラーになるねん。
C++標準でどう決まっているとか詳しい説明できる方いませんか。
なお上記実験で使ったコンパイラはclang。

57 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 04:04:12.94 ID:4lnR5/Hi.net]
あ、あとポインタも… (検証忘れていた)
つまりcatchのパターンは以下の7種類…(多すぎ
・T
・T &
・const T&
・T *
・T *const
・const T *
・const T * const
ただこのうち
・T *とT *const
・const T *とconst T * const
は同等かな
ポインタは常にコピー可能なはずなので
なぜかrvalue referenceではcatchできない模様

58 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 08:19:09.96 ID:hWsy4IeG.net]
おいQよ。長文やめろ。
読んでないけどcopy elisionじゃないのか。
本当は呼ばれるけど省略されてるだけという。

59 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 12:50:41.08 ID:4lnR5/Hi.net]
いろいろ試してわかったこと
・catchで同じ型の&やconst&が同時catchされていても、
 &やconst &としてthrowしたときに
 &やconst &でcatchされる訳ではない
 可能な限り上の方でcatchされる
 コピーが発生することもある
・throwされた型から暗黙的に変換可能な型のcatchがあっても、
 型が違うならcatchされない
 例えば、std::stringのcatchがあるときに
 throw "Hello, world!"とかやってもcatchされない
 std::stringでcatchするにはthrow std::string("Hello, world")
 とかしないといけない
・catchされるときに呼ばれるコピーコンストラクタで例外が飛ぶと
 catch不可能
 一番外側でcatch (...)してもcatchできなかった
 →これはまずくね? clangのバグ?

60 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 13:09:04.48 ID:PijF3SYg.net]
>>58
const参照でcatchすればいいだけだろ
一番外側ってどこだよ
例外発生中にそのtryの外に出るような例外が更に発生したら(デフォルトでは)std::terminateが呼ばれるのは仕様



61 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 13:10:44.10 ID:B2NleybV.net]
>>55
struct NCNM { .../*コピー不可・ムーブ不可のクラス*/... };
NCNM f() { return NCNM(); }
int main() {
NCNM const &amp; v = f();
}
君はこういう感じのコードが動くと思うか?
答えは動かない
returnの式の一時オブジェクトから返却値の一時オブジェクトの構築ができないから

throwの処理も裏では似たような感じで
try {
throw NCNM(); // (1)(2)
}
catch (NCNM const &amp;) { // (3)
}
上記の場合なら
(1) ローカルな一時オブジェクトの構築(デフォルトコンストラクト)
(2) 例外オブジェクトという特殊な一時オブジェクトの構築
 上記の形でムーブ可能なクラスの場合なら普通に(1)のローカルな一時オブジェクト
 からムーブコンストラクトされる
(3) (2)で構築した例外オブジェクトが参照に拘束される
という流れになっている

ちなみに例外オブジェクトは名無しの一時オブジェクトだが
特別なのでlvalue扱いされてムーブはされない

62 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 21:38:18.68 ID:amtg7r/f.net]
じゃんけんの勝敗を判定する最もシンプルでエレガントなコードってどんなんでしょう?

63 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 21:40:34.79 ID:FwYjAUOL.net]
スレ違いは去れ

64 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 22:08:04.68 ID:1QFSvKv3.net]
>>61
構造的に美しいのはグーチョキパーにVisitorパターンとか?

65 名前:デフォルトの名無しさん [2015/10/25(日) 22:44:48.86 ID:WeEsOmrk.net]
循環する列の中で、ある要素と、別の要素の距離は、
順方向と逆方向のどちらが近いか、という問題か?

66 名前:デフォルトの名無しさん mailto:sage [2015/10/25(日) 22:54:57.00 ID:l/fL5071.net]
omae == ( ore + 1 ) % 3

67 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 00:31:48.73 ID:WiaZeXi7.net]
>>59
うーん、なんかよくわからん仕様だなそれ。
mainでプログラム全体を
try{
 // プログラム全体
}catch(...) {
 // プログラムのすべての例外をcatchする…
}
で包んでいれば、
どこで例外が飛ぼうが例外を揉み消せると思ってたんだけど
仕様上はそれをすり抜ける場合があるってこと?

>>60
うーん、なるほど
rvalueからlvalueを構築できないといけないのか
呼ばれないことがあるのは最適化のせい?

68 名前:デフォルトの名無しさん [2015/10/26(月) 00:37:37.85 ID:8cS3iYFV.net]
>>63>>64>>65
おお、いいですね!
結局以下のような感じにしました。
int judge(const Hand& ore, const Hand& omae) {
return (ore == omae) ? 0 : (omae == ( ore + 1 ) % 3) ? 1 : -1;
}
ありがとうございました!

69 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 01:40:29.63 ID:YRFGsT3p.net]
>>67
そんな解読困難なコードが「いい」というような感覚は早く捨てるがいい。

70 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 02:33:41.56 ID:igXkyu20.net]
記述量や行数を抑えるのがシンプルでエレガントだと考えるならこれでいいんじゃね



71 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 05:36:08.43 ID:E0EWk/3Q.net]
そもそもジャンケンのロジックごときを人間様が一々考えて書くべきかねぇ?
ネット上に幾らでもサンプルあるんだからニューラルネットに学習させればいいのに

72 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 07:05:11.45 ID:vgIN4zh7.net]
>>61
グーチョキパーが 0~2 なら 3×3 の配列でやるとか

73 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 07:55:43.62 ID:ztwFNJyv.net]
この程度のロジックに数行使うよりよっぽど分かりやすい気が

74 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 09:43:35.93 ID:t0giKvEY.net]
>>68
return (ore-omae+2) * 2 % 3 - 1;
とかならわかるけど、その例を解読困難という意味がわからない。

75 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 12:36:11.99 ID:LpR+ksZ8.net]
>>71
そこでタプルをキーにしたマップですよ

76 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 17:35:19.79 ID:AJ3LGlVQ.net]
グーチョキパー以外の手にも対応できるようにしないと(使命感)

77 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 17:43:37.10 ID:aKtHVHdt.net]
img6.omosoku.com/141449856214144985627574.jpg
こういうのにも拡張できるようにしないとな

78 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 18:03:34.67 ID:VCR+r8C9.net]
そのロジックは外部にあるグーチョキパーの定義順に依存してるから分かりにくいんだよ。
だから文字列で受け取って処理するものの方がいい。

79 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 18:16:24.40 ID:w3zzHJMH.net]
そこで文字列持ち出すのは遅いだけでなくバグの温床になるから、やっちゃ駄目な手段の最たるもの
スペルミスしたらどうするんだ

入力が例え文字列でも、入力部でエラーチェックとenum数値化して後はenumで扱うのがバグ対策として最善

80 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 18:41:25.49 ID:9DWZHCXT.net]
>>73
それは無駄に難読化してるだろ
return (omae-ore+4)%3-1;

>>67も読めないようならプログラマとしては諦めた方がいい。
配列にしても初期化コードは必要なのだし、そこにベタで書かれても余計に迷惑だ。
judge関数にくくっている時点で全く問題なくなっている。あとは指摘通りenumだよ。



81 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 19:28:19.15 ID:jGdtvb/A.net]
.Net的な話題で恐縮ですが、C++/CLIで
#include <memory>
using namespace std;
shared_ptr<int>& f()
{
auto i = make_shared<int>(3);
return i;
}
void main()
{
shared_ptr<int> p = f();
}
を実行するとNullReferenceExceptionエラーになりました。
f()の返り値を参照じゃなくしたら正常に動いたのですが、
C++/CLIってアンマネージなものを受け取るときはコピー渡しか、
あるいはポインタ渡しにしないといけないんでしょうか?

82 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 20:01:56.53 ID:elUSwIsv.net]
>>80
ローカル変数への参照を返してる時点で論外

83 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 20:13:47.59 ID:MJ9QERRk.net]
>NullReferenceExceptionエラーになりました

嘘つけ

84 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 20:25:08.37 ID:t0giKvEY.net]
>>79
>return (omae-ore+4)%3-1;
せめて元の仕様ぐらい満たしてから言えよ…なんだこのクソコード

85 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 20:32:34.92 ID:09dgbM7x.net]
>>78
それじゃ同じことで解決になってない。
バグの温床などというがそれはただの思い込み。

86 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 20:43:53.30 ID:t0giKvEY.net]
>>84
ユーザー入力が文字列なのは当たり前の話
そして文字列だけじゃコンパイル時チェックは入らない
バグになりやすいから、可能ならenumにした方が良いよ

87 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 20:55:33.65 ID:igXkyu20.net]
>>75
増やしたらジャンケンの要である三すくみが破綻するだろ!いい加減にしろ!

88 名前:デフォルトの名無しさん [2015/10/26(月) 21:02:57.02 ID:BA/+Pgz/.net]
rocketnews24.com/2011/06/27/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E3%81%AE%E3%80%8C%E3%81%98%E3%82%83%E3%82%93%E3%81%91%E3%82%93%E3%80%8D%E3%81%8C%E8%A4%87%E9%9B%91%E3%81%99%E3%81%8E%E3%81%A6%E3%80%81%E3%83%AB%E3%83%BC%E3%83%AB/

89 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 21:14:05.03 ID:/aNdzrlS.net]
>>85
勝手に仕様を決めるなよ
r、s、pのキーコードを投げるのに決まってるだろ

90 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 21:36:11.12 ID:t0giKvEY.net]
>>88
先輩それコンパイル時チェックあっても怖いっす・・・



91 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 21:44:35.42 ID:9DWZHCXT.net]
>>83
アサイン逆か。
return (ore-omae+4)%3-1;
いずれにしてもお前のが無駄な計算をしているのは確かだよ。

92 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 21:54:59.46 ID:9DWZHCXT.net]
>>83
いや、逆じゃねーな
ID:t0giKvEY 池沼はテメーだバカタレ

93 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 22:09:31.14 ID:66JW6Ozr.net]
>>90-91
言わんこっちゃない…
配列にしときゃよかったのに w

94 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 22:15:06.77 ID:9DWZHCXT.net]
>>92
いやまずは自信満々の>>83, ID:t0giKvEY の言い訳を聞こうよ。

95 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 22:16:34.95 ID:ud2D7ccR.net]
このまま日付変更までだんまりに1千ペリカ

96 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 22:47:06.51 ID:1QkHB6vM.net]
class Hand {
enum Shape{GUU,CHOKI,PAA};
Shape shape;
public:
bool winsOver(const Hand &opponent)const{
switch(shape){
case GUU: return opponent.shape==CHOKI;
case CHOKI: return opponent.shape==PAA;
case PAA: return opponent.shape==GUU;
}
}
};
こんな感じでひとつ

97 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 23:07:43.16 ID:igXkyu20.net]
だからこのスレには荒らしが混じってると何度

98 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 23:17:00.15 ID:93KzrJS0.net]
>>81の言う
「ローカル変数への参照を返してはいけない」
はどんな場合でも成り立つ原則だから覚えておくといいよ!!

99 名前:デフォルトの名無しさん mailto:sage [2015/10/26(月) 23:40:04.06 ID:9DWZHCXT.net]
>>95
勝ち判定だけならそれでもいいんだけど、 -1,0,1 にアサインすると sort とかの時に便利だから、
あの仕様でいいんだよ。

100 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 00:17:50.31 ID:a5wkmoM9.net]
>>90
悪い確かにコピペしたテストコードが間違ってた

>>94
死ね



101 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 03:03:10.47 ID:HNGX9QQL.net]
std::sortですら-1,0,1でなくlessを使っているというのに
std::qsortのコンパレーター風の仕様に拘る奴はなんなの

102 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 03:06:15.31 ID:HNGX9QQL.net]
>このまま日付変更までだんまりに1千ペリカ

00:17:50.31
> 死ね

Q渾身のギャグですか?

103 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 04:55:56.79 ID:kXLLNmC/.net]
健気に待ってたんだね

104 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 05:16:21.58 ID:CAcFYEW6.net]
いったい何をソートするつもりなんだろう

105 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 12:02:19.24 ID:T5qJYgNG.net]
蒸し返すわけじゃないんだけど、>>22の注意書きってどういうこと?

>// Return a temporary variable for thread safety.
>ULONG cRef = CMediaSample::Release();
>return cRef;

return CMediaSample::Release();

って書いたらダメってこと?

106 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 12:09:30.09 ID:EcLm8+/Y.net]
LL言語みたいに動的に配列に追加していくのってどうやるのか教えてください

107 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 12:22:05.98 ID:jhggiZlS.net]
STLで検索(ピッ)

108 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 12:46:11.47 ID:nyQaZFXX.net]
・LL言語がわかりません定義してください
・動的に配列に追加がわかりません定義してください

もしかして std::vector ではありませんか?

109 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 13:13:45.83 ID:gPvV5cn8.net]
typedef long long LL;

110 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 15:53:01.19 ID:9ni5ZXBK.net]
<?php
$ary = array();
$ary[] = 1;
$ary[] = 2;
$ary[] = 3;

$aryの中身は[1, 2, 3]



111 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/10/27(火) 15:58:41.24 ID:5PFO2WOq.net]
std::vector<int> ary;
ary.push_back(1);
ary.push_back(2);
ary.push_back(3);
//aryの中身は{1, 2, 3}

112 名前:デフォルトの名無しさん [2015/10/27(火) 16:06:17.94 ID:xaNt5qb2.net]
decltypeの「decl」って何の単語を略したんでしょうか

113 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 16:10:46.96 ID:gPvV5cn8.net]
そのレスが書き込めるなら、googleの入力ボックスにも入れられるでしょ?>decl

114 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 16:12:27.74 ID:QeXnp+TO.net]
C++を学ぶのにここの先輩方に怒られない優良本を教えてください
PHPとRubyのプログラミング経験はありますがC++は分かりません

115 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 16:14:30.91 ID:IFaQ1PsR.net]
スコットメイヤーズの本と、例のナゾナゾ集読んどけ

116 名前:デフォルトの名無しさん [2015/10/27(火) 16:23:54.41 ID:cfkfKsSk.net]
>>104
自分でdeleteしてたコードの名残だと思う

117 名前:デフォルトの名無しさん [2015/10/27(火) 16:24:36.79 ID:cfkfKsSk.net]
>>111
declareですね

118 名前:デフォルトの名無しさん [2015/10/27(火) 17:05:38.96 ID:xaNt5qb2.net]
ありがとうございます

119 名前:デフォルトの名無しさん [2015/10/27(火) 17:07:24.83 ID:xaNt5qb2.net]
>>112
decltype 略
でググってました(答えが出なかった)

120 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 17:11:58.64 ID:gPvV5cn8.net]
おかしいでしょ?declが知りたいのにdecltypeを検索するのわ
そういう方面での分離・解析的思考はプログラミングの役に立つから
もうちょっと柔らか頭になりなさい



121 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 18:44:21.61 ID:xbbraB1s.net]
デクラレーションタイプって読んでたけどデクラレなのか

122 名前:デフォルトの名無しさん [2015/10/27(火) 18:50:44.68 ID:mCp2/GHM.net]
modern C++ design読んでるんですけど
KillPhoenixSingletonのなかで
deleteするんじゃなくてデストラクターを呼ぶ理由がわかりません
deleteしないとメモリーが解放されないと思いませんか?

123 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 19:03:05.06 ID:jhggiZlS.net]
オブジェクトはtheInstanceだべ
寿命が尽きれば勝手にメモリ解放されるでしょう

124 名前:デフォルトの名無しさん [2015/10/27(火) 19:13:06.43 ID:mCp2/GHM.net]
extern void __DestroySingleton();
でメモリー解放されるのは初めの一回だけでしょ
この関数がなにかは分かりませんが
なかでdeleteしているのではないか

125 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 19:32:29.64 ID:jhggiZlS.net]
そのSingletonの唯一のイ

126 名前:ンスタンスはstatic void Create()の中のtheInstanceでしょ? []
[ここ壊れてます]

127 名前:デフォルトの名無しさん [2015/10/27(火) 19:43:58.44 ID:mCp2/GHM.net]
theInstanceのメモリーを解放されたシェルに
プレイスメントニュゥをしたんでしょ
ニュゥしたらdeleteしないとメモリー解放出来ないでしょ

128 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 19:50:45.48 ID:Jiaaez0T.net]
>>121
初版は持ってるけどそれ何ページ目だっけ?

129 名前:デフォルトの名無しさん [2015/10/27(火) 19:52:28.90 ID:mCp2/GHM.net]
納得しました
静的領域に動的に初期化されたメモリーは
開放できるわけないですね
ありがとうございました

130 名前:デフォルトの名無しさん [2015/10/27(火) 19:59:35.12 ID:mCp2/GHM.net]
初版とかあるの?
なんか本に書いてあるコードとlokiライブラリーのと
全然違うからそんな気がしてたけど



131 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 20:35:48.84 ID:utoCV8ti.net]
>__DestroySingleton
こんな名前の関数を作るバカの本を真に受けてはならない

132 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 20:56:58.00 ID:kGQ62i2f.net]
では>>129様渾身の関数名とオススメ書籍をどうぞ

133 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 21:06:03.34 ID:KgZQBpIB.net]
その関数名はダメだろ
というか本の中に出てきた関数名じゃないよな?

134 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 21:06:40.48 ID:utoCV8ti.net]
>>130
destroy_singleton
オヌヌメはそうだな。さっちんのExceptional何とかがいいだろう
あとModern Effective何とか
もちろん日本語版は不可

135 名前:デフォルトの名無しさん mailto:sage [2015/10/27(火) 22:42:38.89 ID:CBXkry86.net]
なんで日本語版だめなん?

136 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 01:16:08.03 ID:j1/zW92X.net]
WindowsでNVIDIA以外使うならANGLE使っとけ

137 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 01:36:06.63 ID:j1/zW92X.net]
スレ間違えたぜ…

138 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 14:44:27.71 ID:KgN4RL86.net]
以前出たじゃんけん判定の話で
タプルをキーにしたマップで判定テーブルを作ってみたら

hoi[{goo,choki}]

で勝ち負けが呼び出せてしまった

これって文法上OKなの?
たまたま環境依存で動いただけ?

ちなみにhoiがmapでgoo、chokiがenum

型推論でキーのタプル型を推定して、
{}の初期化リストで無名タプルを一時的に生成して
Mapのキーに引き渡した
と考えてるんだけど
それが可能になる規格上の記述が見つけられない

いちいちmake_pupleしなくていいのは助かるんだけど

139 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 15:24:21.67 ID:shJPlFF3.net]
ちゃんとコテつけたら答えてやろう

140 名前:デフォルトの名無しさん [2015/10/28(水) 16:33:35.31 ID:3egweU9O.net]
紫を作・・・いや、何でもない



141 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 21:00:36.73 ID:Qhaqod7/.net]
↓の内容が理解できません

make_shared で確保されたメモリ領域は,それを参照する weak_ptr が無くならない限り解放されない
d.hatena.ne.jp/gintenlabo/touch/20130404/1365059185

weak_ptrが最後の最後まで生きてるような場合はメモリは全く解放されないということですか?

142 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 21:25:56.14 ID:en6I5N16.net]
>>139
デストラクターだけ呼んでメモリを解放しない糞な実装を使ってたことを自慢したいんでは?

143 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 21:53:02.65 ID:+VgSqF93.net]
管理領域を別に確保するmake_sharedの方が糞実装と呼ばれる気がするが。

144 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 21:56:23.56 ID:en6I5N16.net]
make_sharedか。勘違いした
make_shared<T>(…)はshared_ptr<T>{new T{…}}
と違って
そういう高速化の反面のデメリットのある特別な関数

145 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 21:59:20.30 ID:TK665Laz.net]
デストラクタはvirtualにしなくてはいけない(戒め)
ってよっ、よく言われるけどさ(唐突)
逆に、finalなクラスなら仮想関数の呼び出しコストを少なくするために
virtualをつけない

146 名前:ラきじゃない? (へらず口) 教えてくれよな〜頼むよ〜(懇願) []
[ここ壊れてます]

147 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 22:02:20.54 ID:en6I5N16.net]
>>143
むしろ「昔はそんなこと言ってる奴が多かったな」
と言われているのが最近の流れだと思うのだが

148 名前:デフォルトの名無しさん [2015/10/28(水) 22:49:04.25 ID:3egweU9O.net]
>>143
当たり前。
コード書いている本人が意図を説明できないvirtualは書いてはならないvirtualだ。

149 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 23:19:02.53 ID:ED1QU3vb.net]
スマートポインタ使っておけば本来必要だったところでも要らなくなったしな

150 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 23:41:51.38 ID:WuGdnON5.net]
今は(本来は「今も昔も」なのかもしれないが)継承を無理に重ねるなと教えられるから、virtualつけるほうが少数。インターフェース継承したいときくらい。
そしてインターフェース継承なら別にデストラクタにvirtualいらない。

俺らが考える程度の次元の実装継承とかクソだよクソ。
継承の本質は動的ポリモフィズムであって、内部データが積み重なる実装継承は大体の場合において異端児。もう一回考え直すべきだ。



151 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 00:10:26.29 ID:LDv0f1Xe.net]
>>147
実装継承なんて普通やらないから後半はどうでもいい。
デストラクタにvirtualいらない例でスマートポインタを使う以外のものをあげてくれ。

152 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 00:14:42.80 ID:RHn1cp1m.net]
実装多重継承普通にやってるが(ミックスイン的に)
これが出来るのがC++の良いところ

153 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 00:20:10.24 ID:97GIdb3t.net]
C++ってインターフェースなくない?
どうやってインターフェース実現するの?
多重継承?
菱型継承問題はどうするの?
デストラクタが肥大化する問題は?
void *から正しくstatic_castできない問題はどうするの?

154 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 00:21:04.84 ID:FU1wYuSd.net]
なんかvirtual継承とかあるらしいっすよ

155 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 00:25:14.36 ID:97GIdb3t.net]
あと、多重継承するとそれぞれのクラスの仮想関数テーブルがメモリに乗るから
インスタンスのサイズが無駄にでかくなるよね。それも無視できないのでは?

156 名前:デフォルトの名無しさん [2015/10/29(木) 00:27:08.85 ID:Xs9VAOmG.net]
>>150
うん、ないよ。
どうやってって、おまえ自分で記述できないの?
おまえの定義でいう「インターフェース」をC++の表現力で作ればいいってだけだぞ。

>>149
同意見。

157 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 05:22:12.94 ID:2sW62WRC.net]
なんでintefaceのための継承で菱形継承になるんですかね?

158 名前:デフォルトの名無しさん [2015/10/29(木) 06:58:08.62 ID:sby5qjeS.net]
あの、ここって学校で出された課題の質問でもいいんですか?

159 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 07:02:59.19 ID:/qvHJgPS.net]
スレタイすら読めない理解出来ないゆとりが居ると聞いて。

160 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 08:06:42.77 ID:97GIdb3t.net]
>>154
interface A { ... }
interface B : A { ... }
class C : A { ... }
class D : C, B { ... }



161 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 08:15:41.08 ID:2pvdQwAq.net]
>>147
なんで「インターフェース継承なら別にデストラクタにvirtualいらない」の?

virtual 関数入りのインターフェースクラスから派生した実装クラスで new して
インターフェースクラスのポインタで delete するから、要るよね?
それとも shared_ptr 必須ってこと?

162 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 08:41:06.52 ID:yVSpRiwh.net]
それに unique_ptr だとダメだからな

163 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 09:03:03.74 ID:riQ9FZZK.net]
親クラスの実装はコピペするつもりか

164 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 11:17:05.61 ID:M5LgoQD5.net]
>>158
するからってなんでそれが当たり前みたいに言ってんの?
intefaceの要件にdelete含めるならデストラクタでもなんでもvirtualにしたらええわ

165 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 12:48:47.00 ID:yVSpRiwh.net]
interface経由でアクセスするのにdeleteだけは別ってのはあまり自然とは思えないだろ。無いとは言わんが。

166 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 15:26:02.34 ID:IDJmDfji.net]
>>157
抽象クラスなら菱形継承しても何の問題も出ないけど
どうして問題だと思ったの?

167 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 17:03:20.53 ID:90AKzuDc.net]
>>140-142
レス遅くなりました、すいません

>>139のブログで分からなかったのはコメントの以下の部分なのですが、

---------------------------------------
struct Object {
std::vector<std::string> vec;
};
のような Object に対しては,shared_ptr からの参照が破棄された時点で~Object() が呼ばれて, vec によって確保されたメモリは解放される
---------------------------------------

vecのメモリが解放されるのは、vectorが内部データをnewによりObjectのヒープとは別のヒープ上に持つからなんですね。

逆に、vectorみたいなコンテナじゃなくて、配列みたいなメンバの場合、
~Object() が呼ばれると破棄はされるもののメモリは解放されないということですね。

自己解決のつもりですが、以上の理解で正しいでしょうか?

168 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 17:33:13.09 ID:RHn1cp1m.net]
>>164
>vecのメモリが解放されるのは、vectorが内部データをnewによりObjectのヒープとは別のヒープ上に持つからなんですね。
そうじゃないよ
std::vectorのデストラクタで開放してるからだよ
配列は直接new[]した配列は勝手には開放されないけど
例えばstd::string ary[100]なら開放されるよ

169 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 17:39:54.84 ID:RHn1cp1m.net]
newと書いたら必ず対応するdeleteが無ければいけない
C++でリソース管理を正しく行うための秘訣はいかにしてアプリレベルでのnewとかopenを減らすかということ

170 名前:デフォルトの名無しさん [2015/10/29(木) 17:46:08.33 ID:VInZxeNW.net]
Windowsのコンソールアプリで
コードページをUTF-8に変更したのちに
printfを使うと正しく出力されるのですが
coutだと文字化けしてしまいます。
codepad.org/Rqaw4VP6

coutでも文字化けしないようにするには
どうすればいいでしょうか?



171 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 17:53:17.46 ID:IDJmDfji.net]
>>165-166
>>164の言っていることはおおむねあっているよ
shared_ptrのすべての参照が無くなった時点でデストラクタが走るので
デストラクタで開放されるものに関しては開放される
しかし、Objectの一部として一緒に確保されたメモリブロックについては
weak_ptrのすべての参照がなくなる時点まで残る
だからnewじゃない配列なんかに関しては開放されずに残る

172 名前:デフォルトの名無しさん [2015/10/29(木) 18:11:24.87 ID:j3RBo1Qz.net]
#include <iostream>
using namespace std;
struct A{
int a=1;
};

int main() {
A b(A c);
return 0;
}
これがコンパイル通るんですけどどういう意味ですか?

173 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 19:04:10.54 ID:90AKzuDc.net]
>>165
すいません、newという言葉を使うのは不適切だったかもしれません
(vectorが内部データを作るときにnewを使ってるのではと想像したからでした)
Objectのデストラクタがメンバvectorを破棄し、その際vectorのデストラクタが呼ばれ、vector内のデータが破棄&メモリ解放されることは理解してます

回答くださった方ありがとうございました

174 名前:デフォルトの名無しさん [2015/10/29(木) 19:18:13.43 ID:j3RBo1Qz.net]
#include <iostream>
using namespace std;
class A{
public:
A(){}
A(A&&){cout <<"move"<<endl;}

};
int main() {
A a{A{}};

return 0;
}
なぜmove constructor がよばれないのですか?

175 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 19:34:34.48 ID:I8hon1X6.net]
規格を見ずにいうと
12.8節の31段落あたりのルールによる

176 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 19:49:45.07 ID:3bhNvGdK.net]
>>141
とりあえずmake_shared使っとけ!みたいなに言う人多いような・・・
weak_ptrの問題の他にもファクトリパターン使えないとかカスタムデリータ指定できないとか欠点あるし・・・

そういやshared_ptrを循環参照に対応させる案ってなかったっけ?C++17から?

177 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 22:24:33.93 ID:R4UWbXLC.net]
>>169
A b(A c);はただの関数プロトタイプ宣言
>>171
規格上コピーとムーブコンストラクタ処理の省略が許されている
g++なら-fno-elide

178 名前:-constructors付きでコンパイル []
[ここ壊れてます]

179 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 22:59:44.31 ID:97GIdb3t.net]
>>163
仮想継承しないとコンパイルエラーになるんだよなぁ (呆れ)
codepad.org/jYRRufRC

180 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:07:18.68 ID:2sW62WRC.net]
>>175
菱形以前の問題なんだがエラーメッセージすら読めないの?(呆れ)



181 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:07:49.65 ID:IDJmDfji.net]
PersonWhoSaysHelloOnly が抽象クラスじゃないから当然じゃね?

182 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:13:55.91 ID:6f48xvzh.net]
菱形継承問題どうするの?って、そもそも必要なけりゃ菱形継承しなきゃいいだけのように思うが。

183 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:18:01.77 ID:RHn1cp1m.net]
そうそう、この手の多重継承ヤバイ論はわざわざへんてこりんな例を持ち出してくるのばかりなんだよな

184 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:23:15.61 ID:R4UWbXLC.net]
菱型継承と近親交配って似てるね(錯乱)

185 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:34:45.02 ID:97GIdb3t.net]
IGreetingの継承にpublicつけ忘れてた
コンパイルエラーになるのは変わらんけど
× class IGreeting : IHelloSaying
○ class IGreeting : public IHelloSaying
>>176,177
IHelloSayingのSayHello()はPersonWhoSaysHelloOnlyで実装してるし
IGreetingのSayBye()はPersonWhoGreetsで実装してるでしょ
必要な関数はすべて実装されてるのに実装されてないと出る、これは菱型継承が起こっているから
Javaではインターフェースが言語でサポートされているからこんなことは起こらない
>>178
すべてのクラスがコントロール下にあるならそうなんだろうな(棒)
実際には、外部のライブラリの中で上の例みたいなことがされてて継承できず
仮想継承で解決しようにもライブラリの中では仮想継承していないから解決できず
仕方ないからライブラリごと書き換えたり、全部自前で1から実装することが多い。
このせいで生産性が著しく低いんだよC++は

186 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:35:27.69 ID:LDv0f1Xe.net]
いついかなる時でも菱形継承

187 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:41:17.91 ID:PeHv4fTr.net]
別に無理して使わなくていいよ

188 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:43:07.91 ID:2sW62WRC.net]
そりゃあJavaのようにしか設計出来ないのなら生産性低いだろうね
君にはJavaがお似合いだよ

189 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:43:39.49 ID:6f48xvzh.net]
>>181
できの悪いライブラリは使うのに苦労するって話か?そりゃそうだろw

190 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:46:47.05 ID:IDJmDfji.net]
>>181
PersonWhoGreetsクラスに

virtual void SayHello(){
  PersonWhoSaysHelloOnly::SayHello();
}

を追加すれば良いだけなんじゃないの?
確かにひと手間かかるけど、レアケースだから別にどうってことはなくない?
どうしてこれだけのことなのに、いちいち全部自前で1から実装しようって話になるの?



191 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:50:44.30 ID:97GIdb3t.net]
>>186
あ、ほんとだ
これは知らんかったわサンクス

192 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 23:53:02.09 ID:2sW62WRC.net]
エラーメッセージ読んでそれに対処しようとしたらすぐ出来ることだと思うけどなぁ?
C++使うと生産性低いのも仕方ないね(棒)

193 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 00:22:38.50 ID:nvHwlse0.net]
>>187
ファッ!?

194 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 00:55:35.54 ID:wkivSnT7.net]
>>161
するのが当たり前とは言わないけど、インターフェースってことは
何かしら virtual 関数持ってるんだからデストラクタを virtual にしても
追加のオーバーヘッドは発生しないわけで、その状況で delete できないなんて
危険で不便になるかもしれない制限を増やす選択はとらないと思う。

それはそれとして、 >>147 は単に「インターフェース継承なら」が書き間違いで、
「インターフェース継承でも別にデストラクタにvirtualいらない」ってことだよね。
それなら(個人の意見として)別におかしくはない。

195 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 01:05:25.58 ID:WdbOFcdR.net]
>>190
そのintefaceがdeleteを要件に含めてないならdeleteする方がおかしい。
渡した方は何故か殺されるわけで、逆に言えばvirtualなデストラクタ持ってたら渡したら殺される(=所有権を渡す)事を期待するからそうでないならvirtualなデストラクタは定義しない方がいい。
同じintefaceでdeleteするところとしない所が混在してるなら設計腐ってる

196 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 01:23:44.72 ID:f7YhtMHw.net]
func(hoge(), huga(), buzz());
ってhoge huga buzzの評価順序ってコンパイラ依存だよね?
これをコンパイラによらず必ず左から評価するために
Hage &&hage = hoge();
Hugo &&hugo = hugo()
Fizz &&fizz = buzz();
func(hage, hugo, fizz);
みたいに外に出すのって実行速度に悪影響あったりする?

197 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 02:06:41.00 ID:wkivSnT7.net]
>>191
void do_something(std::ostream& o);
↑この関数の呼び出しで所有権が移動することが期待されるってこと?

そんなわけないよね?・・・ちょっと何言ってるのかわからないよ。

198 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 02:29:47.25 ID:8kNsJEt3.net]
>>192
そりゃ最適化の余地のために規定してないんだから潜在的には悪影響はあるだろう

ちなみに規格上はコンパイラ依存(実装定義・未規定)ではなく無順序であって
同じ関数の呼び出しが複数箇所にあるときにそれぞれで引数の評価順が違っても許される

199 名前:デフォルトの名無しさん [2015/10/30(金) 09:19:22.31 ID:d4FfMDoX.net]
>>194
未規定と無順序ってどう違うんだ?

200 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 09:26:53.71 ID:qHHhBlGv.net]
>>192
心配するなって、外に出したって実行順なんてコンパイラ依存だ

最適化0にしなければな



201 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 09:52:13.78 ID:MfB76mRu.net]
>>196
しれっと嘘付くなよ
CPU内部のOut of Orderとは話が違うんだぞ

202 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 10:43:05.97 ID:Ew+sxEe4.net]
>>195
C++規格での『未規定』は要するに
「あらかじめ用意されたAかBかCのいずれかの動作でなければならない。
ただしどの動作にするかは処理系の実装側で決める。
その決定は同じ処理系(同じコンパイラ・同じバージョン・同じコンパイルオプション)なら
一貫して同じでなければならない。」
って感じのもの
最終的には規定されるが規格の段階では『(未だ)規定されていない』状態

順序関係における『無順序』とは順序関係を持た(せ)ないという規定
内容の説明は省くが
無順序のところに順序関係を仮定・推測してそれを前提としたコードは
意図したとおりには動かない可能性があるというもの

203 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:08:10.84 ID:qHHhBlGv.net]
>>197
最適化かけたままステップ実行したことないのか?

204 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:09:08.09 ID:wkivSnT7.net]
>>198
> その決定は同じ処理系(同じコンパイラ・同じバージョン・同じコンパイルオプション)なら
> 一貫して同じでなければならない。」
その説明、「実装定義」 "implementation defined" の説明に見えるんだけど。
「未規定」は "unspecified" だよね?
unspecified なら「一貫して同じ」なんて制約は無いよ。実行ごとに違ったっていい。

205 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:11:40.02 ID:8EL3LTBc.net]
>>199
あんたの言ってる事が本当なら順序に依存するプログラムを書く手段がない事になる

206 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:21:15.28 ID:fK4ls09n.net]
>>196 wwww
嘘つき

207 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:23:18.63 ID:qHHhBlGv.net]
>>201
好きにしろ、おれは一向に困らん。

居るんだよな、レビューの時に
デバッグプリント外すと挙動がおかしくなるのでデバッグプリント外せません
とか恥ずかしげもなく言う奴が

208 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:35:36.18 ID:fK4ls09n.net]
恥の上塗り>>196wwww

209 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:37:21.12 ID:IeVTHDcT.net]
まったく
まぁ副作用が無いなら順番関係ないだろうけどね

210 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 11:41:40.99 ID:G+DB55N3.net]
厚顔無知って怖いな・・・

少なくとも>>203はプログラマじゃないだろ
こんなデタラメ平気で言えるのは



211 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 12:44:46.27 ID:FKezdCzi.net]
副作用がなければ(ないことがをコンパイラが確認できれば)入れ替えはあるんじゃなかったっけ?

212 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:03:05.02 ID:fK4ls09n.net]
元の流れ的に
今は副作用が無い場合の話はしていない
副作用があって順番を固定したいから、どうのこうの、っていう流れ

213 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:07:58.90 ID:lB31ouJc.net]
そのスレッドから見える結果としての順序が変わらなければ入れ替わることもある
メモリバリアとかmutexを適切に入れてないと他のスレッドから見たときに有り得ない結果が見えたりする


例えば
int a=0;
int b=0;
void c()//スレッド1で実行
{
a=3;
b=5;
}
void c()//スレッド2で実行
{
if(b==5)assert(a==3);//bに5が代入されてたらaはそのまえに3が代入されてるはずだけど?
}

と書いた時にassertに引っかかることはありえる

214 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:12:15.30 ID:IeVTHDcT.net]
pthread使えよ

215 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:16:02.00 ID:lB31ouJc.net]
>>210
何の話?

216 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:17:23.11 ID:fK4ls09n.net]
>>209その話が>>196と何の関係が有る?

217 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:18:15.86 ID:lB31ouJc.net]
>>212
無いよ
副作用が無ければ入れ替わることがあるって間違った知識の人が居たから書いただけ

218 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:21:16.76 ID:IeVTHDcT.net]
何言ってんだこいつ

219 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:33:14.15 ID:fK4ls09n.net]
元々の話は>>192だからね
副作用のある関数の実行順を固定したいとき、どうするかって言う
関数の引数で呼び出すと、順番がどうなるかは不定になる
明示的に複数文に分けて呼び出せば順番は保障される
たたそれだけ
後者の場合で、たとえインライン展開されてコンパイラが凄い最適化したとしても、
得られる結果が同じであれば、今回の事例ではOKってことになる
途中の過程がどうであれ、結果が同じなのだからな
関数の引数で呼び出すと、途中経過もそうだが、
そもそもから結果すら同じにならないから、問題だというわけさ
結果が違うわけだから最適化以前の問題、
なぜなら、最適化は結果が同じである範囲で最適化するのが当たり前だから、
根本的に結果が不定になるのは、最適化レベルの話ではないし、その話をしているわけ

220 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:34:25.76 ID:fK4ls09n.net]
つまり、最適化で順番が入れ替わる風な事を言っている人は的外れもいいところ
そういう時限の話をしているわけではない



221 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:43:37.44 ID:lB31ouJc.net]
>>214
お前が何言ってんだよ

>>196 に関係ある話をすると
a()
b()
結果はa()が呼ばれてからb()が呼ばれるのと同じになる。
そのスレッドから見える結果が同じであればコンパイラはその中でどう入れ替えてもいい。
でも結果が同じであることは保証されてるんだからプログラマはa(),b()の順序で呼ばれるものとして扱っていい
上に書いたけど前提としてすべて単一のスレッドから見えるという条件付き

222 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:47:08.35 ID:fK4ls09n.net]
>>192 はC++の仕様レベルで順番が不定であるような、根本的なことを問題にしている
環境によって計算結果そのものが異なってしまう、そういうお話
一方で最適化は順番が入れ替わっても、結果が変わらない範囲で入れ替わるのが普通
ここに大きな差が有る
順番が入れ替わって結果も変わってしまう話と
順番が入れ替わっても結果は変わらない話を
同列に語るのはおかしいわけ

223 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 13:54:19.08 ID:4B/tV0Oy.net]
>>192の問題を全く理解していない>>196にツッコミをいれたけど
そのツッコミは>>192とは関連ないだけだよ
>>192>>194で解決している

224 名前:デフォルトの名無しさん [2015/10/30(金) 14:28:57.55 ID:d4FfMDoX.net]
>>198
「無順序」を規定している規格票の文書番号は?
ちなJIS X3014:20

225 名前:03規格票の文中に "無順序" なる文字列は含まれていないが。

「未規定」は、処理系に依存する特性のうち、文書を用意する必要がない事項だぞ。選択肢の有無は要件に含まれない。

1.3.13 未規定の動作(unspecified behavior) 適格プログラムと正しいデータとの組合せに対する動作であって,処理系に依存する動作。処理系は,どんな動作が生じるかについて文書を用意する必要はない。
参考 多くの場合,どんな動作が生じうるかについて,この規格の中で示唆する。

1.3.5 処理系定義の動作(implementation-defined behavior) 適格プログラムの構文単位と正しいデータとの組合せに対する,処理系に依存した動作であって,それぞれの処理系が文書で説明を用意しておかなければならない動作。
[]
[ここ壊れてます]

226 名前:デフォルトの名無しさん [2015/10/30(金) 14:47:05.92 ID:AF8Cyymv.net]
effective modern c++読んでるんだが完全転送の辺りが難しすぎる
読んでて理解はできるけどいざというときに自分で正しく書ける気がしない

この辺はどういう動機で仕様が決定されてきたの?
こんな感じ?

ポインタ渡しを排除したい、Cにはない参照の概念を導入(C++98?)

それだと型推論でオブジェクトを渡してコンテナに詰める時に最適化の不都合があった

ムーブセマンティクスや完全転送という概念を導入してなんとか対処しようとした

という流れなんですか?

227 名前:デフォルトの名無しさん [2015/10/30(金) 15:01:12.65 ID:AF8Cyymv.net]
c++の素人的には
ポインタを表舞台から排除しようとして
コピーのコストを減らすためにmoveや
ユニバーサル参照やテンプレートに対応できるようにforwardを用意したけど
そうやって辻褄を合わせていったら結果として複雑怪奇な物になってしまって
これならポインタ使って書いたほうが人間に分かりやすいんじゃ…という風に見えるんだけど
プロからすると違うんでしょうか?

228 名前:デフォルトの名無しさん [2015/10/30(金) 15:09:22.99 ID:AF8Cyymv.net]
連レスすみません

C++11はオブジェクトを扱うあらゆる所で「どのコンストラクタが呼ばれるか」ってのを意識しないとまともなコードがかけなくて
しかしそのコンストラクタってのがデフォで暗黙的に6種類も生成される!(困ったことにとある条件で生成されない場合もある)
その6種類のコンストラクタに加えてユニバーサル参照を取るコンストラクタなんかがあると
それらのうちどれが呼ばれるか、その優先度を意識しないといけない
しかもその優先度ってのが、effective modern C++を読む限り、大抵の人間の直観に反している

これ無理ゲーじゃね…?という気がしてるんですがどうなんですか
頭のいい人の仕事とは思えない

229 名前:デフォルトの名無しさん [2015/10/30(金) 15:15:15.07 ID:WD6nWn6o.net]
新機能は便利、簡単にするために追加して行ってるわけで、使いこなせないならムリして全機能を駆使してプログラミングする必要がない。
使いこなせる範囲でプログラミングすればいい。

230 名前:デフォルトの名無しさん [2015/10/30(金) 15:15:40.79 ID:AF8Cyymv.net]
6種じゃなくて5種ですねスマソ



231 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 16:15:20.98 ID:Q/lHi+8Q.net]
>>215
>得られる結果が同じであれば、今回の事例ではOKってことになる

つまりあなたは>>192から
hoge(),hugo(),buzz()の実行順依存性が、
シグナルや割り込みやハードウェアアクセスや、別のコンパイル単位にある副作用のあるライブラリの使用や、別スレッドとの通信など
に起因しないことを読み取って

コンパイラにも同じことができるとおっしゃるんですね?

だったら問題ないね


>>192の本来の質問趣旨からはだいぶずれちゃったね

232 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 16:37:58.27 ID:fK4ls09n.net]
>>226
誰もそんなこといってなくね?

233 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 17:37:38.51 ID:b1AWcwGp.net]
>>AF8Cyymv
C++ってオブジェクト指向型や手続き型とかに囚われない
汎用性の高い仕様が売りの言語だと解釈している
それらを取捨選択

234 名前:オてもええんよ?ってスタンスじゃないの

必要不必要に関わらずデフォルトな動作をしないコンストラクタは
明示的に書けばいいじゃない
その辺りは言語仕様ってよりも設計の話じゃね?
[]
[ここ壊れてます]

235 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 18:12:02.26 ID:tM2hXE1V.net]
今北
またQが暴れてんの?

236 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 18:55:47.83 ID:MOhQGiL+.net]
>>223
「どのコンストラクタが呼ばれるか?」ってのは確かに難しいけど、呼ばれる方より呼ぶ方に注目するのもいいかもよ。
つまり何が左辺値になり、何が右辺値になるか、ってことを完璧に押さえる。

237 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 19:27:26.88 ID:FKezdCzi.net]
>>213
> 副作用が無ければ入れ替わることがあるって間違った知識



238 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 20:12:58.71 ID:l0WThWA1.net]
ひょっとして「副作用が無くても(CPUのOO実行とかキャッシュで)入れ替わることがあるので副作用が無ければOKというのは誤り」と言いたかったのか?

239 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 20:20:10.57 ID:FKezdCzi.net]
>>232
いやいや、規格として入れ替えちゃダメなんだっけ?
って言う疑問
もちろん (副作用がないから) 結果が同じであると言う前提で

240 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 20:36:46.36 ID:lB31ouJc.net]
>>223
なぜどのコンストラクタが呼ばれるかを気にしないといけないと思ったのか



241 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:16:04.39 ID:Pds69/6e.net]
A{ f() };
この時A( p & )なのかA( p && )なのか分からずにマトモなコードが書けるはず無かろう

242 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:19:58.57 ID:lB31ouJc.net]
>>235
なんで?
どっちだとしても、どっちでもないにしてもAがf()の返り値で初期化されるのは変わらんだろ?

243 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:24:11.00 ID:lB31ouJc.net]
>>231
副作用があっても入れ替わることはある。
ただ、お前の思っている副作用と俺の思っている副作用が違う可能性はある
俺の思っている副作用はそれぞれの関数の副作用、関数が出てきて副作用といったら普通こっちを指すと思う。

244 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:34:29.51 ID:S9hryATs.net]
>>213
> 副作用が無ければ入れ替わることがあるって間違った知識

>>237
> 副作用があっても入れ替わることはある。

バカなのか、日本語が壊滅的におかしいのかはっきりしてくれ

245 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:40:39.72 ID:lB31ouJc.net]
>>238
副作用の有無は関係ないって事だよ
解らない?

246 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:51:10.96 ID:dtOKOnuy.net]
その前に入れ替わりの話が
コンパイラーの出力するコードの話なのか
実際に実行されるコードの話なのか
入れ替わってないけど入れ替わったように観測される話なのか
はっきりさせようぜ

247 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 22:59:04.67 ID:lB31ouJc.net]
>>240
> コンパイラーの出力するコードの話なのか
> 実際に実行されるコードの話なのか
どちらも入れ替わることはある

> 入れ替わってないけど入れ替わったように観測される話なのか
それを実行しているスレッドからは入れ替わってないように観測される
その他のスレッドから観測したときはメモリバリアやmutexなどが入ってないと未定義
デバッガは後者だからステップ実行してても色々な所に飛んでるように見えたりする。結果は変わらないように入れ替わってるけどね

はっきりしてる

248 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:02:24.17 ID:S9hryATs.net]
>>239
ますますわからん

>>213
> 入れ替わることがあるって間違った知識
⇒ 入れ替わりはない

>>237
> 入れ替わることはある

249 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:03:56.35 ID:9G31gAG0.net]
副作用あってもコンパイラーが順序入れ替えるってどんな場合だ?

>>242
>ますますわからん
そろそろ理解しろよ

250 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:05:09.65 ID:Z2IjK/Mc.net]
相手への罵倒が先行してまともなやりとりにならないのはこのスレではよくあること



251 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:07:34.90 ID:lB31ouJc.net]
>>242
「副作用がなければ」を何処にやったん?
大丈夫?
if文とか書ける?if文あっても無視してコード読むタイプ?

252 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:18:35.20 ID:lB31ouJc.net]
>>243
メンバ変数に値を代入することも副作用て言うからね
詳しくはググってね

253 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:23:20.63 ID:9G31gAG0.net]
>>246
メンバー変数に値を代入している関数呼び出しが入れ替わったら困るだろ
何を言っているんだおまいは

254 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:27:47.12 ID:9G31gAG0.net]
しまったQを相手にしてしまった
もう寝る

255 名前:デフォルトの名無しさん mailto:sage [2015/10/30(金) 23:29:52.59 ID:lB31ouJc.net]
>>247
だからプログラマーが困らない(結果が変わらない)範囲で入れ替わることはあるんだって言ってるじゃない
コンパイラの最適化をなめたらいかんよ

256 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 01:02:53.40 ID:XKJ4olNv.net]
>>231
すっげー頭のいいコンパイラだよな
Qより遥かに良くね?

257 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 01:08:05.16 ID:/0EnDxTB.net]
杞憂に付き合うこと50レス 今日も釣果は上々なようだな

258 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 02:17:43.79 ID:xh8OJ8ET.net]
コンパイラの使命はソースコードに書かれたアルゴリズムと等価なオブジェクトコードを生成すること
つまりアルゴリズムの等価性が証明できる範囲内なら何だってする
外部リンケージの関数呼び出し順序を入れ替えないのは、
外部リンケージの関数が副作用を持たないことの証明が高コスト過ぎて割に合わないからやらないだけにすぎない
外部リンケージの関数呼び出し順序は未来永劫変わることはないのだと安心しきっていると
ある日マルチスレッド状況下で反乱されて人類は死ぬ
volatileの手綱は決して緩めてはならぬ

259 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 02:31:22.83 ID:T2ZXoWbN.net]
おやっさん、実行順序入れ替えにvolatileは関係ないっすよ

260 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 02:35:08.98 ID:vcVH8w6b.net]
妄想する暇あるんだったら仕様調べればいいのにね。



261 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 02:43:19.73 ID:xh8OJ8ET.net]
>>253
int a = foo(x);
int b = bar(y);
int c = baz(a);
という呼び出しはbar()とbaz()の呼び出し順序が変わり得るが
(今のコンパイラがやらないのは>>252に書いたとおりだが、bar()とbaz()の間に順序依存の副作用が無いなら入れ替えてもアルゴリズムの等価性を変えない)、
int a = foo(x);
volatile int b = bar(y);
volatile int c = baz(a);
ならbへの代入とcへの代入の入れ替えは許されないからbar()とbaz()の呼び出しの入れ替わりも無くなる

>>254
volatileの仕様を正しく考えたことが無い人

262 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 02:52:53.21 ID:xh8OJ8ET.net]
つなみにコンパイラはアルゴリズムと言う言葉を決定論的な意味にしか捉えないから
コンパイラが思い描くアルゴリズムの等価性は
マルチスレッド状況下でしばしば崩れてしまう
プログラマを巻き添になる

マルチコア状況でOoOが絡むとさらに最悪で、volatileでも力不足でメモリバリアを明示的にする必要がしばしばある
VCなら2005以降のバージョンはマイクロソフトが良心的に対応してくれているから気づいていない人も多いが
人類は気を抜くとコンパイラの最適化に滅ぼされる…!

263 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 03:01:46.39 ID:T2ZXoWbN.net]
両方optimized outされりゃ最適化はかからなくて当然でしょうけど
別にメモリバリアが作られるわけじゃないですよ
だから別に保証されてません

264 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 03:04:19.63 ID:xh8OJ8ET.net]
>>257
>別にメモリバリアが作られるわけじゃないですよ
いやそれが!
ttp://yamasa.hatenablog.jp/entry/20090720/1248089123

265 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 03:04:28.99 ID:T2ZXoWbN.net]
されたらー>されなきゃ

266 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 03:13:34.56 ID:T2ZXoWbN.net]
>>258
何が言いたいのかわかりません

267 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 03:20:44.82 ID:T2ZXoWbN.net]
あー、VCには有りますよって言いたかったのね
記事内容には保証がないように書いてるからてっきりそう言う意味かと

268 名前:デフォルトの名無しさん [2015/10/31(土) 05:22:27.29 ID:l9+Xbb2B.net]
#include <iostream>
using namespace std;
class B{
protected:
auto f(){return 1;}
};

struct D:public B{
struct E{
auto g(){
B::f();
}

};
E e;
};
int main() {
D{}.e.g();
return 0;
}
}
このコードでどうやってEのなかでfの定義をstaticにせずfをよぶことができますか?

269 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 06:40:37.59 ID:CV4w2C3P.net]
QはJavaと勘違いしてるのか、炎上学習法なのか
struct E {auto g();};
struct B {auto f();};
EのインスタンスはB無しでも存在しうるんだから
E::gからB::fを呼ぶことなど不可能

270 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 06:44:37.36 ID:sWlimv2S.net]
Qって何



271 名前: []
[ここ壊れてます]

272 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 06:53:21.10 ID:2URj0/y9.net]
>>264
2ちゃんねらーのこと
俺もお前もQ

273 名前:デフォルトの名無しさん [2015/10/31(土) 09:14:04.95 ID:l9+Xbb2B.net]
質問する人がQで
答える人がAだと思った

274 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 09:20:19.61 ID:uu+i9WLB.net]
Qが何を指してるのか知らんけど、それを使う人は知識も知識欲も全くない感じがする

275 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 10:07:08.61 ID:VXrj8Wc8.net]
>>245
> 「副作用がなければ」を何処にやったん?

>>239
> 副作用の有無は関係ないって事だよ

> 大丈夫?
> if文とか書ける?if文あっても無視してコード読むタイプ?

お前がな〜 w

276 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 10:56:35.69 ID:6GUa9Xkk.net]
>>268
落ち着けよ
Q(=267)の思考はこうだ

「副作用が無ければ入れ替わることがある」

「そんなことはない。副作用の有無に関わらず入れ替わる」

>>213

277 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 11:27:11.89 ID:VXrj8Wc8.net]
>>269
それ矛盾したこと言ってることには気づいてるよね?

278 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 11:34:50.45 ID:CV4w2C3P.net]
>>270
落ち着けよ
Q(=267)の思考はこうだ

「副作用が無ければ入れ替わることがある」

「そんなことはない。副作用の有無に関わらず入れ替わる」

副作用が無ければ入れ替わることがあるって間違った(因果関係の)知識の人が居た

技術文章としては誤りだが日常会話では使われる用法

279 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 11:34:59.76 ID:sWlimv2S.net]
副作用が無ければ入れ替わることがある という間違った知識
って書いてあるだろ
日本語堪能ならどう矛盾してるのか説明してみなよ

280 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 11:54:29.49 ID:sWlimv2S.net]
> 副作用が無ければ入れ替わることがある は間違い
> 副作用があっても入れ替わることはある。
つまり副作用の有無は入れ替わることに関係ない
というのが >>239

ID:VXrj8Wc8 はそれを副作用の有無は関係ないってのをなぜか前の文章自体の訂正として適用して

入れ替わることがあるは間違い
入れ替わることがある。

の二つの矛盾した文と思っちゃったのか。
うん。この人と会話出来る気がしない



281 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 11:56:03.29 ID:VXrj8Wc8.net]
>>272
副作用の有無と入替の有無で表作って確認してみ

282 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 11:58:53.07 ID:VXrj8Wc8.net]
>>273
アホすぎワロタ w

283 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 12:21:41.13 ID:uu+i9WLB.net]
お前こそ
> 副作用が無ければ入れ替わることがあるは間違い
> 副作用があっても入れ替わることはある。
のどっちが誤りで矛盾してることになるのか○×つけてみなよ。

284 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 12:37:52.04 ID:uu+i9WLB.net]
人を対象としたときに
●パンを食べた事がある
●罪を犯す
という二つの無関係な事柄から
パンを食べたことがあれば罪を犯す
が真だとする人の思考方法か?

285 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 12:42:48.53 ID:GVk0olpQ.net]
地球規模で見れば
●パンすら食べられない人は罪を犯すしかなくなる
が真

286 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 12:49:42.50 ID:vcVH8w6b.net]
入れ替わることがあるっていってるやつはこれの結果が不定だと思ってるわけ?
int x;
f() { x = 1; }
g() { x = 2; }
main() { f(); g(); printf("%d\n", x); }

287 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 12:53:04.31 ID:l9+Xbb2B.net]
誰しも罪を犯して生きているものです
自分は無罪だなんていっているひとこそ
偽善者なんですよ

288 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:00:16.33 ID:CV4w2C3P.net]
>>279
「副作用が有っても入れ替わる」って言われたらそう疑問に思うよな
で、聞いてみると>>252で『等価性が証明できる範囲内』
と話をすり替えるんだよ

Q:この人と会話出来る気がしない
Q以外:この人と会話出来る気がしない

289 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:04:58.84 ID:uu+i9WLB.net]
>>279
その結論はとっくに出てると思ってたけどそこに戻るの?
実行結果は言うまでもなく2が出力される。決まってる。
コンパイラが吐くコードは
f();とg();の実行順どころか実行せず固定の2を出力するコードに最適化される可能性すらある

290 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:08:18.56 ID:vcVH8w6b.net]
例を出しただけで、こういう場合に入れ替わると思ってるんかって聞いてんだよ
副作用がない場合は入れ替わることもあるが、それが問題になることはないわけ
それをデバッグコードがーと言われて文句垂れてるやつは原



291 名前:因を理解してないんだろ []
[ここ壊れてます]

292 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:15:52.26 ID:/0EnDxTB.net]
特定IDの無意味な小分け連レスで埋まるスレ

293 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:18:29.17 ID:u/DkutH4.net]
もちろん入れ替わります。
xはmainの最初で上書きされており
mainで始まる実行に於いて他のどこからもxは変更されていないためprintfに2を渡しさえすれば、
その前にg()→f()と実行されることがあります。

294 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:19:37.94 ID:vcVH8w6b.net]
なるほどな
まぁこういうレベルの話はもういいや

295 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 13:48:04.22 ID:IVNTd+mA.net]
元々の話は副作用が有って順序にも意味が有り、正しい順番で実行しないと結果が変わる場合の
関数呼び出しの順番の、規格レベルでの保証の問題なわけだが
コンパイラの最適化で消えたり入れ替わったりするようなのは始めから問題にしていない
最適化は結果が変わらない範囲で行われるのが普通だから、結果が変わらない以上は
それほど気にするほどの事でもない
元の話は、C++の仕様で順番が決まってなくて、環境によって結果すら変わってしまう話

296 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 14:00:31.50 ID:CV4w2C3P.net]
Qと議論をしようと思ってしまった浅はかさを悔やめ

297 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 14:37:54.35 ID:nW7p773V.net]
この話、長い?

298 名前:デフォルトの名無しさん [2015/10/31(土) 16:34:47.15 ID:fU4Oqm0B.net]
>>262
こうですね
D* pD = (D*)((reinterpret_cast<const volatile char*>(this)) - offsetof(D, D::e));
pD->f();

299 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 18:38:49.04 ID:xh8OJ8ET.net]
>>287
>C++の仕様で順番が決まってなくて、環境によって結果すら変わってしまう話
int a = 1;
printf("%d, %d, %d, %d\n", ++a, ++a, ++a, ++a);
とか
int x = (++a) * (--a);
みたいなやつぐらいしか思いつかん…

300 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 18:42:00.24 ID:xh8OJ8ET.net]
ていうか、
>最適化は結果が変わらない範囲で行われるのが普通だから、
>>291式の言語仕様で順序不定とされている呼び出し順に起因する場合を除き、
シングルスレッド状況で最適化前後で結果が変わる最適化はバグ



301 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 20:03:14.61 ID:A2a2AvME.net]
>最適化は結果が変わらない範囲で行われるのが普通だから、
普通ってなんだよ。規格書に書かれてる用語で発言するように。

302 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 20:32:05.28 ID:aEG6VWTj.net]
「発言」ってなんだよ。規格に書かれている用語で書けよ

303 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 21:59:37.38 ID:xh8OJ8ET.net]
指摘される前に言うが>>255の2番目のコードでもbar()→baz()の呼び出し順が書いたとおりになることはちょう賢いコンパイラの前では保証されない
>>255で例示すべきコウドは次のやつだった;
int g_a; // g_aは別スレッドから書き換えられるグローバル変数
void foo(int y) {
for (;;) {
 foo(y);
 int x = g_a;
if (x != 0) bar(x) else baz(x);
}
これは、foo()の中身を理解し切るほどには賢くないコンパイラなら安全のためfoo()の呼び出し位置を動かさないから動くが、
ちょう賢いコンパイラがfoo(y)をループ外に出しても問題ない程度の副作用しかないと見切った瞬間
int x=g_a;もループ外に出せるじゃん?!となって別スレッドからのg_aの書き換えに反応しなくなる
g_aにはvolatileが無いとそうなる

304 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 22:03:54.48 ID:xh8OJ8ET.net]
スマンfor(;;)ループ内のfoo()はhoge()に読み替えてホスイ…orz

305 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 22:04:04.44 ID:TuS0NuwD.net]
ちょう賢い

306 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 22:08:17.18 ID:IVNTd+mA.net]
そんで、そういう最適化で順番入れ替わるかも的なのはどうでもよくない?
元々は>>192の規格書レベルで順番が未定義なものについての話だろ

307 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 23:00:24.11 ID:uu+i9WLB.net]
別に今更元々の話だけにこだわらなくてよくない?それ自体はすぐ解決してるんだし
>>196 みたいな自信満々に言ってる間違いとか
>>207 みたいな微妙な間違いとか、ほっといたら害になるから掘り下げたわけで

308 名前:デフォルトの名無しさん mailto:sage [2015/10/31(土) 23:40:05.67 ID:IVNTd+mA.net]
害にならないから掘り下げなくて良いよ
普通に排他処理が出来ていれさえすれば
コンパイラの最適化で順番が入れ替わろうが
アウトオブオーダーだろうがCPUキャッシュだろうか
全て問題ないから

309 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 00:03:20.13 ID:eOjFevzb.net]
>>300
お前196か207?
そうじゃなかったら他人の事よくわかるね

310 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 00:12:43.03 ID:a/KTrDXN.net]
本人じゃなくても考えれば分る事
ある機能上纏まった扱いになるメモリ領域
有体に言えば排他処理される単位のメモリ領域
それを複数のスレッドから同時にアクセスするから色々な問題が出てくる
しかし、先にも書いたが、排他処理されるわけだから
実際には複数のスレッドから同時にアクセスされることはない
だから問題は起こらない
もし起こるとすれば排他処理を忘れてバグってるとき



311 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 00:20:37.22 ID:eOjFevzb.net]
>>302
自分で掘り下げてるじゃん?

312 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 00:23:20.47 ID:a/KTrDXN.net]
問題は起こらない、これ以上話し合う必要は無い

313 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 00:53:29.46 ID:lAqYINyq.net]
>>300
排他制御で守れるのはCPUのアウトオブオーダー実行&キャッシュだけだ
コンパイラの順序入れ替えは防げないぞ

314 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 01:21:38.45 ID:v/vxYa9c.net]
最適化の話題は誤解と罠が蔓延する混沌(ケイオス)ェ、
やっぱ人類はちょう進化したコンパイラの最適化に滅ぼされる運命なんや…!

315 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 01:22:23.36 ID:IhLDgcVT.net]
クラステンプレート内でのfriend指定についての質問ですが
template <class T>
class X {
public:
friend T;
friend T f();
};
後者のフリー関数 f へのfriend指定ではコンパイル時に警告が出ます。一般的には
template <class U> friend U f();
と別のテンプレートパラメータを使うらしいですが、これだと f をTに制限できないんじゃないでしょうか?

316 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 06:46:37.27 ID:83j3eZbo.net]
>>307
気のせいじゃね?

317 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 08:48:50.66 ID:Wfult68o.net]
>>299
> >>207 みたいな微妙な間違い

言いきるなら規格のどこに書いてるのか教えてくれ

318 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 08:53:28.28 ID:j/MV/fW7.net]
>>309
ちゃんと糞コテ付けろ
付けないんだったら去れ
もはやお前は荒らしに近い

319 名前:KUSO KOTE mailto:sage [2015/11/01(日) 09:20:28.47 ID:qqj1vZuH.net]
>>299
> >>207 みたいな微妙な間違い

言いきるなら規格のどこに書いてるのか教えてくれ

320 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 11:29:25.08 ID:OJFcI0aa.net]
>>310
答えられないなら黙っとけよ
ウザイだけだよ



321 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 11:51:54.14 ID:a/KTrDXN.net]
>>305
いいや、守れる
例えばWindowsだと排他制御はEnterCriticalsectionで行うことが多いだろう
EnterCriticalsectionの例で考えると
EnterCriticalsection( &a ); //A
EnterCriticalsection( &b ); //B
こういう呼び出しがあって、AとBの呼び出し順がコンパイラの最適化で入れ替わる事はありえるか?
そんなことしたら即デッドロック、そんなおばかなコンパイラはありえない
他にも
EnterCriticalsection( &a ); //A
b=1; //B
こういうコードがあったとして、AとBが入れ替わる事はありえるか?
そんなことしたらBのコードが保護されなくなる、そんな最適化は常識的にありえないだろう

つまり、排他制御で囲まれている部分を飛び越えてのコードの入れ替えは起こるわけがないし、
排他制御の中のコードは一つのスレッドからしかアクセスされないので、単に排他制御にだけ気を使っとけば良い

322 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 11:55:38.29 ID:a/KTrDXN.net]
排他制御だけ適切にしとけば
最適化によるコードの入れ替えやらアウトオブオーダーやらCPUキャッシュやらの
問題はすべて解決するし、そういう風にCPUもコンパイラも作って有るので
とにかく排他制御だけしっかりやっとけってこった
それ以上の議論は必要ない

323 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:10:45.61 ID:a/KTrDXN.net]
コンパイラの最適化でコードの入れ替えが〜で問題になっていたのは
スレッドAで何か変数を読み書きをしていて
スレッドBからそれを読んだら変数の書き換えのタイミングが意図しないものになっていた
というものであるが、
言うまでもないが、複数のスレッドから同じ領域を読み書きしている状況は排他制御が壊れてバグっている
例外的にノンブロッキングなキューなどで意図的にそういうことをすることもあるだろうが、通常は狂った状態
バグった時の動作について議論しても意味がない、そんな暇があったらしっかり排他制御しろ
排他制御さえしておけば問題ないし、実際、世の中のプログラムはそうすることで
コンパイラの最適化でのコードの入れ替えなぞ気にする事もなく普通に動いているし
そうなるようにコンパイラもCPUもちゃ〜んと作ってある
議論の無駄

324 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:11:41.22 ID:83j3eZbo.net]
入れ替わったら俺のコードが困る
→ゆえに俺のコンパイラーは入れ替えない

凄い理屈です

325 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:13:20.76 ID:83j3eZbo.net]
ちなみにコンパイラーは何を見て入れ替えてはいけないと判断するんだ?
判断材料が何もないだろ?

326 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:17:56.33 ID:a/KTrDXN.net]
お前もう議論する気もなくなるぐらいバカだな
コンパイラは、入れ替えてよいかの判断材料が何もなければ、ただ単に入れ替えない
あたりまえ

327 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:19:07.01 ID:I6OT07I5.net]
>>317
だからなるべくconstとかつけましょう的な話なのでは

328 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:20:24.59 ID:a/KTrDXN.net]
constなんかキャストしたら外せるし、コンパイラはそんなことを最適化の判断材料にはしない
ここは釣堀かよ

329 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:21:12.99 ID:kFpSN8VR.net]
コンパイラに関数の中身が見えて、依存性が分かって、入れ替えても問題ない場合だけ入れ替えが許されるんだろ
EnterCriticalsectionみたいなのはコンパイラには中身が分からないからね
コンパイラがどこまで分かるかはその処理系による
ソース内の関数か外部ソースの関数かでも変わりうる

330 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:22:43.07 ID:I6OT07I5.net]
>>320
少なくともgccはconstで判断してる箇所あるよ
そーすみてみそ



331 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:23:34.31 ID:a/KTrDXN.net]
const int value = 1;
みたいなのは確かに最適化に使われるconstかもね

332 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:24:02.37 ID:83j3eZbo.net]
直近のコードが排他制御コードを超えて移動すると勘違いした
外部リンケージの関数呼び出しだから二つは入れ替わらないな
>>318の言うとおりだ

333 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:36:48.31 ID:QtkQ0Wg4.net]
素人はインテルのx86系CPUだけ使っとけ
そうすりゃ後はvolatileだけでOK

334 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:43:17.09 ID:v/vxYa9c.net]
>>314
>Windowsだと排他制御はEnterCriticalsection
これはスゲー安パイではあるがライトキューとリードキューの「両方が」空になるまで待たされるので
数百(運悪くキャッシュのrefillが併発したら数千)クロックサイクルレベルの待ちが生じる
という具合で
せっかくのアウトオブオーダー実行がご破算になる、
ご破算になるのだ…!

335 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 12:53:36.23 ID:eOjFevzb.net]
>>325
それはx86向けの頭にVがつく特定のコンパイラの中だけの話


ttp://d.hatena.ne.jp/Cryolite/touch/20101228#20101228f4
この記事とその前の記事で詳しく解説されてるから詳しくない奴は読め
とりあえず325は絶対読め

336 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 13:09:03.16 ID:Dh2LbIas.net]
>constなんかキャストしたら外せるし

コンパイラにばれないように外せるとでも言うのだろうか?

337 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 13:57:28.81 ID:v/vxYa9c.net]
void Foo::const_method() const {
 const_cast<Foo*>(this)->not_a_const_method();
}
みたいな?

338 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 13:58:00.16 ID:Wfult68o.net]
>>328
> ここは釣堀かよ

釣のつもリなんだろ
言ってることがちょいちょいおかしいし

339 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:06:59.71 ID:v/vxYa9c.net]
>>328>>330
普通に外せるわけだが、
const int a = 9999;
void foo(const int* p) {
*const_cast<int*>(p) = 1000;
}
int main() { foo(&a); }

ビルドは通るからコンパイラを騙せてゐる
多分推測だけど、言語仕様上は処理系依存

340 名前:ゥ未定義動作か何かになっていると思う []
[ここ壊れてます]



341 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:09:48.06 ID:v/vxYa9c.net]
、const属性な領域への書き込みに関しては

342 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:24:53.41 ID:eOjFevzb.net]
>>331
それは未定義動作だからコンパイラによって関数呼び出し自体削除されても文句言えない
よって出来るとは言わない

そもそもconst_cast自体がコンパイラへconst外してと教えてるだけのもの
教えてるのにコンパイラにバレないように外せるとか何言ってんだか

343 名前:デフォルトの名無しさん [2015/11/01(日) 14:31:03.84 ID:KbBmWBMW.net]
vector<int>でcapacityが128になっていて
それを超えてpush_backするとプログラムがエラーになるんですけど
なぜですか?

344 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:33:00.30 ID:rWJZkGz+.net]
>>334
それはあなたの頭がおかしいからです
お大事に

345 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:33:37.96 ID:eOjFevzb.net]
>>334
最小の再現するコードをideoneとかcodepadに張れ

その過程で解決して張るまでもなくなるだろうけどな

346 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:38:39.00 ID:Wfult68o.net]
>>331
バカすぎる w

347 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:49:51.90 ID:v/vxYa9c.net]
>>332
混沌(ケイオス)かく始まりき、
>>331のfoo()が外部リンケージの関数だったとき、コンパイラにできることが本当にあるか冷静になって考えてみよう…

348 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:51:35.06 ID:v/vxYa9c.net]
ちな、今の流れはちょう賢いコンパイラではなくて現用のやつ前提

>>336
ビルドは通った、と書いたが?

349 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:54:17.76 ID:v/vxYa9c.net]
アンカミスった、>>338のは>>333へのレスorz

350 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:57:13.16 ID:64iMabHc.net]
関係ないところに噛みついてしまったことは訂正しなくても良いのですか?



351 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 14:57:16.21 ID:eOjFevzb.net]
>>340
じゃあ次はそれが328へのレスとして妥当であるかどうかを考えましょうね

352 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 15:05:50.89 ID:i5WJmpKv.net]
みんなやめて!
俺のために戦わないで!!

353 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 15:27:30.12 ID:v/vxYa9c.net]
>>341
スマン、

>>342
>>331のは、コンパイラにばれているのはconst qualifierを外したいというプログラマの意向がばれているだけであって、
ガチでconst領域(書き込みがfaultになるようなセグメントとか、ROMとか)に書こうとしているのか否かはばれておらず、
したがって、foo()の呼び出し元がaがconstであることに依存した最適化を行った
(aをROM領域に配置した、aの参照箇所を定数として展開した、etc.)のとは無関係に
foo()は正当なコードで有り得る。

んまー>>320の言ってることは誤りだが(foo()の呼び出し元でconst前提の最適化は為され得る
>>331のfoo()が削除されるというのは言い杉

354 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 15:39:39.56 ID:eOjFevzb.net]
>>344
fooだけ見たら正当なコードだろう。
fooの呼び出しが最適化で削除されないというのは関数を跨いでの最適化は行われないという前提での話
あなたの提示したコードは簡単にinlineに展開されうるし別の翻訳単位に移したとしても将来にわたってリンク時の最適化が行われない保証もない
その場限りの使い捨てコードしか書かないと決めてるのでなければ言いすぎじゃないんだよ。
あなたはそう決めてるのかもしれないけど、それを周りにまき散らすのは止めてくれ。

355 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 15:55:39.84 ID:a/KTrDXN.net]
もはや面倒だからよんでもないんだけど
排他処理さえしっかり出来ていれば問題ないよ

356 名前:334 [2015/11/01(日) 15:59:01.70 ID:KbBmWBMW.net]
パソコンを再起動したらなぜか直りました
多分、何かしらのエラーによってDLL内の
アローケーターのコードがハングアップしたことにより
vectorのメモリーをアローケートしようとすると
ハングアップしたのだと思います。
そして再起動により新たなるDLLをメモリーに
アローケートしたことによりバグフィックス

357 名前:
クリアーされたのだと思います
ありがとうございました
[]
[ここ壊れてます]

358 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 21:51:55.02 ID:IhLDgcVT.net]
>>308
>これだと f をTに制限できないんじゃないでしょうか?
というのが気のせいということですか?

以下、「f をTに制限できない」と言ってるサイトの例です
web.mst.edu/~nmjxv3/articles/templates.html
stackoverflow.com/questions/4660123/overloading-friend-operator-for-template-class/4661372#4661372

C++歴が浅いせいでなかなか理解が難しいんですが、誰か解説してくれませんか?

359 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 22:13:58.67 ID:v/vxYa9c.net]
>>345
ちょっインライン展開で関数実体としてのfoo()が消えることと
>未定義動作だからコンパイラによって関数呼び出し自体削除されても文句言えない (>333)
の当否は関係ない話なんですが…(前者が真偽どちらであろうとも>333の主張に影響が無い

しかも言語仕様上はinline展開される関数のアドレスを取ることは合法、つまり実体としてのfoo()は常に存在するから
inline展開されたらfoo()が消える、という主張はその意味でも誤り
※ 最終的なexeからシンボルfoo()が消えるのはコンパイラではなくてリンカが不要と判断したときだけ

んで、外部リンケージの関数の中身まで見るようなコンパイラは想定していませんよ、ということは>>339で表明してるし、

つまり>>345は全部誤り
混沌(ケイオス)かく始まりき…

360 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 22:42:10.95 ID:Wfult68o.net]
>>349
> しかも言語仕様上はinline展開される関数のアドレスを取ることは合法、つまり実体としてのfoo()は常に存在するから

アドレス取られない時は実体を生成しなくていい



361 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 23:22:57.61 ID:s4vM5XPF.net]
今度はカオスか、このスレは本当に奇人変人がよく集まるな まるで博物館だ

362 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 23:23:48.76 ID:eOjFevzb.net]
>>349
そうだな>>331元のコードをちゃんと見たら >>345 は誤りだった
fooだけ見たら正当とか自分が恥ずかしい。

正解はfoo関数自体が未定義動作だからfooを呼び出した時点でコンパイラになにされても文句言えない

blogs.msdn.com/b/oldnewthing/archive/2014/06/27/10537746.aspx
これを読め

読めなかったら日本語訳してくれてる人が居るからその記事読め

363 名前:デフォルトの名無しさん mailto:sage [2015/11/01(日) 23:52:28.20 ID:eOjFevzb.net]
ついでに言うとかなり前からgccもmsvcもclangもリンク時最適化出来る
未定義動作を最適化する事によって何もしなくなった関数の呼び出しを削除するぐらい簡単だろうよ

364 名前:デフォルトの名無しさん [2015/11/02(月) 10:14:10.87 ID:H6zkuXqe.net]
template<typename U>
class BasicScopeOutHandler {
U& target_;
U valueToSet_;
public:

BasicScopeOutHandler(U& target, const U& valueToSet) :
target_(target),
valueToSet_(valueToSet) {}

~BasicScopeOutHandler() {
target_ = valueToSet_;
}
};

このクラスを使うとき以下のように書くんですが
int i=1;
BasicScopeOutHandler<int> outo(i,0);

<int>を書かないようにできないんでしょうか

365 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 10:39:22.65 ID:pkynDUbv.net]
template<typename U = int>
class BasicScopeOutHandler {
U& target_;
U valueToSet_;
public:

BasicScopeOutHandler(U& target, const U& valueToSet) : target_{target}, valueToSet_{valueToSet} {}

~BasicScopeOutHandler()
{
target_ = valueToSet_;
}
};

int main()
{
int i = 1;
BasicScopeOutHandler<> outo(i, 0);
}

366 名前:デフォルトの名無しさん [2015/11/02(月) 10:54:40.24 ID:H6zkuXqe.net]
std::string s("abc");
BasicScopeOutHandler<> outo2(s, "");

これも動くようにしたいです

367 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 11:04:34.97 ID:pkynDUbv.net]
intかstringどちらかのデフォルトテンプレート引数諦めれ

template<typename U = int>
class BasicScopeOutHandler {
U& target_;
U valueToSet_;
public:
BasicScopeOutHandler(U& target, const U& valueToSet) : target_{target}, valueToSet_{valueToSet} {}
void print() const {
std::cout << target_ << std::endl;
}
~BasicScopeOutHandler()
{
target_ = valueToSet_;
}
};

int main()
{
int i = 1;
BasicScopeOutHandler<> outo(i, 0);
outo.print();
std::string s{"abc"};
BasicScopeOutHandler<std::string> outo2(s, "");
outo2.print();
}

368 名前:デフォルトの名無しさん [2015/11/02(月) 11:09:21.26 ID:H6zkuXqe.net]
わかりました
ありがとう

369 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 11:13:27.15 ID:pkynDUbv.net]
こういう書き方も出来ないでもないけど

#include <iostream>
#include <string>

template<typename U>
class BasicScopeOutHandler {
U& target_;
U valueToSet_;
public:
BasicScopeOutHandler(U& target, const U& valueToSet) : target_{target}, valueToSet_{valueToSet} {}
void print() const {
std::cout << target_ << std::endl;
}
~BasicScopeOutHandler()
{
target_ = valueToSet_;
}
};

int main()
{
int i = 1;
BasicScopeOutHandler<decltype(

370 名前:i)> outo(i, 0);
outo.print();
std::string s{"abc"};
BasicScopeOutHandler<decltype(s)> outo2(s, "");
outo2.print();
}
[]
[ここ壊れてます]



371 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 11:18:17.84 ID:n84MEZR7.net]
>>354
template<typename U>
BasicScopeOutHandler makeBasicScopeOutHandler(U& target, const U& valueToSet);

int i=1;
auto outo(makeBasicScopeOutHandler(i, 0));

こんな感じでいけなかったっけ?

372 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 11:23:16.31 ID:xR1wQeYt.net]
inline指定した関数がインライン展開される条件がよくわからないんですが
たとえば関数内で関数呼び出しがあるとダメでしょうか?たとえば↓
class a {
vector<int> v_;
public:
inline size_t() {return v_.size(); }
};

373 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 11:30:56.04 ID:pkynDUbv.net]
>>360
stringが素直に動かないけどそういう手もあるな

ideone.com/cWEh9h

374 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 15:50:12.29 ID:l0YqebeX.net]
>>361
inlineは単にコンパイラへのヒントでインライン展開される条件は言語仕様的には決まってないよ
強制的にインライン展開したいなら
__forceinline (VC)
__attribute__((always_inline)) (GCC)

375 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 16:24:49.76 ID:pyzNwXiR.net]
>>363
再帰してたらどうなるの?

376 名前:デフォルトの名無しさん [2015/11/02(月) 17:19:59.82 ID:sH3CQlXL.net]
再帰の深さが翻訳時定数になるならアンロールできるね

377 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 17:39:42.86 ID:l0YqebeX.net]
>>364
どんな関数でもインライン化出来るというわけじゃもちろんない
VCの__forceinlineの場合
https://channel9.msdn.com/Forums/TechOff/56830-Does-forceinline-guarantee-the-code-to-be-inline/fa0cde630fc144cc81cb9dea011d3fc6

378 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 19:07:02.80 ID:pyzNwXiR.net]
看板に偽りありだね。effortinlineじゃん。

379 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 19:52:12.81 ID:xR1wQeYt.net]
>>363
ありがとうございます

インライン展開されたかどうかは一般的にはアセンブリコードを見ないとわからないようで
VSで吐いて頑張って見てみましたが、stdコンテナのせいか複雑すぎて自分にはワケワカメですた

380 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 22:17:34.05 ID:YJ91Wm1P.net]
>>367
そりゃできないもんはしょうがないだろ
再帰はネスト8まで(変更可)できるみたいだし



381 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 22:54:03.85 ID:pyzNwXiR.net]
>>369
出来ないならforceと名乗るなと言う主張なのだが。

382 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 23:04:16.53 ID:YJ91Wm1P.net]
あすぺの方かな?

383 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 00:53:31.97 ID:/tqLaLx+.net]
__enforce_inline_if_possible

384 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 01:27:57.22 ID:aAIJ30cE.net]
初心者質問で申し訳ないんだがプリミティブな型(配列とかではない)をわざわざ参照やポインタで渡す利点って何?
でかいクラスとかベクタは寝私じゃまずいんだろうけど

ベストプラクティス集みたいなのが知りたい

385 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 01:32:24.06 ID:kkml9wFg.net]
>>373
出力を(戻り値としてではなく)受け取りたい場合とか

386 名前:デフォルトの名無しさん [2015/11/03(火) 08:11:12.58 ID:MzR8Ch2t.net]
>>373
ファイルから4byte取ってint値を返す関数みたいな、
関数の返す値がintの全範囲を取りうる上に、
別にエラーフラグも欲しい場合とか。

結果値とエラーフラグの構造体ってのも座りが悪い気がする故。

387 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 08:50:54.22 ID:LsPLW4EI.net]
そんなクソな理由なら
もう言語仕様にdestructuring入れちまえよ

388 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 13:42:32.87 ID:cBt+bdl5.net]
まぁそういうわけのわからないものは入れないってのがCのポリシーだからな

389 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 17:39:36.79 ID:BAZ2T+2b.net]
>>373
Int型のデータを4byte分のchar型領域に格納したい時とか

390 名前:デフォルトの名無しさん [2015/11/03(火) 20:35:08.57 ID:Xgba2yKF.net]
> 寝私

ね・・・値渡し?



391 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 21:10:03.53 ID:f9WhIZl3.net]
良く読解できたな
俺は何のことだかさっぱり分らんかったわ
ネワタシね

392 名前:デフォルトの名無しさん mailto:sage [2015/11/03(火) 22:44:59.85 ID:tQp1seHW.net]
い・・・引数
ね・・・値渡し

393 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 00:07:29.19 ID:lNTSrs7r.net]
ああなるほど、そういう事か
> ねわたし

394 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 00:09:39.58 ID:lNTSrs7r.net]
いんすうって読んでる人には会ったことあるけど、ねわたしは初めてだわ

395 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 10:11:00.23 ID:knfKdYCP.net]
 
米Microsoft社 まいくろそふと

  クラウド 負け組宣言 まけぐみ

OneDrive「無制限」廃止

        goo.gl/vyy1PO

 

396 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 10:23:47.98 ID:WTQazYun.net]
定数は、

ていすう?
じょうすう?

397 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 10:35:27.81 ID:anjRIvjf.net]
さだかず

398 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 10:41:49.13 ID:JtLiF9NW.net]
誰だよ

399 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:07:21.77 ID:BxtwdD3S.net]
local layer = cc.Layer:create() -- レイヤーを作成
local texture = cc.Director:getInstance():getTextureCache():addImage("texture.png")


cocos2dxのC++なのですが、セミコロンの意味がよくわかりません。
セミコロンの後に関数を書くような記述って一般的なC++でもありますか?cocosが特別なだけでしょうか?

400 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:09:52.06 ID:BxtwdD3S.net]
すみません。コロンでした。



401 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:14:51.93 ID:v71WI/Wg.net]
それc++じゃなくてluaじゃね?w

402 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:16:02.64 ID:+TsKcPkL.net]
>>388
それC++じゃなくてluaじゃね?

403 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:16:55.52 ID:+TsKcPkL.net]
一分以上遅くまるかぶりした…

404 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:18:12.36 ID:v71WI/Wg.net]
丸かぶりやめーやwww
連投した思ったわw

405 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 19:32:54.97 ID:S5IgxevX.net]
この被り方はやるなw

406 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 20:24:49.37 ID:T4zkVKip.net]
ワロタ
草一個の差かよ

407 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 21:19:20.53 ID:lblQBd0R.net]
それにc++とC++ w

408 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 21:25:46.25 ID:+TsKcPkL.net]
>>393
すまんw

書き込む直前にスレ更新して未読メッセージを一覧表示する機能があれば、この丸かぶりは俺だけのもんだったんや…

409 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 01:49:10.60 ID:82c/dtbv.net]
例外使用で
例外がどこから発生したかを調べる定石ってなんかありますか?
スルーする型に発生した場所の情報を埋め込むとか?

410 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 02:11:58.70 ID:7H52eTq5.net]
>>398
埋め込むほかに無いと思うんだけど、それで何か問題でも?



411 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 02:18:06.51 ID:PhAaiQpi.net]
whatに入れとけば事足りるよね
そんな色んな所から例外出るわけでもないし
コールスタック欲しくてデバッガ使えるなら例外発生時のbreak入れれば

412 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 07:42:58.68 ID:82c/dtbv.net]
whatという機構があったんですね、知りませんでした、ありがとうございます

>>399
↑のようなことも知らなかったので・・・

413 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 12:57:38.82 ID:5OTArlnR.net]
What?!

414 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 22:52:44.46 ID:PcJjmoGr.net]
まあ、__FILE__と__LINE__を保持っておけば良いんじゃね?

415 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 05:08:13.90 ID:13F/39Al.net]
このスレってスキル高い人多そうだけど、そういう

416 名前:人が
アプリケーションの開発力も高いとは限らないもんでしょうか?
[]
[ここ壊れてます]

417 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 08:32:12.74 ID:mDm5qU1u.net]
アプリケーションの開発で重要なのは、開発カより例えば >>404 で自分が欲しい答えをちゃんと返せる様な質問をする能力

418 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 09:17:42.53 ID:XiUv/MWJ.net]
数学板から誘導されてきました

下記の組み合わせ最適化問題を解きたいのですが、計算量が膨大になるため、効率のよい解き方を探しています
C++で実装しているとはいえ、こちらで聞くのが正しいかわかりませんが、お力をお貸しいただけますと幸いです

【問題】

■前提
・テストを控えるP人の学生がおり、同じ塾に所属している
・テストはN科目ある
テストの集合をTと表記し、各テストをT_n (n=1,2,...,N)と表記する
・塾は各科目に対してM通りの強化学習授業を用意している
科目nに対する強化学習授業の集合をC_nと表記し、各強化学習授業をC_nm (m=1,2,...,M)と表記する
・C_nmの実施により、学生p (p=1,2,...,P)はテストT_nの点数がe_nm_p 点あがる

■問題
塾は各科目の強化学習授業を一回ずつ実施する。つまり、n個の強化学習授業の集合C_n (n=1,2,...,N)から一つずつ選んで、N回の強化学習授業を行う。
塾としては、N回の強化学習授業による点数上昇がE点を超える人数を最大化したい
この時、どのようなアルゴリズムで強化学習授業の組み合わせを選べばよいか


全探索をすると解けるのですが、NとMが大きくなると組み合わせが膨大になります
N=10,M=10くらいを想定しておりますので、これを全探索するとなると不可能です
何かヒューリスティックな解き方はありますでしょうか

よろしくお願いいたします

419 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 12:00:33.53 ID:0KPezM4w.net]
すべての事象が独立してるのだから単純なタスク分割&スレッド化で十分。

420 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 12:04:40.36 ID:G66S+Nhf.net]
スレ違いの気はするがとりあえず。

王道の分枝限定法を使うとこんな感じ。
まず緩和問題を作る。学生p全員に同じC_nmを実施するという制約を外すと、この問題は
簡単に解くことができる。(単純にpn毎に最大のe_nm_pを選んでいけばよい)
これが解の上界になる。(これより良い解は存在しない)
まず何かひとつ実行可能解を求めて、これを暫定解とする。
解の探索は科目毎の授業を順次固定していく作業になるが、ある科目nの授業をmにしようと
した際、未決定の科目についての緩和部分解を加えても暫定解より良い値が得られない
のであれば、それ以上の探索を打ち切ることができる。
全科目の授業が決定した時点でそれが以前の暫定解より良ければ新たな暫定解とする。

nの探索順序を決めて次数M深さNの探索木を考えた場合は、下の方から緩和部分解を
求めておけば比較的簡単にできる。
nの順序や探索順序(深さ優先、幅優先等)など検討する余地はあるけど。



421 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 14:00:20.34 ID:XiUv/MWJ.net]
>>408
ありがとうございます
分枝限定法で実装してみたいと思います

某所で質問した際には遺伝的アルゴリズムの利用が有効かもしれないと言う助言をいただいたのですが、この手の問題には有効なのでしょうか
詳しい方がおられましたらお教えいただけると嬉しいです

422 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 14:34:34.34 ID:aJXYP9QX.net]
宿題スレでやれ

423 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 16:12:16.42 ID:CNI6gO7O.net]
>>409
厳密解である必要がないなら有効だろね
まぁ遺伝アルゴというかモンテやね

424 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 17:20:47.01 ID:FO8fPt0J.net]
質問です。
STLにさまざまなものがありますが
ライブラリの使い方(文法)を覚えていく方法
一つ一つの関数の仕組みまで勉強していく方法

当然関数の仕組みまで覚えるに越した事はないのですが
初めから関数の仕組みまで覚えるべきでしょうか

425 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 18:47:37.20 ID:P638M0v0.net]
>>412
CでもC++でも何でも良いからしっかり基礎を学ぶべき。

言語やライブラリがやってるのは短縮記法を追加する事だけであって
適当に書いたらあとは勝手に効率の良いコードになるなんて事は起こらないから。
むしろ、ある程度中身が推測できてる状態で適切に書かないと簡単に効率の悪いコードになる。
vector::sizeは速いのにlist::sizeが遅くて、しかしvector::emptyとlist::emptyはどっちも速い理由は
どう実装されている筈かが分かっていれば自明だよね?

一通りポピュラーなデータ構造・アルゴリズムを自分で実装してみたら?
そうしたら計算量のオーダー見ただけで大体どんな構造してるか分かるし、
サポートされている可能性の高いオペレータも検討がつくようになるよ。
つっても配列とリストと平衡木と外部ハッシュくらい抑えればSTLの内容はカバーできるけど。

コンテナの場合はデータ構造が決まればアルゴリズムは自然と決まるから、
個別の関数の仕組みまで覚える必要は無いかな。

データ構造、重要。

426 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 18:57:28.00 ID:V1z7c7F8.net]
listはC++03までsizeの実装方法は決められてなくてC++11でO(1)になるよう決められたよ

427 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 19:06:00.19 ID:P638M0v0.net]
まじか
メンバとして値を持つ感じになるんかね。

428 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 20:01:11.90 ID:V1z7c7F8.net]
>>415
そう。
そのためにgccのlibstdc++のlistはABIが変わる
https://gcc.gnu.org/wiki/Cxx11AbiCompatibility

clangのlibc++は最初から定数オーダーで実装されてる

429 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 22:42:33.58 ID:P638M0v0.net]
>>416
なにそれ怖い
というか思ったよりあちこち変わってるのな。

まぁconfigureしてmakeする限り気には成らんけど。

430 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 00:58:02.16 ID:OJJscNiO.net]
度々すいません
>>406を解くにあたり色々試しておりまして、メモ化再帰によって計算量を減らしとくと言う方針を考えたのですが、
@計算量は大幅に減るでしょうか
Aどのような再帰関数を記述すればうまくいくでしょうか

ご教示いただけましたら幸いです



431 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 01:10:10.99 ID:OJJscNiO.net]
考えてみましたが>>418はやはり無理そうでした
お手数お掛けしました

432 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 13:04:27.46 ID:gczgyzuS.net]
学生数Pが十分大きいと仮定し、
教科学習授業mによる上昇得点がeになる人数に関する分布が正規分布に近似されると仮定する。
つまり、平均並みに得点が上る人が最も多いような普通の入力に関して解いていると仮定する。

ここで平均上昇得点をμ、標準偏差をσとすると上昇得点がEを上回る割合Pr(e>E)は以下で記述できる。
Pr(e>E)=1 - 1/2 * (1 - erf((E-μ)/(σ√2)))
この関数の最大化は、近似により、次のようになる。
erf(x)≒1 - exp(-x^2 * (4/π + ax^2) / (1 + ax^2))
Pr(e>E)≒1 - 1/2 * exp(-x^2 * (4/π + ax^2) / (1 + ax^2))
但しここでx=(E-μ)/(σ√2), a=-(8(π-3))/(3π(π-4))≒0.14
こいつを最大化すれば良いので
arg max Pr(e>E)
≒arg max x^2 * (4/π + ax^2) / (1 + ax^2)
≒arg max μ/σ …(*)

ここで各科目について総和を取った場合、μ及びσは
μ=μ_1 + μ_2 + … + μ_n
σ=√(σ_1^2 + σ_2^2 + … + σ_n^2)
となるから、σ_i^2がμ_iで近似できると仮定すれば
arg max Pr(e>E)
≒arg max μ …(**)
となる。

ここから、ヒューリスティックに解くなら
(1)まず科目別に各教科学習授業による上昇得点の平均と標準偏差を求める
(2)(**)を最大化する組み合わせを初期の解として与える
(3)得られた解について上昇得点がEを上回る人数を計算し、適宜最適解を更新する
(4)ランダムに科目を選び、その科目について教科学習授業を変更し、(*)を最大化する
(5)必要なだけループする。goto (3)

ただ、色々仮定を置いてるから実際には最適解を複数保持したりだとか焼きなまし法を使ったりだとか
工夫は必要だと思うけど。

433 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 13:26:50.84 ID:OyB7Ho6V.net]
総当たりだと計算量どのくらいになるの?

434 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 14:42:08.03 ID:HlEs+VqN.net]
>>420
eが科目毎の上昇点なのか全科目の合計なのか良くわからんなあ。
科目毎だとしたらEを超える確率を求めることに意味はあるんだろうか。
上昇点の合計が一番大きいものを選べば最適に近いと言っているだけにも見えるが。

435 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 14:53:00.18 ID:gczgyzuS.net]
>>421
んーと
生徒数P、科目数N、強化学習授業の種類が各科目ごとにM通りとすると
M種類の強化学習授業の選択をN回繰り返す試行をして、それに対しP人の生徒の上昇得点をN科目について加算するわけだから
O(M^N*P*N)
くらいじゃないかな。
N=M=10, P=1000の元でおよそ2^30回の加算。待ってりゃそのうち終わる程度の計算時間。

436 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 15:02:22.03 ID:gczgyzuS.net]
>>422
最初の3行を除いて、科目ごとの上昇得点じゃなくて全科目の合計の上昇得点について言ってる。
総和が云々の添字付きのμやσは各科目毎。
σ_i^2≒μ_iの近似で一般の正規分布ではなくポアソン分布の定理を使ってる。

437 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 17:46:23.21 ID:HlEs+VqN.net]
Pr(e>E)には授業の組み合わせがパラメータとして存在して、それぞれ異なる分布ということだよね。
とすると最適化の肝のこの部分は

>(4)ランダムに科目を選び、その科目について教科学習授業を変更し、(*)を最大化する

単純な山登りで、次に探索する方向を決定するのに計算量の軽い評価関数(*)を使うということか。
本当に目的関数を最大化する方向に進むのかどうかってのとローカルミニマムに嵌りそうなのは
気になるけど。
>>420で書いてるように焼きなまし法なりを使う必要はあるだろうね。

438 名前:デフォルトの名無しさん [2015/11/09(月) 09:56:26.57 ID:ddVcBsOP.net]
場所もわきまえず
どこでもオナニーする奴なんなの
みているこっちの身にもなってくれ
すれ違いにスルーもできないのだろうか
レベルの低い奴だな

439 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 13:18:17.88 ID:ui6/e9F0.net]
見なけりゃいいだろw
たまのスレ違いへのレスにいちいち腹立てるとか

440 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 13:35:12.41 ID:XQ/YTWqk.net]
個人的に気に入らない書き方に腹を立てるような奴に何を



441 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 14:18:52.79 ID:cYOWQcMh.net]
スルー出来ないレベルの低い奴ですという自己紹介でしょ

442 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 14:51:13.36 ID:0gQn1clE.net]
質問です

まだ実際にやったわけではないので知ったかなところがあるかもしれませんが、Linuxでのncursesと同じような働きをするものはwindowsにはないのでしょうか、、、

443 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 14:54:51.84 ID:xDt2hEwv.net]
>>430
cygwinかmsysか何か+ncursesじゃ駄目なの?

ncursesは内部でターミナルのエスケープシーケンスを使ってカーソル動かしたり画面切り替えたりしてるから、
windowsのコマンドプロンプトにそういう隠し機能が無い限りは存在し得ないと思うよ。
俺はもう面倒くさくなってオーナードローする方向に行ったけど。

444 名前:デフォルトの名無しさん [2015/11/09(月) 16:06:19.72 ID:ddVcBsOP.net]
>>427
ルサンチマン特有の考え方だな
お前は一生成功者を妬んで生きていくがいい

445 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 16:37:44.83 ID:0gQn1clE.net]
>>431
学校ではDebianを使っているのでncursesでも良いのですが、家の普段の開発環境はWindowsのconemuを使ってるのでそっちでできると助かるのです。
ないのであればWindowsではVisualC++とかを使って作るしかないのですよね

446 名前:デフォルトの名無しさん [2015/11/09(月) 17:05:28.90 ID:ddVcBsOP.net]
学校の質問は学校でしろカス

447 名前:デフォルトの名無しさん [2015/11/09(月) 17:08:40.90 ID:ddVcBsOP.net]
常識しらずの小便臭いガキはかあちゃんのおっぱいでもペロペロしてろよ

448 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 17:44:55.09 ID:xDt2hEwv.net]
>>433
ググったらconemuでncursesが使えそうだけど?
Inject ConEmuHkとANSI X3.64の2つをonにすればANSI escape sequencesが使えるって書いてある。

有効にした上で
puts("\x1b[H\x1b[J\x1b[31mHello!\x1b[0m");
ってやったらどうなる?

superuser.com/questions/561740/how-to-enable-color-options-in-conemu-similar-to-bash-terminal
https://en.wikipedia.org/wiki/ANSI_escape_code

449 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 18:12:23.70 ID:0gQn1clE.net]
>>434
そもそも学校のプログラムでそこまでやらないです。

>>436
ありがとうございます!
試してみたいと思います。

450 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 19:03:24.85 ID:0gQn1clE.net]
>>436
画面がクリアされて文字色がワインレッドになりました



451 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 19:10:29.92 ID:xDt2hEwv.net]
>>438
じゃぁncursesをインストールして使えば?
多分使えるから。

あるいはエスケープシーケンスについて調べてncursesモドキを作るとか。
自分のマシンでだけ動きゃいいんならそんなに難しくないよ。

452 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 19:22:23.15 ID:fyLz/sBu.net]
32bit windowsならansi.sys

453 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 20:18:12.05 ID:ukRjpW0W.net]
i.imgur.com/UFmYAuK.jpg

454 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 20:49:02.48 ID:wdiN+26M.net]
iterator = 万能になったポインタ っていう掴みで悪くないかな?

455 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 21:30:42.79 ID:Tc78WGfj.net]
iteratorって必ずしもポインタじゃないだろ
どちらかってと帰納法の一般式ですといわれた方がぴんとくるんだが

456 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 21:49:23.78 ID:N9P9dKNU.net]
帰納法の一般系って数学的帰納法(あるいは超限帰納法)じゃね?
イテレータって再帰処理してるの?

457 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 21:57:04.54 ID:WDtG518P.net]
万能もポインタはスマートポインタの方で
イテレータはイテレータだろう

458 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 22:03:35.22 ID:N9P9dKNU.net]
いや、「帰納法」「一般式」だけみてアホなこといってました、すいません。
++i 自体、++(++i)みたいに考えれば帰納的だし、数学的なんちゃらは全てを数え上げることが本題でしたね。
とても恥ずかしい

459 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 22:14:12.41 ID:Q1JmCgC7.net]
数学的帰納法は帰納法ではないものの代表だと言うのに

460 名前:デフォルトの名無しさん mailto:sage [2015/11/11(水) 22:51:35.10 ID:lGaCUbJ1.net]
まさに走査子。
なかなか素晴らしい訳なんじゃないかと思う。

商品を一個ずつ掴んで検査するロボットアーム



461 名前:ンたいなものをイメージすればよいのではないかと。 []
[ここ壊れてます]

462 名前:デフォルトの名無しさん [2015/11/12(木) 00:45:27.72 ID:JWXmz4jM.net]
525本

463 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 01:28:41.05 ID:/8Fe5VeX.net]
汎用になったポインタじゃね?

464 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 01:41:54.65 ID:BmfTbCza.net]
ポインタだとリンクリストはポインタの加減算で移動できない。ポインタはどういう意味で使っているか前後を見ないとわからない。

C++の思想としてはポインタに多重に持たせてる意味を参照とかコンテナとか関数オブジェクトとかイテレータとか分離して明確にした。

参照はnull参照も付け替えもできないから代替としては弱いけれど。

465 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 05:57:05.06 ID:eWqhTRW7.net]
NTSC! NTSC!

466 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 06:52:24.86 ID:Mz0/g+xS.net]
C++でどうも概念が理解しにくい言葉があるんだけどこれであってるのか?

ポインタ→メモリ上のある部分を指すもの
イテレータ→読み、書き、定数などの種類があって、かつ型を気にせずにAlgorithmなどを使うことができるもの
参照→ある変数や関数を指すもの→ポインタでも同じことできるはず?
コンテナ→ある種類に属するものを寄せ集めたもの
関数オブジェクト→?

ポインタとイテレータが違う構造なのもわかるけどイテレータがピンと来ない感じ

467 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 08:05:18.35 ID:iQ6UIi2A.net]
ポインタ→メモリ上の"場所"を指すもの
参照→メモリ上の"モノ","オブジェクト"を指すもの
イテレータ→ループを処理側ではなく状態側で切り取ってむりやりオブジェクト化したもの
コンテナ→別のオブジェクトを入れる入れ物・受け皿 複数のものをどう並べておくかで種類が分かれる
関数オブジェクト→関数を"ハードコーディング"せず間接的に記述・構築する仕組み

468 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 08:23:02.05 ID:BmfTbCza.net]
イテレータはコンテナの要素を指し、指す要素を移動できるモノ。

配列要素を指すポインタを抽象化・拡張。

469 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 08:38:17.92 ID:G83c/GIg.net]
>>455
それはコンテナのイテレータ
イテレータの概念は添字付けられたもの(可算個)全般の実装
コンテナのイテレータは、あくまでその一例

470 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 10:15:01.62 ID:GK7FZzYO.net]
イテレータとポインタを混同するっていうのって何か新鮮だな
まぁC++の場合はポインタに寄せてってるから分からんでもないが
JavaのEnumerationだとhasMoreElements()とnextElement()
JavaのIteratorだとhasNext()とnext()
C#のIEnumerator だとMoveNext()とCurrent
こーいうのも知っておけば混同しようが無いと思うけど



471 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 11:49:30.88 ID:LxPNMIkD.net]
ポインタは言語に組み込まれた機能要素で、それを使ってイテレータなどの概念を実装している。
レンズを使って望遠鏡を作るとか顕微鏡を作るとかいう関係と同様。
関数オブジェクトはなんでその文脈で出てくるのか理解できない。

472 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 12:12:47.18 ID:+BgE0e3i.net]
メンバ変数ポインタからメンバ変数の型を
取り出す方法はありますか?

struct Foo { int bar; };
struct Foo2 { mem2type<&Foo::bar>::type bar2; }

こんなイメージです

473 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 12:26:18.33 ID:9l61Vk4V.net]
>>459
decltype(Foo::bar)

474 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 12:50:44.86 ID:+BgE0e3i.net]
>>460
ありがとうございます
できればmem2type<メンバ変数ポインタ>::typeとして使用できる方法も知りたいのですが可能でしょうか?

475 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 13:25:07.11 ID:LxPNMIkD.net]
>>461
やりたいことがよく見えない。
メンバボインタを引数に渡すということであれば
template <typename R. typename T>
R memp2type(R T::* p);

という関数を宣言して、
decltype(memp2type(p));
とやればできるかな?

476 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 13:39:00.7 ]
[ここ壊れてます]

477 名前:5 ID:zAzQWwNw.net mailto: <>は使えないが

template<class T> struct mem2type_impl { typedef decltype(T) type; };
#define mem2type(v) mem2type_impl<decltype(v)>
struct Foo { int bar; };
struct Foo2 { mem2type(&Foo::bar)::type bar2; };

…目的が見えないな
[]
[ここ壊れてます]

478 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 13:40:26.70 ID:zAzQWwNw.net]
1行目間違えた
template<class T> struct mem2type_impl { typedef T type; };

479 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 13:52:08.03 ID:+BgE0e3i.net]
すみません、テンプレートを使うというよりは、
C++03の範囲で行う手段が知りたいのですが、
何か方法はありますでしょうか。

480 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 13:52:52.81 ID:zAzQWwNw.net]
BOOST_TYPEOF



481 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 14:30:10.82 ID:+BgE0e3i.net]
>>466
ありがとうございます
予想以上に大掛かりな処理が必要そうでびっくりしましたが、調べてみたいと思います

482 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 14:47:53.39 ID:zAzQWwNw.net]
>>467
使うツールセットは?
msvcやgccあたりなら特に準備しなくても動く(コンパイラの独自拡張を裏で使うので)

483 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 21:24:48.58 ID:JxIPjKjJ.net]
>>447
嘆かわしいことに機械学習の本では大概数学的帰納法の意味で帰納法と書いてある…

484 名前:デフォルトの名無しさん mailto:sage [2015/11/12(木) 23:01:53.17 ID:VdOPydER.net]
部分特殊化の基本的な使い方じゃないの?
ためしてないけどこんな感じ

template<typename T>
struct a;

template<typename C, typename M>
struct a<M C::*> {
using mem_type = M;
};

template<typename T>
auto f(T t) -> typename a<T>::mem_type;

struct X {
double d;
};
auto f() {
using t1 = decltype(f(&X::d));
}

485 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 00:22:52.33 ID:wyADWSOf.net]
>>457
EnumerationとIterationを混同してるぞ…

486 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 00:34:21.81 ID:GGTDEwnn.net]
それに違いなんて無いぞ?
英語の話をしたいのか?

487 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 00:37:47.63 ID:gkMX52H5.net]
>>470
>>465にC++03の範囲でって書いてあるから、decltypeが使えない状況なんじゃない?

488 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 00:44:18.74 ID:wyADWSOf.net]
>>472
あるから。
enumerationは列挙。
iterationは反復。
enumerationするための手段がiterationな。
それを同じと言っても確かに問題ない事が多いけど、それなら配列へのポインタをイテレータと言っても問題ないレベルの違いな。

489 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 02:02:36.76 ID:GGTDEwnn.net]
名前の都合でしかないから
enumuratorとiteratorの両方が混在してる言語を見てみると…

Javaの場合は既に使われているEnumerationのAPIを変えることなく改善版が用意された
https://docs.oracle.com/javase/jp/6/api/java/util/Iterator.html
> public interface Iterator<E>
> コレクションの反復子です。反復子は、Java Collections Framework において Enumeration の代わりとなります。
> 反復子は、次の 2 つの点で列挙と異なります。1) 反復子を使用すると、明確なセマンティクスに基づく繰り返し処理の間に、
> 呼び出し側は基本となるコレクションから要素を削除できる。2) メソッド名が改良されている

Rubyの場合は登場時からブロック付きメソッドを「イテレータ」と表現してた経緯があり
外部イテレータを提供する(?)ときにこの名前が使われた
docs.ruby-lang.org/ja/1.9.3/class/Enumerator.html
> 要約
> each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使えます。

迷いのない言語には片方しか用意されてない
両方を区別して使い分ける必要が無いから

490 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 02:54:36.52 ID:W9y/9ft7.net]
一般的な語意の話なら >>474 も正解。
具体的な Java や Ruby のインターフェースの話なら >>475 も正解。

話がかみ合ってないだけ。



491 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 06:46:34.15 ID:VFyva8w7.net]
この流れで一般的な語彙の話する奴がバカなだけ
違いがわかる俺カッケー君 w

492 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 08:32:09.27 ID:wyADWSOf.net]
だから>>457も見方の問題であって、iterationとenumerationを同列に扱う立場で話を始めているのに、何故ポインタとイテレータを同列に扱う見方を上から目線で小馬鹿にしてるのかがわからない、という指摘でしょ。

493 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 09:06:29.82 ID:gfKlURBY.net]
ポインタとイテレータを同列に語ったらそりゃ小馬鹿にされます(教育)

494 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 12:29:14.68 ID:wlkMWFWk.net]
ポインタもそうだが、英語のニュアンスの違いを説明するなら、
イテレーションを積み重ねたのが列挙というべき。
イテレーションは繰り返し操作の1単位という意味もあるし、
実際プログラミングはその意味のが近い。

495 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 13:20:33.94 ID:+1eGYaPq.net]
列挙の手段が反復
反復の結果が列挙

496 名前:uy ◆Qawu9.2l1E mailto:sage [2015/11/13(金) 15:32:34.62 ID:Y891nyvQ.net]
C++の使いどころってマジでどこ
ちなみにゲーム関連は他言語で間に合ってる

497 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 15:35:06.05 ID:4ohAy024.net]
組み込み

498 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 15:45:56.89 ID:cTzYhkFo.net]
なんでコンパイルが通るのか?
何故〜が出来るのか?
それは逆に言えば、コンパイラが独自で判断した結果。
ついでに言えば、コンパイルは通っても実行時エラー
が出る可能性がある。
変なアドレスにアクセスしてしまう事もある。

何故出来るのかと疑うより、疑い用の無いコードを書けば良し。

499 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 17:54:33.02 ID:jSCbd5hj.net]
>>481
つまりデータを"列挙"するために、そのデータに一定の操作を加えて"反復"させるということで、
そのデータを指し示す物がイテレータということになるのでしょうか?

500 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 18:38:26.94 ID:+1eGYaPq.net]
ただの言葉遊びに反応されても困る
まじめに考えるな



501 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 18:52:41.76 ID:jSCbd5hj.net]
>>486
コンテナを指すもの=イテレータと思って間違えないならそうします

502 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 19:41:25.51 ID:I9q4X3X4.net]
反復結果列挙!


いえ、並べただけですよ

503 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 03:13:06.25 ID:nfjsLiRt.net]
>>474>>481
はげどう
C#のIEnumeratorとか要素だけが列挙されて出てくるのや
確かに種も仕掛けもiterationっぽいがユーザーからは見えないカンジ

504 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 03:15:27.20 ID:nfjsLiRt.net]
ていうかIEnumeratorはyieldを使っても実装できるからそうすると
iteratorは何処?ここは誰?状態に個人的によくなる
怖い…

505 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 05:15:42.95 ID:iwAmPq2+.net]
列挙する手段は再帰でも構わないわけだけど、再帰を理解できない某スレの低脳はどうするんだろう?

506 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 12:52:37.77 ID:FyDiFGtK.net]
皆さんはライブラリの関数は大体覚えているんですかね?

507 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 12:59:51.14 ID:FyDiFGtK.net]
まだ学生なのですが
ctype time string iomanip iostream fstreamの関数を覚えるので精一杯感があって
実際の仕事をされている方々もリファレンスを見たりしながらやるのでしょうか?

508 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 13:34:53.75 ID:Fh2qjyRJ.net]
基本的には何も覚えないよ
他の言語もいろいろやってると「この時はこういうの」
っていうクラスなり関数なりが思いつくから
それを探して使うだけ
クラスライブラリの全容を学ばなきゃいけないのかと最初は思うだろうけど
必要に応じて学んでいけばそれで十分
もちろん、先に全容を掴んでいればそれはそれで君にとって有利ではある

509 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 13:50:41.11 ID:DASkv8IC.net]
よく使うクラス(例えばstringとか)なら覚えちゃってるけど
基本はリファレンス検索したりヘッダー検索したりググったりして解決ですよ

510 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 14:10:57.22 ID:AK9Sm4Mt.net]
カテゴリレベルでのどういった道具があるかは知っておいたほうがいいけど詳細までの丸暗記は無意味だな
詳細は>>495みたいによく使うものなら自然に覚えていくしめったに使わないものなら無理に覚えておく必要がない



511 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 15:30:41.71 ID:FyDiFGtK.net]
では、あれをしたいという時にそのライブラリと関数がわかるくらいでいいのでしょうか、引数まで覚えることもないのでしょうか?

512 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 16:20:33.76 ID:DASkv8IC.net]
覚えなくていい
テストに出るなら頑張って覚えた方がいいがw

513 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 16:22:40.30 ID:iX1kSKz7.net]
ありがとうございます!

514 名前: ◆tAo.kQ2STk mailto:sage [2015/11/14(土) 16:26:49.52 ID:1e4erM+I.net]
しょっちゅう使う関数なら自然と引数の型やその順序まで覚えてしまうものだけど、
基本的には「あれをしたい」って思った時にそのライブラリというかカテゴリの名前が分かりゃそれで十分かな。
ググれるから。

それに一つの環境で使える関数群を全部覚えたからと言って、次の仕事で使えるとは限らないしね。
前の仕事ではCreateWindowEx関数を使ってたけど
次の仕事ではgtk_window_new関数が使われてた、とか
そもそも仕事に使う言語がc++からJava Scriptに変わったとか。

ただ、標準ライブラリに何が用意されてるのか位はさらっと目を通しておいたほうがいい。
よほど特別な理由がない限り、標準的な関数やクラスを自分で実装するのは2つの理由で無駄だから。
1つ目の理由は、もちろん既にあるものを自分で実装するのが時間の無駄だってこと。
バグ取りなんかも必要だし、よっぽど腕が良くないと既存の物より高速に動作する物は作れない。
2つ目の理由は、そのコードを読んだ人に「このVariableArrayクラスはstd::vectorクラスと何が違うんだろう?」って調べる事を強要するから
他人の時間を無駄にしてしまうってこと。

515 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 16:39:01.71 ID:LsNNjMuZ.net]
仕事でGTK使うことなんてあるの?

516 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 16:57:20.04 ID:nfjsLiRt.net]
Aを覚えるよりBを覚えたほうが良い ⇒ ワカル
Aは覚えなくていい ⇒ ワカラン…

特にペナルティーとか何かと引き換えとかが無いなら、記憶する方が良いに決まっている

517 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 17:01:26.38 ID:DASkv8IC.net]
そら時間をかけずに覚えられるなら覚えた方がいいさ
でもそんな奴は相談に来ないだろ

518 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 17:03:36.95 ID:KefGJNy1.net]
まぁ、多すぎて覚えられないという前提がなければ、全部覚えたほうがいい
ただ普通の開発者はプロでも、よく使うとこと、今よく使ってるとこくらいしか覚えてない

俺はSTLのalgorithm周りやら、boostのublasなんかは特にリファレンスしなくても使えるが、
iostreamとかstringとかはかなりメジャーだろうけど俺はいちいた覚えてないから使うときは調べる

519 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 17:04:32.34 ID:/ti03Yhd.net]
時間を引き換えにせず覚える事の出来る人間ばなれした優秀なやつか、はたまた時間を無限のように感じているニートか

>>504
それは単によく使うから覚えてるだけだろ

520 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 17:05:28.30 ID:KefGJNy1.net]
あれioは標準入出力だから覚えてるか
すまんファイル入出力を覚えてないの間違いだたofstreamみたいなやつ



521 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 17:06:16.95 ID:KefGJNy1.net]
>>505
そう、よく使うから覚えてるだけ
それで充分だと俺は思うが…

522 名前:デフォルトの名無しさん [2015/11/14(土) 17:11:41.12 ID:hcV3aB4u.net]
ハッカーなら覚えていて当然だけど
一般人なら覚えてなくていいよ
テストで100点取

523 名前:驍フとは違うんだからね []
[ここ壊れてます]

524 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 17:29:13.74 ID:nfjsLiRt.net]
何を真とするかの基準も無く
ただ易きに流れるだけの人に仕様を満足する仕事は期待できない…
期待できないのだ…!

525 名前:uy ◆Qawu9.2l1E [2015/11/14(土) 18:02:46.08 ID:Shexr7Cq.net]
今10分くらいで全部覚えてきた
www.cppll.jp/cppreference/index.html

この程度も覚えられないとか甘え過ぎ
ダウンロードボタンあるからDLしてコンビニいって全部印刷オススメ

526 名前:デフォルトの名無しさん [2015/11/14(土) 18:15:33.61 ID:hcV3aB4u.net]
日本語で覚えるとかありえないしし(ププププ

527 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 18:21:18.79 ID:/ti03Yhd.net]
カスに構うなよ

528 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 18:47:38.72 ID:Va7f2G7P.net]
>>509
> 何を真とするかの基準も無く

吠えてるだけだよな


お前って

529 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 18:57:41.40 ID:cBGEdvst.net]
そりゃ覚えた方が良いに決まってるけど、覚える事を最優先にする必要は無いよねー
目的は何かを作る事であるわけですから、作る方に労力使う方がイイよねー
そして、その過程でよく使うものは、そのうち嫌でも覚えちゃうものさー

530 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:46:32.92 ID:vZ7mka6Q.net]
でもダメな奴のソースコードって、標準で用意されてるのに使わない奴多いよね。
他の言語の知識がないのなら、一覧表くらい眺めてみてもよいのでは?



531 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:06:52.07 ID:DASkv8IC.net]
そりゃいざ必要なときに調べもしなきゃ

532 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:21:01.67 ID:KefGJNy1.net]
>>515
これはあるあるだな
自前でforループ回さないと死ぬ病気なんだと思ってる

533 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:38:30.93 ID:7qU/f9+6.net]
そういう奴に限って「ライブラリは信用できない」とか言う

534 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:40:29.09 ID:kiB3B4ET.net]
>>517
ごめんよ
イテレータってよくわからんから使いたくないねん(´・ω・`)

535 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:49:29.91 ID:lT+7Yk9s.net]
そんな奴ほど自分のコードのこだわり強いんだよな…

536 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:51:06.70 ID:KefGJNy1.net]
>>519
会社で言われたら戦慄する

537 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:56:08.58 ID:T7cDyZTE.net]
>>519
ちょ

538 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 21:20:44.80 ID:9QHlt6TY.net]
まぁ外部イテレータに関しては無理に使う必要性を感じないのも事実
添え字でアクセスできるコンテナに対してはそれで指してやりたい

539 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 21:23:41.49 ID:kiB3B4ET.net]
逆にイテレータを使うメリットってなんやろ
移植性?コンテナ変えたい場合にサクッと変えられるとか?

540 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 21:32:08.36 ID:P7eSj/oG.net]
>>524
ある場合ではイテレータと言う名前を用いること自体が嬉しい
例えばsetやmapの中身を順番に触って行きたいとき
イテレータという概念でもなきゃメソッド名に困ることになる

それ以外で聞いたことあるのは「順次アクセスさせたいだけなのに
添え字用変数を容易したりケアしたりしたくない」みたいな話



541 名前:.パンティーガァル mailto:sage [2015/11/14(土) 23:47:52.47 ID:KR6EjTDB.net]
>>524
ない
コンテナを変えなきゃいけない場合ってのは
結局全体の構造を見直さなければならないってことだ
いずれにせよサクッとは変えられない

542 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 00:56:51.15 ID:rMAuDQml.net]
> ハッカーなら覚えていて当然だけど
違うよ
本物のハッカー的気質が強い人にとっては本質を正しく理解することが重要で
表に出ている部分をただ覚えるようなことには意味を見出さない
だから規格の丸暗記といった方向での知識量とかは逆にたいしたことなかったりする

543 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:01:18.56 ID:81QugJpf.net]
余談だけどイテレータはコンテナの種類に依らず
一様な方法でコンテナの中身にアクセスする手段じゃん?

たとえばranged-forマップのイテレータから直接取り出せるのはキーと値のペアなんだけど
for(const auto& a : container){
(*it).second
って書かないといけないからstd::pairにoperator Type()みたいな演算子があると嬉しいんだけどヤバいかな
ideone.com/eH1XCR

544 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:02:30.06 ID:81QugJpf.net]
途中送信スマソ
for(const auto& a : container)
{
cout << a.second << endl;
}
って書くとcontainerの変更に弱いよねって話です

545 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:46:33.53 ID:9kIFKVss.net]
お前らgofのiteratorパターン読み直せ

546 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 02:08:16.81 ID:JMNPWmcH.net]
>>528
>(*it).secondって書かないといけない

お前が勝手にそう思いこんでるだけ
どうしてもpairだけ特別扱いしたいなら勝手に変換してろ
ideone.com/egCx9V

547 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 02:42:37.11 ID:etzO6ADE.net]
iterator使ってたら
std::map<k,v>からstd::vector<std::pair<k,v>> に変えたところでアクセス方法変わらないよね?
コンテナの変更に弱くなるってどういう事?

548 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 02:52:02.64 ID:81QugJpf.net]
>>531
そりゃ拡張性のためにあらかじめ変換関数を用意するならなんでも行けるよ

queueにもbegin()とか用意してくれたらな,とかたまに思うんだけど
設計思想には反するんだろうな

549 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 02:54:47.49 ID:JMNPWmcH.net]
>>532
解説しよう
「要素Tを取り出すのにa.secondと書くとvectorに変更するときに修正が必要になるので変更に弱い」という意味なのだ
528はオツムが弱いので連想配列とシーケンシャルコンテナーの違いが理解できなかったのだ

550 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 03:05:58.39 ID:etzO6ADE.net]
コンテナの中身変えといて中身の扱い方が変わるから変更に弱いって言ってるってこと?
何言ってるのかわからんのだけど



551 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 03:16:49.04 ID:9kIFKVss.net]
>>535
イテレータの意味わからんやつに説明しても無駄
何を抽象化してるのか理解してないんだからいくら説明しても無駄

552 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 03:24:17.91 ID:81QugJpf.net]
よく考えなくても自分が悪かったよ すまんかった
std::mapじゃなくてstd::set使えばいい話だった

553 名前:uy ◆Qawu9.2l1E mailto:sage [2015/11/15(日) 06:08:04.15 ID:BtG1eDoL.net]
(′・ω・`)?w

554 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 08:51:12.02 ID:V8NTA7lA.net]
東方のゲームエンジンって全部ゲームエンジンで作ってるんだろうか
それとも弾幕部分だけ?
あとゲームエンジンって自作言語→c++に変換する物なの?それとも直接実行ファイル?

555 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 09:01:47.86 ID:Us7uvw8P.net]
>>539
弾幕部分はzun自作の"弾幕スクリプト"で書いてるらしい

「東方 弾幕スクリプト」でググれ

556 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 09:21:54.05 ID:V8NTA7lA.net]
>>540
弾幕だけなんですね
ただ、自作言語をどうしているのか書いてなかったので知ってる方いますか?
直接実行ファイルにしてるのか、c++コードに変換してるのか

557 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 11:25:49.49 ID:a/0hbCSJ.net]
>>541
弾幕スクリプトは初めて知ったけど、C++のコードに変換することはありえないよ
なんでゲーム屋がこういうのをスクリプトや外部データにするかって、ハードコードしたら敵の動きを
確認するためだけに毎回ビルドしなきゃならなくなるからだ
多分ステージのロード時とかボス戦前とかにゲームエンジン(C/C++)がパースしてるんじゃないか

558 名前:デフォルトの名無しさん [2015/11/15(日) 12:00:25.29 ID:V8NTA7lA.net]
毎回ビルドしたら何か問題あるのでしょうか?
ビルドって難しい事じゃないですし

559 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 12:10:46.73 ID:Q5DXGuJU.net]
見てないから推測だが
単にデバッグ効率・ゲームデザイン効率の問題と思われる
ビルドしてたらゲーム立ち上げ直してデバッグしたいシーン

560 名前:までゲームを進め直さなきゃならなくなる
ランタイムでスクリプトが読み込めればゲーム中デバッグコマンドで設定変えてみることが出来る
[]
[ここ壊れてます]



561 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 12:18:17.96 ID:ZxsxGSS5.net]
DSLを使う目的はビルド時間だけじゃないからありえんってことはない。
ただまぁ、C++のコードにコンバートするのはかえって面倒くさかったりするんで
普通はバイトコード使うだろうな。

>多分ステージのロード時とかボス戦前とかにゲームエンジン(C/C++)がパースしてるんじゃないか

これ実現するなら前提としてバイトコード使うことになるけど、ユーザーにスクリプトを
変更させたりするんでなければリリースするバイナリにパーザを含める必要もない。

562 名前:デフォルトの名無しさん [2015/11/15(日) 12:20:15.34 ID:V8NTA7lA.net]
つまり独自言語テキスト➡独自言語バイナリ➡プログラミングが読み込むって事ですかね

563 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 12:45:49.31 ID:a/0hbCSJ.net]
>>546
多分そうだと思う
まぁ生のテキストかバイトコードかは知らんけど、ゲームバランス調整するために
ちょっと弾幕の出方を変えてみる、っていうごとに「毎回ビルド」っていうのはシャレにならんよ
著しく生産性が下がる
2Dのシューティングとはいえ、インクリメンタルリンクとかプリコンパイルドヘッダの恩恵を入れても
絶対ビルドが数秒で終わるような規模じゃない

特にまずいのは、そういうデータをヘッダに書いてる場合、書き換えたらそのヘッダを
インクルードしてるソース全部コンパイルされるんで
「この弾の出方だとちょっと美しくないなぁ、角度をもう少しずらしてみよう」で数分〜十数分待ち
発狂するだろw

564 名前:デフォルトの名無しさん [2015/11/15(日) 12:51:31.67 ID:V8NTA7lA.net]
ビルドってそんな掛かるのか
3秒もかからないものだと思ってた

565 名前:デフォルトの名無しさん [2015/11/15(日) 12:51:32.34 ID:V8NTA7lA.net]
ビルドってそんな掛かるのか
3秒もかからないものだと思ってた

566 名前:デフォルトの名無しさん [2015/11/15(日) 12:52:15.98 ID:V8NTA7lA.net]
連続送信すまん

567 名前:デフォルトの名無しさん [2015/11/15(日) 12:52:16.54 ID:V8NTA7lA.net]
連続送信すまん

568 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 12:57:45.86 ID:a/0hbCSJ.net]
ブラウザどうなっとんだw
いやまぁ自分が使ってるマシンがしょぼいせいもあるかもしれんけど、
多分東方シリーズのソースってなると結構な規模じゃないかねぇ(ソース資産多いだろうし)
数万〜十数万行くらいはあるんじゃないか

569 名前:デフォルトの名無しさん [2015/11/15(日) 13:18:28.52 ID:sKF/cfhp.net]
むしろスクリプトでリアルタイムで弾幕を調整することが目的だろうな
ゲームはバランス調整とかが面白さのカギだからな

570 名前:デフォルトの名無しさん [2015/11/15(日) 13:32:37.24 ID:V8NTA7lA.net]
あ、またおかしくなってた
リアルタイムで出来るようにしてるのか
ソースコード凄い量だな
俺は長くても2万行しか書かないからそこまで時間掛かるとは思ってなかった



571 名前:デフォルトの名無しさん [2015/11/15(日) 13:36:06.34 ID:sKF/cfhp.net]
調整用のノブとかレバーとかがあって
それを動かすことで弾幕を調整できるようになってるっぽい

572 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 13:48:22.71 ID:gyJr19GH.net]
> 俺は長くても2万行しか書かない
> 3秒もかからないものだと思ってた
嘘つき ID:V8NTA7lA は死ね
てか嘘つきって何でこんな意味のない嘘をつくんだろう

573 名前:デフォルトの名無しさん [2015/11/15(日) 13:51:26.35 ID:V8NTA7lA.net]
え。。
dxlibのラッパー合わせたらそのくらいあるけど、3秒かからないよ

574 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 13:58:34.66 ID:4LMfzWCO.net]
弾幕スクリプトとやらが何時から導入されたのか知らんが結構歴史長いし、
今は数秒〜十数秒程度でコンパイル出来るけど昔はもっとかかったんじゃないのか

575 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 14:10:17.13 ID:IT6gF8gc.net]
昔は数百行のプログラムでもコーヒー入れていっぷくできていたが、最近は一瞬だな
make -jなんてしたら数万行でも一瞬

576 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 14:10:32.11 ID:ZxsxGSS5.net]
そもそも、全体のコード量が何十万行あったとしても更新された分しかコンパイルする
必要ないだろうに。まさか自動生成されるヘッダを全部のソースにインクルードするような
アホなつくりをするとも思えんし。

577 名前:デフォルトの名無しさん [2015/11/15(日) 14:15:30.09 ID:sKF/cfhp.net]
例えば音楽作るのだって聞きながら作るよな
いちいち全部wavにしてから視聴しない
それのゲーム版だと思えばいい

578 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:57:42.64 ID:K62AMl2G.net]
そのための分割コンパイルですよ

579 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:26:01.43 ID:R15Ww/xo.net]
>>542
ドメイン特化スクリプトの目的は大抵特定ロジックを試行錯誤しながら書く際の効率を高めるため。
ソースコードに変換するか、スクリプトもしくはバイトコードを解釈するランタイムを埋め込むかの違いは速度がクリティカルなら前者、デザイナーみたいな人間を使った分業開発なら後者だけど、そうでないならどちらでも大した差はない。
個人開発ならその時の気分が大きいだろう。

580 名前:.パンティーガァル mailto:sage [2015/11/15(日) 18:12:46.07 ID:WZ0Q9prU.net]
>>562
左様
さらに言うならそういう用途ならインライン展開しまくり&コンパイル時間掛かりまくりのC++なんか捨てて
最初からCで逝けってこったw



581 名前:uy [2015/11/15(日) 19:14:25.53 ID:VVKd20XZ.net]
c++で全部書くわけないじゃん

c++がスクリプトと比べて何が劣ってるのか理解すべき

582 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 01:44:05.54 ID:7yHHnP/U.net]
職種別、資格別、スキル別の平均最低月給リスト
jobinjapan.jp/cate/
全掲載求人109,160件の平均最低月給195,800円

C++の求人 の平均最低月給216,000円
jobinjapan.jp/job-listing/keyword-cpp-pg.html

583 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 02:01:56.94 ID:4p5ov1Aj.net]
安いなー。手取りいくらになるんだ

584 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 16:30:49.38 ID:zms46H5z.net]
日本はC++が分野ごと息絶えてるって聞くけど
ここのコアな住人もプロでやってる人は少ないんじゃないの

585 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 19:03:02.69 ID:nM/1wF+C.net]
確かに少ないかもな
そもそもC++書けるってやつが少ないかも
そのおかげで俺みたいな個人事業主にも発注があって助かります

586 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 20:42:59.28 ID:TvcCpGLD.net]
X[i][j][k][l] = A[i][v][w][x] * B[j][v][y] * C[k][w][y][z] * D[l][x][z]

のような多次元行列積を最速でやりたいと思ったらさ、右辺がただの行列積の連続になるように添字の順番を入れ替えてBLASみたいな線形代数演算のルーチンに投げるのが一番だよな?

でもそのやり方では、各添字が1〜Nだとすると中間生成物の多次元行列のサイズが最大でNの5乗になる
それがメモリ的にキツい場合はどのように実装したら良いだろう?
10個の変数を愚直にループで回すくらいしか思い付かないんだが、これは最悪だよな?

587 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 21:58:37.56 ID:EYXzMg1y.net]
スレ違いだが、そんなレベルなら何も考えずにライブラリ使うのがいいんじゃないか?

588 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:44:51.08 ID:TvICL1RJ.net]
>>571
どのライブラリ?
添字の縮約を一度にできるライブラリがあるの?

まぁアルゴリズムスレで聞くべき話題だったと思うので、移動することにします
失礼

589 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:51:10.04 ID:skOZM3LY.net]
アルゴリズムスレなんてなくね

どこに移動する気なんだ

590 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:59:27.02 ID:+K0mRhMl.net]
データ構造,アルゴリズム,デザインパターン総合スレ 2
peace.2ch.net/test/read.cgi/tech/1362301811/



591 名前:デフォルトの名無しさん mailto:sagete [2015/11/17(火) 01:34:54.58 ID:mTy4uFbL.net]
これはどの程度真に受けていいのでしょうか?
monobook.org/wiki/Bjarne_Stroustrup_%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%93%E3%83%A5%E3%83%BC

592 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 02:00:19.38 ID:vhPJDvYj.net]
>>575
日本語が読めれば解ると思うんだけど何が知りたいの?

593 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 02:00:46.79 ID:HbGe248J.net]
こういうバカも実在するんだ

594 名前:デフォルトの名無しさん mailto:sagete [2015/11/17(火) 03:38:13.51 ID:mTy4uFbL.net]
答えられない人には訊いてないです

595 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 03:45:22.76 ID:hCC9Eug4.net]
真に受けてはダメです

596 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 03:45:25.60 ID:+Z1Wb6Hb.net]
>>570
メモリも時間計算量も抑えたいなら自分で計算すればいいじゃん
どちらにしろインプレイスで処理できないならメモリは必須だろ

597 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 03:58:20.84 ID:Hk9c0pnU.net]
明らかにネタだけど、真に受けていいのかという問いかけには、じゃあ誰の回答も真に受けていいのかという話になるので、あなたが自分で考えて納得する以外に方法はない。

じゃあ君はどう思う?それが唯一君が納得する答えだよ。

598 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 07:47:43.98 ID:vhPJDvYj.net]
ジョーク文書って書いてあるのにどの程度真に受けていいのかとか日本語読めないとしか思えないんだけど?

599 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 11:03:02.19 ID:2Ns9WBgW.net]
つまり
「ジョークと書いてあるので真に受けてはいけない」
と答えれば満足行くわけかね

600 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 13:08:57.39 ID:0utt7BoB.net]
ジョークではあるけど、戒めでも有るから、初心者が読むには良い文章なんだけどな
C++は良い部分だけを上手く活用してなんぼの言語だからね



601 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 13:24:06.90 ID:ZdmPhf6a.net]
もうC++みたいなクソ言語に初心者を巻き込むなよ
ジジイたちのオナニ言語で勝手に俺スゲーしてろ

602 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 14:36:17.09 ID:5fHlJfRB.net]
処理が早いって聞いて学んでるけど正直やめたい

603 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 14:45:23.69 ID:0utt7BoB.net]
他の言語も同様程度には複雑だから、何やっても一緒だぞ

604 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 14:48:02.58 ID:JCt1lq+9.net]
んなこたーない
他言語はもっと単純
C++は「意味のない煩雑さ」が多い言語

605 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 14:50:50.48 ID:Xq9knrfv.net]
さて、そんな皆さんにご用意したのが、この

C

です!

606 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 15:14:32.69 ID:HbGe248J.net]
>>588
例えばどの辺が「意味のない煩雑さ」だと?
その煩雑さとやらが何故そうなったのか、あなたが意味を見出せない、
或いは、意味を見出そうしないだけなんじゃないですかね

607 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 15:15:46.82 ID:/zPinGq0.net]
「自分には理解できない」
が抜けてるだけだろ

608 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 15:26:20.33 ID:1Xdfjtqs.net]
ヤバい面白い。
本人の反論文書(なんたらopen channel)も読んでみたいけど見つからん。

609 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 15:39:40.06 ID:PebPi9W7.net]
ttps://m.srad.jp/~taro-nishino/journal/503243
これかな

610 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 16:25:51.50 ID:1Xdfjtqs.net]
>>593
thx!



611 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 17:31:40.90 ID:5VMzV+9C.net]
>>569
個人事業主でやっていけてるってことはそれなりに高スキルとみた
でもうちみたいなお固い企業だとそういうとこに発注できないんだよなぁ
リスクがどうだの信用照会は通るのかだの・・・
下手なとこに発注するよりよほど良いはずなのに
特にC++バリバリ使うような案件だと

612 名前:デフォルトの名無しさん [2015/11/17(火) 19:00:51.79 ID:+c9tLHNn.net]
分厚い8000円くらいするC++リファレンス本を購入しそうなターゲット層の住むスレ

613 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 20:23:22.10 ID:uYtrfvr1.net]
>>595
腕の良し悪しよりも安

614 名前:心(ゼニ)が大事なんや
フリーランサーは賠責保険に加入するべきなんや


「ウチの案件を受ける場合はまずコレコレの会社のこの保険に加入してください」
[]
[ここ壊れてます]

615 名前:uy ◆Qawu9.2l1E [2015/11/17(火) 20:39:26.45 ID:ZbjRFgjU.net]
>>590
peace.2ch.net/test/read.cgi/tech/1420379468/950-957



616 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 21:45:04.42 ID:5VMzV+9C.net]
>>597
なんだかなって思うわ
まぁ今更な話題だが

617 名前:デフォルトの名無しさん [2015/11/18(水) 22:45:50.07 ID:oenAzU52.net]
>>596
いいじゃん、なりふり構うために耳ふさいでるバカいないってことなら

618 名前:デフォルトの名無しさん [2015/11/19(木) 01:26:10.66 ID:6x5+bHoL.net]
リファレンスを書籍化されても、それって単なる更新の止まったC++入門サイトのようなものだから

619 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 06:18:47.24 ID:ApowG8Dl.net]
リファレンスなら
en.cppreference.com

www.cplusplus.com
でいいよな
本は検索もできなくて使い勝手悪いし

620 名前:デフォルトの名無しさん [2015/11/19(木) 08:58:46.38 ID:JIJtk7D/.net]
ブラッド・コックスとトム・ラブがObjective-Cを作り「この言語はCのメモリ安全性とSmalltalkの高速性を合わせたものだ」と宣言する。
現代の歴史家は2人が失読症ではないかと疑っている。
https://twitter.com/okdshin/status/666903312151613440



621 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 18:58:37.37 ID:cVDALBAT.net]
どうしようもないクソ言語ということですね

622 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 21:19:35.24 ID:Q69wQH7X.net]
俺も他でレスしちゃったけどそれマルチ
内容はジョーク文書だった

623 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 23:07:11.25 ID:dLb/5HwU.net]
リファレンスと言ったら規格
それ以外は参考書

624 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 23:11:53.81 ID:Q69wQH7X.net]
参考書はreference bookだよ

625 名前:uy ◆Qawu9.2l1E mailto:sage [2015/11/20(金) 00:06:42.29 ID:QlSu2hgW.net]
C++の多種多様な機能は、別に良いんだけど
2つの使われない理由を挙げてみよう

1、多くのアプリは動的言語の速度で間に合ってしまう
2、C++を使う時は最高速のコードを組みたい時、
  そういう時に、C++の何を使ったらどのくらい遅いか調べるのも面倒なので
  結局C++の機能の殆どを使わないのでは?


静的言語でここまで出来るようになったという観賞用ソースコードの域を出ていない


個人的にはC#、JAVA、C++という選択肢があったらC++選ぶけれど
そもそも静的言語で多くのソースコードを記述する機会がなくなったと思う
現在の静的言語の役割とは、動的言語から使用する為のモジュールを作って終わり

626 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 00:14:32.19 ID:AMmCkZV3.net]
Ruby3.0で静的型が導入されてからまた来てくださいね

627 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 00:21:51.59 ID:ms2dnfiV.net]
>>608
それ重要な役割だろ…

628 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 01:01:07.26 ID:7Mk50+GE.net]
前々から気になっていたんだけれどもプラグイン形式のソフトウェアってどうやって作ればいいの?
どういうふうにプラグイン形式を実装してるかさっぱり想像つかないんだけど

629 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 01:10:54.60 ID:xFdS5SzN.net]
cとluaの連携でも試してみると分かりやすいんでない
大雑把に言えばAPI決めて所定の手続きで拡張の余地を作るだけのことなのだけど

630 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 01:20:09.43 ID:vozKP37P.net]
C++の達人って技術に見合った対価をもらってなさそう

そういや前に2chで聞いた話だけど、SAP開発のエキスパートとかすごいらしいな
自分たちじゃどーにもならないSAPユーザ



631 名前:に対しゴルゴ13のごとくさっそうと現れ、
クライアントとほとんど交流せずに一人ホテルに2週間缶詰して華麗に解決し
さっそうと帰っていくという・・・年収数千万オーダーだと
[]
[ここ壊れてます]

632 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 01:41:33.88 ID:7Mk50+GE.net]
>>612
プラグイン用のディレクトリにぶっこむだけで動くプラグインとかあるじゃん?
あれはプラグイン用のクラスかなんかでディレクトリ読み込んでまとめて呼び出して実行してんの?

633 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 05:55:25.20 ID:mKFSoHrL.net]
>>614
ネイティブコードのプラグインを作りたいならdynamiclinkのlibraryを作って決められたディレクトリに入れる
それらに対して
dlopenで開いてdlsymで関数のアドレス取ってきて実行(WindowsならLoadLibraryとGetProcAddress)

予めinterface(シンボル名とそのinout)を決めておけば読み込んだファイルによって異なる動作をさせることが出来る

例えば画像ファイルプラグインだったら

サポートしている形式の拡張子を返す関数
ファイルのバイナリデータを渡すとRGBA32bitの配列と高さ幅を返す関数

とか有れば対応するプラグインを探し出してデコードする事が出来るよね

あと、そういうの作るときはC言語互換の関数にした方がいい。理由はC++はコンパイラによってシンボル名もクラスのABIも変わるから。

634 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 06:57:11.86 ID:KfJz9Mn6.net]
てか使われていないと言う話がよくわからん。
実際使わないところも多いのだろうが、使うところが極端に少ないというほど使われていない調査結果なんてあったっけ?
個人の主観による偏ったサンプリングの結果でしょ。

コンパイラやブラウザとか一般の目につくところで使われている分、全く目にしないということは少ない言語だと思うのだが。

635 名前:デフォルトの名無しさん [2015/11/20(金) 08:09:59.46 ID:DKlXZRvY.net]
webとかwindowsしか見てないんじゃね

636 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 08:26:48.90 ID:BmwCPVtJ.net]
> 使われていない

俺の回りでは (キリッ

ってことでしょ

637 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 10:27:28.40 ID:FnrKl1QX.net]
一回LFSをやればc/c++がいかに使われているかが分かると思うんだがなぁ。
LFS内でc/c++以外で使われてる言語っつったらautoconf/automakeにmake、m4、perl、sed、awk、grep、flex/bison、
それにTclなんかが少しずつ使われてるくらいか。

とやや的外れな突っ込みをしてみる

638 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 13:20:49.61 ID:7Mk50+GE.net]
>>615
詳しくありがとう

639 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 14:15:16.83 ID:SnNAjHh0.net]
new Hoge[12](arg1, arg2);
みたいな書き方はg++とかclangとかでもエラーになるけど昔の何かの環境では
問題なくコンパイルできてた記憶がある
この辺の経緯を知ってる人がいたら教えてください
それと同じような事をしたかったらどうすればいいかも教えてくれると助かります

640 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 16:57:03.25 ID:AMmCkZV3.net]
しらないけど
new hoge[12]{ a1, a2 };
とか
new hoge[12] = { a1, a2 };
とかは試してみた?
俺は試してないから
動くかどうか知らんが



641 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 17:56:26.14 ID:eapfkFrg.net]
>>621
std::vector使え
要素数reserveして一つずつemplace_back

642 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 18:01:07.80 ID:eapfkFrg.net]
Hogeがコピー出来て全部同じ値初期化でいいなら
v.resize(12,Hoge(arg1,arg2));
でもいい

643 名前:621 mailto:sage [2015/11/20(金) 19:42:52.26 ID:SnNAjHh0.net]
みなさん返答ありがとう!
>>622
コンパイルエラーだった…
>>623
こんなの

644 名前:ェ追加されてたんだ
若干ソースは冗長になるけど結局やってる事は同じになるんだな
>>624
コンストラクタが1回しか呼ばれなかった
[]
[ここ壊れてます]

645 名前:621 mailto:sage [2015/11/20(金) 19:45:18.88 ID:SnNAjHh0.net]
>>623
ちなみにvector使わずに同じ事って出来るの?

646 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 20:25:42.57 ID:eapfkFrg.net]
>>626
mallocとplcement new使えば出来るけどお勧めしない

647 名前:621 mailto:sage [2015/11/20(金) 20:49:53.12 ID:SnNAjHh0.net]
>>627
とりあえずソースというかヘッダーを見てみたけどc++11の機能を使えば
できるっぽい感じがした (あいかわらず難解だな…)
後は自分でもう少し調べてみるよ

648 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 20:55:59.43 ID:eapfkFrg.net]
>>628
03で出来るよ。11でそれをやりやすくなった機能は特にない。

素直にvector使っときな。

649 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 21:16:17.90 ID:FYcH3zZp.net]
>>629
いいからコテ付けろよ

650 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 22:13:46.34 ID:eapfkFrg.net]
>>630
なんで?



651 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 00:41:01.91 ID:rACYfPqD.net]
>>621
new Hoge[12](arg1, arg2);
これはどんなことを期待しているんだ?

Hoge(arg1, arg2)で配列全てを初期化
配列をHoge(arg1),Hoge(arg2),以下はHoge()にする

652 名前:超音波テロの被害者 [2015/11/21(土) 02:58:33.14 ID:OmX67Z3Y.net]
超音波テロの被害にあっています。
卑劣極まりない被害にあっています。

何が起こったかわからないときから、
わかってみれば、
まだ世の中に知られていない超音波テロ。

653 名前:超音波テロの被害者 [2015/11/21(土) 02:59:01.72 ID:OmX67Z3Y.net]
世の中のどれだけの音の振動源・発信源が
使用されているのかわからないが、
多数の振動源・発信源がシステム化され、
ネットワークを通して、
超音波・音波を集中させて
対象を攻撃するらしい。

654 名前:超音波テロの被害者 [2015/11/21(土) 02:59:37.09 ID:OmX67Z3Y.net]
人や社会が襲われ、罪もない人が超音波で襲われ、
卑劣な被害にあっています。
聞こえる声、音。超音波テロの加害者の声。

「もらいました」という声とともに、
形のあるもの、ないもの、奪っていき、壊していく
超音波テロの加害者の声。
聞こえる声、音。超音波テロの加害者の声。

655 名前:超音波テロの被害者 [2015/11/21(土) 03:00:13.10 ID:OmX67Z3Y.net]
超音波による物理的な力で、
ものが飛び、ものが壊れる。
それが人間の体に対してまで。

身体の表面を突き抜け、内臓を攻撃される。
頭蓋骨を突き抜け、意識を失わされる。
聞こえる声、認識できない声で、精神的なダメージ。
人間の体を壊そうとする超音波テロ。

656 名前:超音波テロの被害者 [2015/11/21(土) 03:00:46.41 ID:OmX67Z3Y.net]
日本国中、どこにいても超音波で襲われる。
車に乗っている人間が襲われる。
歩いている人間が襲われる。
自宅で超音波の攻撃を受ける。

被害を訴えても信じてもらえない。
罪もない人間が超音波で襲われる。

657 名前:超音波テロの被害者 [2015/11/21(土) 03:01:53.54 ID:OmX67Z3Y.net]
「見続けるのがいやだから、殺して終わる」、
「証拠隠滅だ」という超音波テロの加害者の声とともに
強烈な超音波の攻撃。
叫ばされ、いたぶられ、
超音波テロの卑劣な被害にあっています。
心の底から被害を訴え、祈っています。

天に神に届きますように。

658 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 06:28:37.30 ID:GdR6w5S8.net]
>>632
バカの特長はイメージだけで会話していて、
詳細を確認してみると答えられず
ただ会話できた気になっていただけのことが多い。
つまり何も考えていない

659 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 06:57:16.09 ID:rG1U6ao0.net]
学会における俺が丁度そんな感じだ

660 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 07:01:17.98 ID:z75NBL1W.net]
女の会話は100%その類



661 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 07:49:23.72 ID:WnHcVy1K.net]
超音波が身体の表面を突き抜けるのは当たり前。
だがネットワークのケーブルは音波の振動を伝達するのに向いていないから
音の伝送媒体として使うことは現実的に難しいだろう

662 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 12:28:51.78 ID:UH5fCNhv.net]
struct A{
template <class T> operator T&();
operator std::string

663 名前:();
};
こういうクラスがあったとき、
MSVCだと
std::string str=A();
でtemplateの方が呼ばれるの何でなん?
stringの場合参照返したくないんだけど回避方法ある?
[]
[ここ壊れてます]

664 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 12:34:10.95 ID:+qmJr5EI.net]
画面の中の俺の彼女は計算しつくされた会話をしてくれるぜ

665 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 12:37:44.25 ID:JXjswKeV.net]
>>643
戻りの型ではオーバーロードできないよ。
コンパイルエラーにならないのに驚き。

666 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 12:47:20.28 ID:UH5fCNhv.net]
>>645
キャスト演算子な

667 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 13:00:31.13 ID:sVK4zYvW.net]
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
最初にnを入力してもらい
n文字を一文字ずつ入力させ
それを並べ替えてできる順列を全て列挙しろ
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc 4.8.1
 [3.3] 言語:どちらでも
[4] 期限: 無期限
[5] その他の制限:特になし

自分で作ったところ7文字の順列には1秒かかるかどうかなのですが10文字にすると15秒くらいかかります。
確かに階乗は爆発的に大きくなりますが、仕方ないのでしょうか

668 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 13:19:39.66 ID:2FFj0oRp.net]
必要なだけメモリを確保しておいてそこに文字列を展開して
printf("%s", buffer);
したり
write(STDIN_FILENO, buffer, length);
したりしたら少しは速くなるんじゃない?
あるいはファイルに書き出してみたらどうなる?
windows上でgcc動かしたこと無いから実際どうなるかは知らんけど、
7文字の順列(重複が無ければ約5000通り)の列挙に1秒はどう考えても掛かり過ぎてる。

669 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 14:27:55.67 ID:+qmJr5EI.net]
>>647
コード貼ったら?

670 名前:uy ◆Qawu9.2l1E mailto:sage [2015/11/21(土) 15:42:51.71 ID:uVehkYL0.net]
>>633-638
専門家によると、3時間しか寝ていない人は、4時間しか寝ていない人に比べ、睡眠時間が1時間少ないという研究結果が出ています。



671 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 15:57:00.75 ID:wPUZshUi.net]
たまには面白いことでも言ってみろよ

672 名前:647 [2015/11/21(土) 16:04:52.60 ID:sVK4zYvW.net]
>>649
すみません、ちゃんとctimeを利用して測ったところ
n=7 0.0124s
n=8 0.1012s
n=9 0.952s
n=10 9.856s
でした

>>650
https://ideone.com/fFeukM

673 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 16:09:06.21 ID:wPUZshUi.net]
ちゃんと計算量に比例してるじゃないか

674 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 16:11:57.73 ID:GdR6w5S8.net]
車輪を再発明すんな
std::permutation使え

675 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 16:18:10.69 ID:sVK4zYvW.net]
>>654
そんな便利なものがあったのですか、、、
algorithmの存在は知っていたのですが、データ構造を覚えてる段階だったのでまだ触れていませんでした、、、

676 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 16:53:35.71 ID:2FFj0oRp.net]
>>655
39行目と42行目のcoutへの出力を削ったらどのくらいの時間になる?
どうも単にcoutが重いだけに見えるんだけど。

手元の環境で試したら(非Windowsだけど)、
そのまま, n=7 ==> Time : 0.009858
2つcoutを削った物, n=7 ==> Time : 0.000465
と20倍近く速くなったけど。

677 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 17:32:42.75 ID:sVK4zYvW.net]
>>656
何かしらの出力をしたいのです
実機では
cout と fout で foutの方が早かったので、そちらを使っています。

678 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 17:57:03.03 ID:2FFj0oRp.net]
>>657
>>648読んだ?
一度に出力すりゃいいじゃんって言ったんだけど。

https://ideone.com/2dfghh

679 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 22:37:41.73 ID:LN6XBRmt.net]
redirectしたら速いんじゃね。
console

680 名前:の速度に影響されているだけだろう。 []
[ここ壊れてます]



681 名前:uy ◆Qawu9.2l1E [2015/11/22(日) 01:44:24.74 ID:+n9aAbt6.net]
>>652
https://ideone.com/wDp0Du

682 名前:621 mailto:sage [2015/11/22(日) 04:38:14.98 ID:X/fYYmto.net]
>>639
なんか間接的に俺が馬鹿にされてるみたいだから>>632に答えるけど
>>623で同じ結果になると>>625で既に返答済み
>>632の人はこれで理解できた?もっと分かりやすく言った方がいいか?

683 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 07:13:37.54 ID:XdXJy7qN.net]
まさに
>会話できた気になっていただけ

684 名前:デフォルトの名無しさん [2015/11/22(日) 07:54:06.34 ID:+Vn4cJWj.net]
会話の相手はエスパー....周りはすごい奴だらけなんだろうな

685 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 08:06:30.80 ID:XdXJy7qN.net]
オブジェクトを少なくとも12個生成したのに
コンストラクターが1回しか呼ばれない異能のコンパイラーのようだ

686 名前:デフォルトの名無しさん [2015/11/22(日) 08:53:35.95 ID:ZD+TX9lw.net]
trivialなコンストラクタが呼ばれてるのに気付かず騒ぐアフォとかか?

687 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 11:04:36.72 ID:/1Ux32Jq.net]
↑trivialの意味も知らずに使ってみたかった大学生

688 名前:621 mailto:sage [2015/11/22(日) 14:43:58.95 ID:22+yRhdX.net]
久々にこのスレ来たとか会話とか連呼するアホばっかになってんだな…

689 名前:uy ◆Qawu9.2l1E [2015/11/22(日) 14:49:46.81 ID:hFpqZnLD.net]
学生9割のスレで何言ってるん

690 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 16:35:51.18 ID:vYPMz+tE.net]
ほんとバカばっかでまともな奴見たことがないよね



691 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 22:21:43.51 ID:bqva/aW3.net]
************** JIT デバッグ **************
Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、
またはコンピューター (machine.config) の構成ファイルの jitDebugging
値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを有効にしてコンパイルされなければ
なりません。

というのが出てきてアプリが起動できません。
解決法教えてください

692 名前:デフォルトの名無しさん [2015/11/22(日) 22:31:34.54 ID:ZTXK4DbK.net]
_scprintfのC++標準版はどの関数ですか

693 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 22:39:51.97 ID:DXehIZQK.net]
snprintfじゃねーの?

stackoverflow.com/questions/16351523/vscwprintf-on-mac-os-x-linux
みたいにvsnprintfにva_startして投げてもいいけど。

694 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 22:42:20.20 ID:Y+QuE8W5.net]
>>670
その起動しないソフトのスレかサポートにでも聞いてくれ

695 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 02:15:24.62 ID:X7nA4OxA.net]
クラス内関数の引数で配列受け取ったらsizeof(配列)/sizeof(配列[0])しても長さが2しかないンゴ
20バイトあるはずンゴおかしいンゴ

696 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 02:22:04.94 ID:kEUHEwN+.net]
>>674
vector使え

697 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 02:23:05.17 ID:b98i53Mh.net]
>>674
関数の引数に配列は渡せないよ
渡せるのはポインタ

698 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 05:41:04.46 ID:sX9R0Aqt.net]
C++11以降はinsertとpush_backの代わりにemplaceとemplace_backを使えという話を聞きます
無駄なオブジェクトのコピーと破棄がないからというのが理由らしいですが、そもそも
insertとpush_backをそのようにすればよかったんじゃないでしょうか?
わざわざ新しい関数を作ったということは、何かそうする意味があったということでしょうか?

699 名前:デフォルトの名無しさん [2015/11/23(月) 10:14:47.25 ID:KuAQlUq5.net]
>>672
これのワイド文字列版はどれですか

700 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 10:19:28.05 ID:OK+rBFmG.net]
>>676
言語の欠陥だよな。配列のポインタを渡すのと、配列を渡すのが同じ動作になるなんて。



701 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 11:11:28.26 ID:sPPVeBSO.net]
>>679
??

配列は先頭とサイズのセットで特定されるんだから、必ずその2つを渡す必要がある
生配列だろうが、vectorだろうが同じこと
それが明示的に見えるかどうかの違いしかない

702 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 11:43:54.74 ID:hCdJkAL3.net]
少なくとも関数の引数の配列宣言がポインターになるのは糞としか言いようがない

703 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 11:51:50.68 ID:X7nA4OxA.net]
ありがとナス!
後学のためになぜクラス内関数に配列のポインタを渡しても配列の正確なサイズが測れないか教えてほしいンゴ

704 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 11:59:26.75 ID:HCtl1Hii.net]
void f(先頭要素へのポインター)
{
}

どうやって測るつもりだお前は
測りたければC使え

705 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 11:59:52.19 ID:nxfGVCVi.net]
クラス内関数にかぎらず関数の話だと思うけど
sizeofの不思議な仕様だよな、配列のサイズが測れるのが

706 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 12:04:25.19 ID:5/8mbdQh.net]
sizeofは関数じゃないので

707 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 12:09:36.01 ID:Fj1Djrod.net]
>>682
ポインタ変数も配列もデータとしては同じ
つまり"あるオブジェクトのアドレス"としての情報量しかない
配列ではその"あるオブジェクト"が配列の先頭オブジェクトであるというだけ
配列として確保した場所では、確保したサイズが静的にわかるから
sizeof()で配列全体のサイズを取れるが
一度関数に先頭アドレスが引数として渡されたら、渡された側では
"あるオブジェクトのアドレス"という情報量しかないから
"その先に何個オブジェクトが並んでいるか"なんて知りようがない
知るためには、
- その引数に渡す配列の大きさを静的に決めておく
- サイズも一緒に渡す
- 終端データを決めておく
といったことが必要

708 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 12:19:44.80 ID:+Ddm9172.net]
でも、配列の名前を参照すると右辺値ポインタ的な何かになるって仕様のおかげで
mallocなんかで確保したポインタを配列のように扱えるってのが自然に行えるので
まーまー良く考えられていると思うよ
アセンブリの感覚に近い

709 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 12:21:28.56 ID:X7nA4OxA.net]
ありがとナス!
引数に配列長も渡して解決したンゴ。
テンプレートはまだ触らないんンゴ。黒魔術って聞いたことあるンゴ

710 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 12:27:06.06 ID:X7nA4OxA.net]
vectorがテンプレートだと勘違いしたンゴ
忘れてクレメンス



711 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 13:29:00.02 ID:rbzy+nqq.net]
配列への参照を渡すことはでき、その場合は長さ(要素数)もわかるよ。

712 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 13:34:48.41 ID:kEUHEwN+.net]
>>683
C…?

713 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 13:40:38.54 ID:NLqUjyrO.net]
そもそも配列は普通に関数の引数として渡せるだろう。

714 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 15:03:32.38 ID:1SvbKstr.net]
>>677
C++11より前は可変長引数テンプレートが使えなかったのでemplace系は出来なかった

715 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 15:14:57.57 ID:BLfdTv5g.net]
そこら辺りはコンパイラが最適してたな
アンパサンド参照渡しで問題ないし
暗黙の型変換起こるのはプログラム書いているやつがヘタクソってだけのことだし

716 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 17:58:02.11 ID:UY1pSnQK.net]
>>683
void f(const char* s)
{
 size_t len = strlen(s);
 printf("%Iu\n", len);    // "%Iu"はVC固有
}

あるいは先頭が文字数の文字列(確かPascalのやつとか、BSTR型)だとか…

とか逝ってみるテスト

717 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 18:03:59.62 ID:5aEjJ0S2.net]
Visual C++なら%zuだろ

718 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 19:26:36.28 ID:UY1pSnQK.net]
>>696
いやそれが!
ttps://msdn.microsoft.com/library/tcxf1dw6.aspx
> I、I32、および I64 の長さの修飾子のプレフィックスは Microsoft 拡張機能であり、ANSI 互換姓がありません。
>hh、j、z、および t の長さのプレフィックスはサポートされていません。

719 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 20:02:04.55 ID:adyi0o7H.net]
>>6

720 名前:88
ンゴンゴ言ってんじゃねーよ。

>>690>>692のいう通りだ。
テンプレートを使え。
[]
[ここ壊れてます]



721 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 20:28:50.58 ID:9bEmVQ8p.net]
>>697
そっち(vcruntime140.dll)じゃなくてUniversal CRTの方は直ってるはず
普通にprintf("%zu", sizeof(double))してみ

722 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 05:12:52.37 ID:R3jHI5aT.net]
>>699
レスdクス、貴重な情報あり〜
とはいえ
>Universal CRT
    | (インストールマンドクセ…           
    |  ('A`)    
   / ̄ノ( ヘヘ ̄ ̄

ウインドーズアップデートで勝手に入るらしいのを待つ、

723 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 10:59:13.49 ID:PNMHyUFz.net]
Fortranは配列渡すとサイズも分かるから便利ではあったな
Cは言語やランタイムが暗黙の処理をするのを極力排除する方針だから
今の仕様になってんだろうね

724 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 12:18:15.20 ID:1SleeXaD.net]
低レベルの処理は配列サイズは固定の場合が多いし、OS書くためのアセンブラの代替が目的だから。

725 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 13:00:44.07 ID:PNMHyUFz.net]
配列がFortranと同じ仕様だったとしてもOSは書けるでしょ

726 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 13:07:11.79 ID:1SleeXaD.net]
省けるサイズ渡しの処理コストを最下層のOSに負担させるの?
昔のCPUの非力さ考えたら、やっぱり当時の判断としてないね。

727 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 13:14:51.19 ID:2IyJeQ15.net]
何言ってるんだ?Cには値渡ししかないんだから、今の仕様は当然だろ

728 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 14:13:11.85 ID:VjysyORC.net]
揚げ足を取るようだが、ポインタ渡しを値渡しのポインタ版でしかないというなら、
参照もポインタもなんでもかんでも、値渡しになってしまうやで

729 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 14:15:42.81 ID:qZ9OT4oo.net]
お前らFortranの仕様を知らんのか?
配列は単にポインタ+サイズが渡されるだけだぞ
(自前でサイズの変数を用意したりする手間が省けるってだけだ)
丸ごと配列が渡されると勘違いしてないか?

730 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 14:20:35.37 ID:SGPcTC2U.net]
だからもう生配列なんか使わずにstd::vectorかstd::arrayを使えと



731 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 14:30:26.02 ID:qZ9OT4oo.net]
あとFortranはコンソール出力も言語仕様に含まれてたから、Cだとprintfが
実行時にフォーマット文字列を解釈するところをコンパイル時に解釈して
多分最適なバイナリを出力してた (変数の不一致もコンパイル時に分かる)
だから昔の非力なPCでもコンソール出力が爆速だった
大量の数値を出力する時はその差が馬鹿にならなかった
今はどうでもいい話だが

732 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 15:20:54.87 ID:VjysyORC.net]
>>708
vectorだろうと配列だろうと同じこと
結局先頭の場所とサイズを渡してる

733 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 15:28:16.37 ID:SGPcTC2U.net]
>>710
だから生配列を使う場合はサイズを自前で渡す必要あるでしょ
テンプレート使えばその手間を軽減できるとしても
多次元配列になると面倒なことになる
その点vectorやarrayなら標準的なサイズ取得手段が用意されているということ

734 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 19:02:02.62 ID:DVbUiEch.net]
>>709
コンソール出力でプログラムがボトルネックになる環境なんて聞いたことない
そもそも昔の FORTRAN の話であれば出力はラインプリンタか IBM ゴルフボールタイプライターなのでいかに非力なマイコンですら追いつかないとかあり得んし

735 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 19:41:21.83 ID:C+mqbgnu.net]
ラインプリンタはかなり速いよ?
昔ほど相対的に印字の方が速かったわけだよ

736 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:03:56.87 ID:qZ9OT4oo.net]
>>712
286か386とかの頃だぞ
聞いた事ないってそりゃ聞いた事ないだけだろ
インター

737 名前:ネットも普及してない頃だし []
[ここ壊れてます]

738 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:07:21.11 ID:qZ9OT4oo.net]
>>712
あとボトルネックになるなんて一言も書いてないのに曲解にもほどがある
大量の数値を出力する時に気になるぐらい差がつくって言えば分かるの?

739 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:39:03.96 ID:SWzWjpEY.net]
>>713
汎用機に繋がる高速ラインプリンタでも 1,500行/分程度
1,500行/分×132文字/行 = 198,000文字/分 = 3,300文字/秒
1文字1バイトとして、約300μs に1文字なので初期の 8bit マイコンだと DMA がないとちょい苦しいぐらい
まあ、数千万クラスのラインプリンタにマイコン繋ぐ奴がいるとは思えないが

740 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:42:59.31 ID:OSTSPIeY.net]
>>377
Cは知らんがC++ではハーブサッターが提案してるようだぞ
P0144



741 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:43:59.67 ID:SWzWjpEY.net]
>>714-715
286/386 の時代なら printf のフォーマット文字の解釈なんてたいしてかからん
数値から文字列への変換は FORTRAN でも必要だから、違いがあるとしたら各々の出カルーチンのできとかの問題だろ

742 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:46:40.26 ID:C+mqbgnu.net]
>>716
1MIPSのマシンで数十のタスクを動かしてると全然間に合わないんだよ

743 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 20:57:46.96 ID:qZ9OT4oo.net]
>>718
とりあえず想像で言うのはいいよ
絶対的な時間を言ってんじゃないよ?フォーマット文字列の解釈と可変長引き数
の処理が必要ないFortranの方が圧倒的に速いに決まってんじゃん

744 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 21:02:04.27 ID:NlhBd7gP.net]
>>720
Qにマジレス、かっこ悪いぞ
コイツはキチガイなので議論するだけ時間の無駄

745 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 21:22:21.09 ID:gTfZY7AW.net]
>>711
テンプレートだとしてもサイズは渡す必要がある
C++での列の抽象化と、実装でどこまでカプセル化するかを区別して話しましょうと言いたかっただけ

俺だって生配列なんか使わずにstd::vector使えよというのは完全に同意だよ

746 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 21:28:45.00 ID:RjS/u5NO.net]
>>722
サイズは渡さなくても受け取った側でわかるでしょ。

それはともかくスコープの短いその場限りの固定長配列なら生配列を使うことはあるな。

747 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:02:30.51 ID:SWzWjpEY.net]
>>719
> 数十のタスクを動かしてると全然間に合わないんだよ

そんな後出し条件出されても困る

748 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:05:35.75 ID:C+mqbgnu.net]
常識だよ
誰が8bitマイコンにラインプリンタつないでFORTRANで出力するんだっての

749 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:10:51.57 ID:SWzWjpEY.net]
>>720
想像じゃないと言うなら、比較したCと FORTRAN の処理系の名前をどうぞ

> フォーマット文字列の解釈と可変長引き数の処理が必要ないFortranの方が圧倒的に速いに決まってんじゃん

普通の頭持ってたらコンソールへの I/O の処理の方が圧倒的に重いことはわかるはず
VRAM に直接出力できるならその限りではないけどそんな処理系見たことないし、そもそもそれって言語仕様の話じゃないしな

750 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:14:03.09 ID:C+mqbgnu.net]
頓珍漢もいいとこだな



751 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:19:57.94 ID:SWzWjpEY.net]
>>725
何の常識か知らんけど、普通に汎用機に繋ぐ話なら数十ぐらいのタスクでラインプリンタに間に合わないとかあり得ない
汎用機は I/O プロセッサ持ってるし
計算センターとかだとラインプリンタより10倍速いページプリンタですら、システムに8台とか繋いでるのは普通にある
プリンタは用紙搬送と言う物理的動作を伴うからこれ以上の性能向上は難しい

752 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:21:34.92 ID:SWzWjpEY.net]
>>727
頓珍漢としかレスできずに悔しいです
って言うのはわかった w

753 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:22:56.59 ID:C+mqbgnu.net]
まぁ昔話だからな
いつの間に今の話になってるんだか知らんが

754 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 22:32:53.29 ID:YrcuLR5W.net]
>>730はキチガイコテハンQより知能が低いなんて
もう生きているのも恥ずかしい

755 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 23:02:23.40 ID:SWzWjpEY.net]
どれくらい昔の話をしたいのか知らんが、286/386 辺りの前から汎用機にしろPCにしろ、ラインプリンタに追いつかないシステムなんて見たことないなぁ
過負荷試験とかの特殊な状態とかならわかるが、通常状態でプリンタごときにデータ供給しきれないなんてシステムの設計ミスにしか見えんし
ちなみにページプリンタの話すら 15年前の話だぞ
今の話ってどこから出てきたんだ?

756 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 23:58:07.41 ID:gTfZY7AW.net]
>>723
受け取った側でわかるのは渡してるから
生配列はサイズがコンパイル時に決まるから、テンプレートで処理すると渡さなくても分かるように見えるだけ

757 名前:デフォルトの名無しさん [2015/11/25(水) 00:15:50.74 ID:Vd1+RMMI.net]
今のページプリンタって、内容的にはシリアルドットプリンタだよな

カン!!って一発の打撃で一行打つのがラインプリンタなら
同様にボッ!!っと一発のキセノンで1ページ打つのがページプリンタだが
たいていのやつはそうなってない

758 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 00:25:12.77 ID:YTudM7kD.net]
>>733
それは屁理屈だ。

759 名前:デフォルトの名無しさん [2015/11/25(水) 01:10:12.26 ID:Vd1+RMMI.net]
いや情報が与えられるタイミングが翻訳時か実行時かは切実な問題で
屁理屈で片付けめでたしにはならないよ

760 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 01:18:35.68 ID:djITcnYk.net]
どうでもいいけど今時のコンパイラならprintfに渡したフォーマット文字がリテラルなら静的に解析して最適化するよ
例えばclangとかだと型間違えるとコンパイル時にフォーマット文字と型ちげえよって警告出るよね



761 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 01:26:29.48 ID:T3SJIv30.net]
引数にポインタを与えて、その関数内でポインタをdeleteする場合
func(void*p) とfunc(void**p) どっちが良いのでしょうか?

762 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 01:35:43.20 ID:djITcnYk.net]
>>738
そんな関数を作るなが正しいunique_ptrかshared_ptr使え

763 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 01:41:00.59 ID:wwtRzQvg.net]
ニッポンの平均最低月給と人口の都道府県別、市町村別ランキング
求人情報113,957件の平均最低月給196,400円 ♬

あなたの住む街は第何位?平均最低月給はいくら?
jobinjapan.jp/area/

764 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 04:14:25.73 ID:bcxVqDWn.net]
このスレでFortranが熱く語られるとはw
大学とか研究室とかだといまだに残ってるんだよねFortran
でも初めてプログラムを学ぶ学生にとっては可哀想

765 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 04:21:27.10 ID:eZQMgmgd.net]
>>560
そのアホな作りをメンテ中

766 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 04:32:32.11 ID:eZQMgmgd.net]
ほとんどの現場で「同じコードを二度書くな」とか「短いコードが読みやすい」という常識が無い

767 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 06:57:53.15 ID:2XtuZnsc.net]
>>741
知ったか爺が暴れてただけでしょ

768 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 07:10:59.80 ID:rt0m4xM1.net]
>>743
意味も理解せず機械的に形を真似る低能の典型的な信仰の一つですね

769 名前:デフォルトの名無しさん [2015/11/25(水) 07:11:56.20 ID:YbqZzFFd.net]
>>713
メインフレームにもページプリンタ繋がってるぞ。
あの繋がったプリンタ用紙がバサバサ出て来る。

770 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 08:18:30.69 ID:SibVDZBg.net]
>>741
まさか21世紀なのにFORTRAN77をやらされるなんて思わないよな



771 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 08:23:09.32 ID:YbqZzFFd.net]
>>747
再帰スレにはFORTRAN77を信奉して、再帰絶対に禁止と、布教してる爺さんがいる。

772 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 08:52:28.45 ID:A3UqQzxB.net]
>>745
俺もな、現場を見ていると、
「意味なんか考えなくていい。
ぐだぐだ考える前に>>743を実行してくれ」
って思うようになった。

773 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 09:33:09.03 ID:LoKzz2Cb.net]
発展途上国かよ

774 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 10:10:03.12 ID:fCnsK2cL.net]
俺も研究室時代はFortranが全てだった
Fortran2003でコードを書く自分を先進的だと思ったりもしたw

まあ、色々な言語を経験した上でFortranにするならいいんだけど
教員や学生に最低限のプログラミングリテラシーがあったら日本の研究は相当底上げされるんじゃないの?

775 名前:デフォルトの名無しさん [2015/11/25(水) 10:36:45.21 ID:y0tfJcvP.net]
fortranの話はどうでもいい

776 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 10:39:15.80 ID:s9hTLLjK.net]
ほんと。そもそもfortranを駆逐できなかったのはc++が不完全だったから。

777 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 11:27:57.90 ID:djITcnYk.net]
完全な言語など無いわな

778 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 11:55:11.62 ID:n/g2lh6I.net]
Lisp「ガタッ」

779 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 12:30:27.72 ID:38cA3W2G.net]
class Unko{
public:
int smell;
int amount;
}

Unko* unko = new Unko{ 100 , 1000 };
こうやって初期化できること初めて知ったんだが、
本とかで使ってるの見たこと無いんだけど、使ったことある?

780 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 12:36:42.45 ID:ZxQAt2k5.net]
それは縮小変換を許さない初期化



781 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 12:36:53.96 ID:n/g2lh6I.net]
>>756
あるにはあるけど。

コンストラクタ定義して丸括弧を使うか、
あるいは最低でも
c99拡張なら {.smell=100, .amount=1000}
gnu拡張なら {smell: 100, amount: 1000}
みたいに読みやすくするかな。

最近はnewなんて使わずに全部make_sharedに投げてるし。

782 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 14:11:09.53 ID:UAq2OPe9.net]
>>726
お前は本当に馬鹿だな
絶対的な速度を言ってんじゃないよ?(2度目)
IOが重かろうが差がついたと言ってんだよ
処理系はとっくに忘れたが両方GCCだったはずだ
バージョンは知らん

783 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 14:15:19.89 ID:s9hTLLjK.net]
今も昔もprintf()の実装が糞なのは認める。昔は高速なputs()使えなんてのはよく言われたものだ。

784 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 15:11:37.21 ID:6L0AsNvY.net]
>>760
> 今も昔もprintf()の実装が糞

どの実装がどの実装と比べて
どの点がどういうふうに糞なの?

785 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 16:38:34.83 ID:O+sc6fcj.net]
>>753
君、学生でしょ?
20前後の。

786 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 16:47:38.57 ID:n/g2lh6I.net]
少なくともprintf(vfprintf)のglibc実装は糞だろ。
450行から成る巨大な関数に35個のgoto、入り乱れたマクロ、CHAR_Tとcharがぐちゃぐちゃに混ざり、
-1をポインタ型にキャストして比較!
おまけにインデントまでタブとスペースが混ざってる。

その点putsは良いね。20行に満たない小さな関数でgotoフリー、キャストなんかのきな臭いテクニックも使われておらず
全てのインデントがスペースから成っている。
他に何か言うことある?

787 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 16:54:37.38 ID:Sra0FKsR.net]
code.woboq.org/userspace/glibc/stdio-common/vfprintf.c.html
これか
確かに読めといわれても読めんわ

788 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 17:41:38.10 ID:qW/TsJAB.net]
>>763
冗談で言ってるのかどうか計りかねるんだが…
1) 実装と言うわりにソースコード上の表現にしか言及していない
2) 可変長引数でさらにフォーマット文字を扱うものと、そうでないものを比較
3) じゃあどんな素晴らしい実装がほかにありえるのか

そしてそれを批

789 名前:サするお前はどんだけのprintfを実装してみせてくれるのか []
[ここ壊れてます]

790 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 17:54:57.71 ID:7xFqT66+.net]
いやC++のスレッドなんだから、「そこでストリーム出力ですよ。
自作のクラスだってきれいなフォーマットで表示できちゃう」
とprintf()廃止論に持っていくんじゃないかしら。



791 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 18:13:04.55 ID:l+3JfIO+.net]
・仕様に完全に対応し
・バグなく
・メモリも過剰に消費せず
・実行時間も過剰に消費しない
・長く使われて(結果的に)広くテストされている

このレベルまでもなかなか到達できないと思う
その上で、ソースが整理されてるとか
実行時に省メモリだとか高速だとかの話が出来る

792 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 18:52:05.27 ID:n/g2lh6I.net]
>>765
>>760
> 今も昔もprintf()の実装が糞なのは認める。昔は高速なputs()使えなんてのはよく言われたものだ。
に対する、>>761
> どの点がどういうふうに糞なの?
に対して冗談交じりの横槍を入れただけなのだけど。
printfとputsをわざわざ比較した理由はそれ。

# 実装しろというなら今度してみるけど、
# printfの現行のISOによる仕様がちょっと複雑なので(8ページにもなる!)
# K&Rのprintfの仕様への対応で勘弁して欲しいね。

>>767
正論だけど
あの8ページくらいになるprintfの仕様書の該当箇所と、400行ちょっとになる関数とを比較して
仕様書通りの動作に確実になるって言える勇気ある?
ひょっとしたらいつものようにGNUの拡張が紛れ込んでるかもしれないんだけど。

793 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 19:15:21.35 ID:q7ajOTDt.net]
>>768
> に対して冗談交じりの横槍を入れただけなのだけど。

先走ってしまって大変申し訳ない
ユーモアのセンスが俺に欠けてたねw

> # 実装しろというなら今度してみるけど、

その苦労を分かる人にそれをお願いなどできません

794 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 19:22:32.60 ID:n/g2lh6I.net]
>>769
こちらこそ微妙なジョークを言ってしまってすまない。

795 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 19:26:09.15 ID:cXbSMUtR.net]
clangのprintfの実装はどんなもん

796 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 19:53:59.52 ID:eZQMgmgd.net]
>>745 みたいな奴、職場にいる。OSは知っているがコーデングは何も知らず恐ろしいまでの難読コード書く奴

797 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 20:06:08.50 ID:38cA3W2G.net]
Microsoftのサンプルコード読んでるうちに長いコードが偉いという考えになった

798 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 20:14:50.71 ID:5w30c50m.net]
>>773
アレは参考にしちゃいかんぞ

799 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 20:29:39.76 ID:s9hTLLjK.net]
>>765
Pascalの実装に決まってるじゃないか。

>>766
それだよそれ、C++の欠点。書式stream。誰が使うねん。

800 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 20:49:36.95 ID:eZQMgmgd.net]
PascalはC++で組むの?



801 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 21:08:14.63 ID:RAN2jGuk.net]
FORTRANだよ

802 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 21:53:52.49 ID:7xcGCsmA.net]
>>759
> IOが重かろうが差がついたと言ってんだよ

100秒と 100.01秒なら、100秒の勝ちって奴ですね
一生ほざいてればいいんじゃね? w

803 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 00:22:56.72 ID:XvZIFf4u.net]
printf()はvfprintf()を使えば書ける
vfprintf()が何でどう書かれているのかは考えたことも無いが

804 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 07:33:06.27 ID:gnba9wz+.net]
>>779
着想は間違っていないが踏み込みが足りない。
vfprintf() は vsprintf() で文字列に整形してから
fputs() を使って出力するのだ。

805 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 11:42:26.02 ID:w6z7subU.net]
>>780
いやいや、fputsを使ったら暗黙の改行が追加されるからそれでは駄目。
vfprintfをvsprintf使って実装するならfputsの代わりにfwriteを使わなきゃ。

806 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 11:48:07.78 ID:cMOPjOrt.net]
fputsは改行追加しないでしょ

807 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/11/26(木) 12:08:03.91 ID:0Rc82yPU.net]
それがfputs(stdout, ...)とputsの違い。
リファレンスで確認せよ。

808 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 12:39:56.96 ID:w6z7subU.net]
ごめん、fputsは改行を追加しないとか(単に使わないから)知らんかったわ。

809 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 12:53:33.04 ID:cMOPjOrt.net]
>>783
ファイルポインタは第2引数な
int fputs(const char *S, FILE *FP);

810 名前:780 mailto:sage [2015/11/26(木) 16:24:54.78 ID:gnba9wz+.net]
「printf() の実装に vfprintf() を使う」に乗っかって
「ならば vfprintf() の実装には vsprintf() じゃい」と
深く考えもせず書いたネタだった(皆さんお気付きと思うが)。

puts() と fputs() の挙動の違いなんて意識してなかったよ。
ちょっと勉強になった。



811 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 17:26:28.03 ID:GUUXPrkk.net]
木とかグラフを表すコンテナは追加されないの?

812 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 17:32:56.04 ID:xvh9rNnd.net]
結局のところ、vsprintfとvfprintfのコードは共通なの?

813 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 17:56:34.22 ID:w6z7subU.net]
>>788
うん。
glibcではvsprintfはvfprintf使って作られてる。

814 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 23:33:27.11 ID:huY8yWFD.net]
>>789
逆じゃね?

815 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 23:46:27.20 ID:eXAV4Cml.net]
そんな糞関数よりC11のvsnprintf_sをはよ規格に入れるべき

816 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 00:18:56.84 ID:D0U2RhLm.net]
struct と書いたあと、 class にしなきゃならないと判明した時点で class に変える?
それとも class と書いたあと、 struct で十分だと判明した時点で struct に変える?

817 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 00:22:44.18 ID:jQDKzCya.net]
デフォルトがprivateかpublicかの違いだけじゃないの

818 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 00:24:46.51 ID:biLzdC6e.net]
↑何のデフォルトか分からずに言ってるバカ

819 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 00:38:40.02 ID:cxyGwFn6.net]
>>792
>しなきゃならないと判明した時点で class に変える?
しなきゃならないことをしないほど
お前は低能なのか?

>struct で十分だと
classはstructの上位版でないので
「十分」という考え方はおかしい

820 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 00:52:12.98 ID:Bpp9Chxs.net]
>>790
逆だと思うじゃん?
> glibcではvsprintfはvfprintf使って作られてる。
で正しいんだぜ。
code.woboq.org/userspace/glibc/libio/iovsprintf.c.html



821 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 00:54:17.82 ID:D0U2RhLm.net]
>>795
>しなきゃならないことをしないほどお前は低能なのか?

「時間のずれ」って概念はわかる?

822 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 01:08:13.77 ID:Bpp9Chxs.net]
classとstructは元々概念からして全くの別物だからな。

まぁ仕様上はデフォルトのmember access controlがprivateかpublicかの違いしか無いけど。

823 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 01:11:48.13 ID:B/NYVAdM.net]
ネーミングセンスないよな。virtualとか日本の誤訳のせいで混乱してるのだけど。

824 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 01:18:49.43 ID:Bpp9Chxs.net]
まぁ某言語のrplaca関数より随分マシだけどな。

825 名前:デフォルトの名無しさん [2015/11/27(金) 02:01:45.18 ID:mL1+69Nb.net]
>>798
その違いについて、ゲーハーは「誤りであった」と語っているな

826 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 06:22:22.35 ID:soZ3p4k0.net]
>>798
継承を忘れるんじゃない!

827 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 08:38:40.74 ID:Bpp9Chxs.net]
>>802
structも継承出来るよ。

828 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 08:43:13.48 ID:yE5slmiS.net]
>>792
struct でいい場合はstructとしておきたい、というのはわかる。

829 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 08:44:42.58 ID:yE5slmiS.net]
>>803
ベースクラスがデフォルトでprivateかpublicかの違いのことじゃない?

830 名前:デフォルトの名無しさん [2015/11/27(金) 08:54:21.94 ID:BUdTfJfj.net]
完全C互換の時のみstructにしてる



831 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 08:55:43.21 ID:xVNmanwA.net]
>>796
マジか、知らなかった

832 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:04:54.22 ID:cYQ+kigl.net]
全メンバーprivateなクラスなんてほぼ無いんだからデフォルトprivateとか無駄だよな

833 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:10:23.44 ID:jQDKzCya.net]
で、結局お前は何が言いたかったん?>>794

834 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:15:20.65 ID:lqAStIIQ.net]
>>808
カプセル化って知ってる?
原則private例外的にpublicと、その逆は別

835 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:33:48.43 ID:cYQ+kigl.net]
>>810
全メンバーprivateなクラス書いたことある?
一つでもpublicがあったらpublicってかかなきゃいけないよね?
逆にprivateなメンバーがないクラスなんてざらにあるよね?
此処まで言わなきゃわからない?

836 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:40:52.95 ID:jQDKzCya.net]
基本private、公開したいものだけpublicて方針の方がいいと思うよ

837 名前:デフォルトの名無しさん [2015/11/27(金) 10:48:05.99 ID:BUdTfJfj.net]
publicにしたいなら明示的に書かないとダメってのが安全ってもんだ
そこで楽をしたいわけじゃないしな

838 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:59:50.87 ID:yE5slmiS.net]
>>811
一応賛成しておこう。
カプセル化は大切だが、privateメンバを持つことが目的ではないし、無いに越したことはないからな。

839 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:00:17.17 ID:yE5slmiS.net]
>>812
基本的public

840 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:17:52.15 ID:cYQ+kigl.net]
一度publicって書いたらそれ以降publicになるC++の仕様でデフォルトprivateにしようが、考えなしのやつは一番上にpublicって書いて終わり、どうせ一度は書かなきゃいけないんだからな。
そういう奴に少しでも考えさせるならJavaやC#みたいに一つ一つ書かせないと意味がない。

それに最初にpublicなメンバー(そのクラスのinterface)を考えるだろ、そのための内部実装で必要になったらprivateなメンバー書くpublicはほぼ必須だがprivateは必須じゃない。



841 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:23:14.28 ID:lqAStIIQ.net]
>>811
ええ…
privateがないクラスなんてほとんど書かないし、
privateしかないクラスも結構普通に書くが…
てか実装クラスは普通全部privateじゃねーの?

842 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:24:55.94 ID:lqAStIIQ.net]
あ、実装クラスでもコンストラクタはpublicにするか

843 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:32:42.69 ID:cYQ+kigl.net]
お次の方どうぞー

844 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:42:48.07 ID:cYQ+kigl.net]
次の方って言っちゃったけど言及するとなんでもかんでもpublicメンバー全部virtualなベースクラス作ってそれを派生して実装作ってベースの参照を使うようにして実装の隠蔽(キリッ)とか言ってる人に見えるね

845 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:43:12.07 ID:Je5SN0dZ.net]
>>819
お前だろwww

846 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:47:28.87 ID:cYQ+kigl.net]
>>821
メンバー全部privateなクラスを書く人ですか?

847 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:50:20.23 ID:H/eLoV2h.net]
なんかID:cYQ+kiglみたいなプロマネが入ってきてプロジェクトが死にましたみたいなWeb小説なかったっけ?
面白かった記憶があって、また読みたいんだが、どうやって検索すればいいかわからん

848 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:56:45.43 ID:cYQ+kigl.net]
>>823
staticおじさんのことならそれでググれば出てくると思うよ。

オブジェクト指向が無意味だなんて一言も言ってないんだが、理解出来ないのかする気がないのかまともな反論がないから何処が通じてないのか解らないよ

849 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:01:45.27 ID:fmEy0pN3.net]
構造体の初期化をHTML風に書こうとして

#define <UNKO> new Unko{
#define </UNKO> }
class Unko{
public:
}

Unko* unko = <UNKO >

</UNKO>

こうやったんだけど、全角使わないでHTML風に書ける?

850 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:07:53.99 ID:H/eLoV2h.net]
>>824
辿ったら見つかった、ありがとう
てか、モデルが実在したの知らなかった

横から見ててあなたは実装とインターフェースを分離することを否定してるように見えるよ
しかもC++ではpublicメンバーをvirtualになんかしないでしょ
インターフェースクラスはNVIで書くのが普通なんじゃない



851 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:10:35.03 ID:BmEzTRfI.net]
メンバ全部privateなら外から何のメソッドも呼べないじゃん

852 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:22:51.34 ID:wCyF/5aJ.net]
> 逆にprivateなメンバーがないクラスなんてざらにあるよね?

素直にカルチャーショック?だわw
privateが無いクラスとか一回も書いたこと無いわ俺

853 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:31:16.93 ID:yE5slmiS.net]
>>828
マジで?!
俺は極力structにしているが、一度すべてをpublicにしたクラスを作ってみては?
もちろんカプセル化は保つんやで。

854 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:33:49.86 ID:H/eLoV2h.net]
>>829
カプセル化とはなんだったのか

855 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:34:05.81 ID:5aaazbOS.net]
>>826
どのあたりが否定してるように読めましたか?具体的に教えて貰えると有り難いですが
全てpublicになんて言ってるわけじゃないのは解るよね?

本当に思いつかないやつも居るみたいだからめんどくせえお前らの為にpublicしか書かない例挙げてやるよ
std::runtime_error(もしくは類似クラス)をエラー種別毎に例外分けれるように毎に派生させる場合

856 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:34:55.03 ID:TF2ho38j.net]
すべてpublicでかつカプセル化を保つコードというのが想像できないのだが
カプセル化のイメージが違うんだろうけど、具体的にどんなコードになるの?

857 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:39:08.56 ID:5aaazbOS.net]
>>832
クラス内のprivateで定義したクラスとかcppで定義したクラス(所謂pimpl)とか
は全部publicでもカプセル化保てるよな?

858 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:42:02.77 ID:H/eLoV2h.net]
>>833
pimplはもともと#define private publicから逃げるためのものなんだから、その例は適してないでしょ

859 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:42:42.97 ID:yE5slmiS.net]
>>832
カプセル化とは役割とか責務といった単位で適切にプログラムが分割されていることを示す。
その役割のなかに「状態を保持する」というのが含まれていれば確かにそれはprivateにすべきだろう。
だが適切に責務が分解されていれば、そんなたくさんのクラスに状態を持たせる羽目にはならないと考えているがどうか?

860 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:43:17.45 ID:BmEzTRfI.net]
確かにファイル単位のカプセル化で十分な場合も有るわな



861 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:43:25.01 ID:TF2ho38j.net]
コンストラクタでpimplをnewし、デストラクタでpimplをdeleteするとして
publicにしたら外部からdeleteされる危険性は?

862 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:44:05.57 ID:yE5slmiS.net]
あと、ひとつのクラスにいろんなことやらせない、ってのもあるな。同じことかも知れんが。

863 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:44:06.51 ID:B/NYVAdM.net]
privateだろうとソースの中身は隠蔽されず、仕様はPGが確認可能で、
仮にすべてpublicでもclassで構造化さえすれば誤った使い方などまずされない。

仕様はよく分らないけど、publicだから適当に変更してみようなんてPGがもしいるとしたら、
どんなにオブジェクト指向で書いてもバグだらけになるものだ。

864 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:44:16.49 ID:5aaazbOS.net]
>>834
じゃあ何の例を挙げてるの?
>>837
そっちはprivate使えばええやん?誰も禁止してないぞ?

865 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:44:42.38 ID:H/eLoV2h.net]
>>835
それはモジュール化
カプセル化とは別の話

866 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:45:37.60 ID:yE5slmiS.net]
>>841
独立した話ではない。

867 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:45:59.44 ID:BmEzTRfI.net]
外部に公開するクラスはカプセル化するんだろうよ
内部で使うクラスはカプセル化しなくても良い場合も有るってことでしょう
cppファイル内で定義していて内部で使っていて外部に公開しないものとか

868 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:47:16.40 ID:yE5slmiS.net]
>>835で「示す」と表現したのは確かにまずかった。「結び付いている」とでもしておけば良かった。

869 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:47:18.73 ID:cLgBtIY2.net]
privateにするのって使われないためでしょ
使われちゃうと変更がしにくくなる

カプセル化と単一責任原則混同してるやつとかもいるし魔境か

870 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:47:52.95 ID:B/NYVAdM.net]
カプセル化、モジュール化は構造化プログラミングの延長。CやVBでDLL化してもモジュール化、カプセル化したのと効果は同じだ。



871 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 13:04:01.68 ID:bqhj4B2t.net]
>>832
つgtk

872 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 13:10:18.27 ID:5aaazbOS.net]
俺は最初からpublicしか書かない事も多い+privateしか書かないことなんてほぼ無いんだからデフォルトpublicでいいじゃん?ってだけなんだが、
で何か否定な人が多いからpublicなメンバーしか書かないクラスの例を挙げたんだけど、一体何処へ発展させようとしてるんだ
これまでデフォルトがprivateである利点を誰も挙げてないよね?
メンバーをprivateにする理由じゃないぞ?
(c++の指定方法で)デフォルトがprivateである利点だぞ?

873 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 13:12:30.98 ID:yE5slmiS.net]
>>845
単一責任原則を進めるとカプセル化も向上する、と言っている。同一視しているのではなく、そのような関連があると主張している。
読めばわかることだ。

874 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 13:12:54.30 ID:iguHMbMo.net]
書き忘れたときにprivateのほうがいいからだろ
とりあえずpublicにしろとか正気か

875 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 13:20:17.00 ID:jQDKzCya.net]
デフォルトpublicがいいならstruct使えばいいだけやん
C++のポリシーにケチつけたところで仕方ないんでないの

876 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 14:12:31.06 ID:z4U9lx1Y.net]
書き忘れたとき、ってのはさすがに
書き忘れんなよ!って思うけどw
多数派のためのサービスというか
言語としての方針だろうね

Rust: デフォがimmutableでmut付けるとmutable
C++など: デフォがmutableでconst付けるとimmutable

877 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 14:32:05.11 ID:jQDKzCya.net]
mutableはC++ではキーワードだからその書き方はちょっと微妙

878 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 14:34:20.94 ID:yE5slmiS.net]
>>852
>C++など: デフォがmutableでconst付けるとimmutable

それはインスタンス生成したときのそのインスタンスの話?
メンバ関数のことじゃないよね。

879 名前:デフォルトの名無しさん [2015/11/27(金) 18:46:28.24 ID:W14KsSJ2.net]
struct a { /* const */ int b; } const c;
c.b = 1; //mutableなら通るんだがw

880 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 19:37:00.74 ID:8/X8Q1kn.net]
>>853
> mutableはC++ではキーワードだから

ドゥフフw
そんなもんがあるとは夢にも思いませんでした
お前ら混乱させてごめんなw



881 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 20:19:01.07 ID:HYprTEnv.net]
昔はprivateにアクセスする可搬性のある方法が無かったけど
数年前に誰かがテンプレート使った技を発明してからアクセスし放題になった
privateなんか無駄だから嫌ならpimplしとけ

882 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 21:10:31.45 ID:fmEy0pN3.net]
どういう技?

883 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 21:15:28.12 ID:5aaazbOS.net]
昔同じ事宣うやついた気がするけど全然アクセスし放題じゃねえなあと思った記憶がうっすらと
どっちにしろ心底どうでもいいけど

884 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 21:23:44.44 ID:tedP7Lps.net]
cpp.aquariuscode.com/legal-private-access

こういうやつか

885 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 22:00:13.63 ID:fmEy0pN3.net]
なにそれ
利点がわからん

886 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 22:24:49.26 ID:m7rZTJ7h.net]
printfとstd::coutってprintfのが汎用性高くない?
でも、綺麗なプログラム書く人はstdで出力してるんだよね。なぜ?

887 名前:デフォルトの名無しさん [2015/11/27(金) 22:25:53.25 ID:YUPaOys9.net]
googleの社員はstream禁止されていたらしい

888 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 22:27:28.86 ID:e7/qHuAp.net]
>>860
それじゃないだろ
>>860みたいなインチキ技に終止符を打った完全版のはず
初めて見たときはC++のクソさに衝撃受けた

889 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 22:51:58.56 ID:ZcxS6DTK.net]
>>862
お前の目が糞だから糞コードがきれいに見えてるだけ
でも行くのは眼科じゃなくて精神だぞ

890 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 23:28:55.57 ID:xVNmanwA.net]
>>851
賛成
ってか、実際俺は使い分けてるわ
比較的高機能なものはclass、ファンクタレベルの小さいものはstructって感じ



891 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 00:06:16.35 ID:W/xTcAqm.net]
>>866
イイネ

俺もTMPでメンバがtypedef(using)だけの時なんかは struct
いわゆるオブジェクト指向的なやつだと class

892 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 00:53:07.74 ID:f8SBho2z.net]
structを作った時はこれはstructだからpublicなメンバ変数のみにしよう!と考える。

だけどコンストラクタで初期化したいし、ToString()とかアルゴリズム用のファンクタとかやっぱ欲しい。

であれよこれよと拡張しているうちに、うん、これはclassだな、ってなる

893 名前:デフォルトの名無しさん [2015/11/28(土) 01:37:13.21 ID:WnPFZ4IQ.net]
>>860
面白かった
thx

894 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 01:40:32.92 ID:l6i0EIJ3.net]
>>709
コンパイル時に決まるIOストリームを嫌う人が多い謎

895 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 02:01:24.09 ID:W/xTcAqm.net]
メンバ変数持ったらclassでしょ

896 名前:デフォルトの名無しさん [2015/11/28(土) 02:23:39.02 ID:wnz9/ADF.net]
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
wc2014.2ch.net/test/read.cgi/entrance2/1448404407/-13

897 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 03:14:03.21 ID:a7Onrmik.net]
やっぱclassに比べてstructと呼称した方がより低抽象度・具象的なイメージがある故に、メモリレイアウトを詳細に指定する用途では気分でstructにする、
あるいは、複数のオブジェクトを集約しとくだけの入れ物が欲しいときもstructにする
(これは全メンバpublicでただ集めただけのコードになる。カプセル化は個々のメンバ単位で実現
後者の書き方は、手続きとセットにして初めて意味を成すような、独立したクラスとは言いがたいデータの集まりを表すのにもうってつけ、

な希ガス、

898 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 08:47:26.75 ID:s4cXb24H.net]
privateとか使わないので常にstruct使ってる
本気で外部から隠したい場合ってどうせPimplにするからstructのが楽だし

899 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 11:22:07.96 ID:nQUlWFmj.net]
てか、メンバの特殊化っててきないよね

900 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 17:54:12.03 ID:s4cXb24H.net]
>>875
できるよ
https://ideone.com/kl9lFE



901 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 17:56:02.46 ID:6Lrpyhjo.net]
このバカの言ってることはそういうのとじゃない

902 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 17:58:50.04 ID:s4cXb24H.net]
すまない、よくわからないので説明してほしい

903 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 18:10:35.72 ID:nQUlWFmj.net]
ごめん、部分特殊化がだめなだけだった

904 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 18:28:03.34 ID:s4cXb24H.net]
function templateの部分特殊化は1yでも無理だね
なんで未だにできないんだろ
クラステンプレートで実装できるから不要って判断か?

905 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 19:12:48.35 ID:pohBt4lh.net]
そりゃtemplate classと違って同じ関数にいくらでもtemplate含めてオーバーロード出来るからだろう。
どれに対する特殊化か指定するのがややこしすぎるし、adl含めてどれが呼ばれるのかも今以上にカオスになる。

906 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 21:01:07.59 ID:dohK3Eb1.net]
部分特殊化なんていう作業が必要なc++って腐っているだろ。自動でやれるようにしろよ。できない理由が有るのか?

907 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 21:42:10.21 ID:MBn8Lywe.net]
自動でできない所をわざわざ部分特殊化しているのだが

908 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 22:59:11.76 ID:W/xTcAqm.net]
おいおい楽しい部分を自動化してどうすんだよ

909 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:51:16.21 ID:pohBt4lh.net]
部分特殊化と同じことが自動でできるとかそんな超技術があるなら、あらゆるプログラムがなにも指示せずとも自動で出来上がることになるからプログラマもプログラミング言語も不要になるな。

910 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:49:27.53 ID:tikXtbZT.net]
>>880
スコットメイヤーですら理由がよくわからんと言っていたような
S.T.Lavavej氏は同時検討の時間が足りなかったと言っていたような



911 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 01:16:22.95 ID:KmrpGp6z.net]
>>881
既にテンプレート含めたuser-defined conversionとかも発動条件がカオスだからなあ
逆に言えばこれ以上増えたところで今更な気もw

912 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 01:31:12.27 ID:KmrpGp6z.net]
>>881
調べてみたがfunction templateはオーバーロードされないね

>>886
知識不足で規格でそうなってるとしか言えない事はあるけど
メイヤー先生すらわからないのかよ

913 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 01:40:17.88 ID:7XGZYDJa.net]
関数テンプレートが部分特殊化できたら
true_typeのタグディスパッチみたいな糞コードが少しマトモになるな
template<typename T> auto f(T t) {
 return f_impl<is_xxx_v<T>>( t );
}

914 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 02:17:04.66 ID:KmrpGp6z.net]
SFINAEのコードが綺麗になるなあ
でもconstexprが変態になりそう

>>888 捕捉 一般の関数との間のオーバーロードです

915 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 16:22:25.42 ID:KrqWIN7R.net]
>>888 function templateはオーバーロードされない?

どういう意味だ?

916 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 20:47:38.92 ID:pijv15rJ.net]
バカのたわごとにいちいち反応するだけ無駄

917 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 01:16:38.33 ID:5zESIF5z.net]
>>891
ごめんなさい、勘違いしてました
ADLとの兼ね合いは曖昧になるのでエラーになると思ったんですが
テンプレートと一般関数だと必ず関数が優先されるので起こらないんですね
全く逆の事言ってしまいました

918 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 16:51:29.05 ID:utXyFQyI.net]
>>886
なんだ、何か深遠な理由があるのかと思ったらw
初学者は文法や規約を学ぶときその意義を自分なりに咀嚼するもんだけど
こういうとこで無駄に悩むのは哀れだな

919 名前:デフォルトの名無しさん [2015/12/01(火) 21:18:59.66 ID:3itGlQru.net]
コンストラクタの中で、thisを使っちゃだめなの?

920 名前:デフォルトの名無しさん mailto:s []
[ここ壊れてます]



921 名前:age mailto:2015/12/01(火) 21:20:18.16 ID:eT3ZeD+F.net [ >>895
仮想関数を使えないだけ。


...だっけ? ]
[ここ壊れてます]

922 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 23:35:25.39 ID:s1rcgCDh.net]
メンバ初期化子の中でthisを使えないだけなんじゃ…

923 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 23:57:28.13 ID:dJ602Izb.net]
純粋仮想関数を使うのがダメなだけ

924 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 00:35:35.05 ID:0XpBrEKR.net]
コンストラクタの中でthisを何に使うん?

925 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 00:47:04.28 ID:qI5sGkUB.net]
thisポインタに代入するとメモリ割り当てを自力で行え(命令
あとコンストラクタの引数の名前が思いがけずメンバの名前と一致してしまったときとか

926 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 00:49:43.48 ID:zaOCqs+2.net]
普通に使うだろ
lock_guard(T& lk):lk_(lk)
{
lk_.lock();//this->が省略されてるだけ
}

927 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 01:41:02.91 ID:bhBQTEux.net]
class C {
public: C(int n) {this->n = n;}
private: int n;
};

928 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 01:57:56.53 ID:zaOCqs+2.net]
>>902
その例だと初期化子リストつかえという話になるから良くない

929 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 02:16:20.18 ID:dpb/NTdw.net]
言いたいことは分かるからいいじゃん。

930 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 03:04:20.24 ID:KW5mtzU/.net]
初期化子リストなら : n(n)でいけるしな



931 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 09:13:21.89 ID:BlTQmdzi.net]
みんなありがとう
コンストラクタの中ではthisは使っちゃいけないんだな
使わないようにするわ

932 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 10:09:28.84 ID:hYuIR41h.net]
なんでそうなる
必要性が薄いだけで別に使っていいんだぞ

933 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 16:44:36.73 ID:BlTQmdzi.net]
>>907
なんか静的エラーチェックにかけたらダメだったよ

934 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 17:54:06.75 ID:SG5bn8pD.net]
>>908
どんな静的チェック掛けてるか知らんけど、何事にも基本と例外があるのよ

935 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 19:37:52.50 ID:zThpLiMk.net]
>>908
静的エラーチェックってlintとかのことだろ?
それは与えられたポリシーに従っていないコードを弾くためのツールだぞ。

936 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:20:21.26 ID:OrMGyZIC.net]
lintってw

937 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:29:37.40 ID:jBVkagxP.net]
なんでlintに草生えるの?

938 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:30:57.08 ID:5Y1e+QK6.net]
CFront誕生から11/27で30年やそうや
ttp://cpplover.blogspot.jp/2015/11/c30cfront.html

ぽまいらは30年前どんなプログラム言語で何のプログラムを書いていましたか

939 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:30:59.28 ID:zaOCqs+2.net]
静的解析つーたらこべりてぃとかPSV-Studioじゃねえの?

940 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:32:10.56 ID:zaOCqs+2.net]
節子それPVS-Studioや



941 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:32:34.80 ID:5Y1e+QK6.net]
>>912
lintは関数プロトタイプとか引数の宣言がK&Rの頃のやつなので…

942 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 20:33:50.61 ID:5Y1e+QK6.net]
なんと奇遇な!
>>913の記事はCFrontをPVS-Studioでソフトウェア的に裁判にかける話

943 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 21:35:13.94 ID:hYuIR41h.net]
lintも立派な静的解析なのに
-Weffc++も知らなそうだ

944 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 22:33:42.15 ID:5Y1e+QK6.net]
実際知らんが
糖衣構文まみれの実用プログラミング言語の静的解析とかぜってー泥臭い判定ロジックの塊になるに違いないと確信するから
タダでそんなの作ったりテストしたがるプログラマは少数だと思うから
この場合は個人的にはどっちかというとOSSよりプロプラエタリのやつを選ぶ
希ガス

945 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 07:19:25.74 ID:zCQ/Nhg2.net]
>>918
lint も(当時としては)立派な静的解析だけど、今時コンパイラのチェックで十分じゃね?
って話だろ
それ以上を求めるなら、Coverity なり CodeSonar なりを入れればいいかと

946 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 09:34:06.90 ID:7lfAnJct.net]
今時ANSICのがlintとかそれこそ何時の話だよ
lintとは今やコード文法の解析全般をさす言葉だよ
そのlintの機能を内包しているソフトを出して自慢気に語り出すのはちょっと

947 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 10:15:32.81 ID:vntsHvc0.net]
無理矢理感丸出し
誰が今時lintとか言うんだよ

948 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 10:29:34.66 ID:G8vTqAy3.net]
lintツールはもはや一般名詞だろ。検索してみろよ。

949 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 10:44:09.75 ID:vntsHvc0.net]
アホ丸出し

950 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 10:50:55.75 ID:6lknT5KC.net]
>>924
自分の無知をさらけ出して恥を上塗りしなくてもいいのよ?
ちゃんとググった?



951 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 11:03:23.68 ID:4JqwU0dP.net]
lingual test

952 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 11:04:38.13 ID:SjWoAKws.net]
昔HTML-lintが流行った時期があったなぁ
でも10年以上前の出来事の気がする

953 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 11:38:48.44 ID:cYXsvyZR.net]
一般名詞でlintと言ったらうちの周りだと具体的にはcpplint.pyになるかなぁ。
clangの-Weverythingは使うとして

954 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 11:53:27.80 ID:9QpDoKsV.net]
lintとは、主にC言語のソースコードに対し、コンパイラより詳細かつ厳密なチェックを行うプログラムである。

955 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 11:56:38.08 ID:9QpDoKsV.net]
Another HTML-lintはHTML(XHTML)の文法チェックを行うソフトウェアである。作者は石野恵一郎。Perl5で作成されている。公開は1997年。

956 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 11:57:18.99 ID:9QpDoKsV.net]
ごっちゃにしちゃいかんよ

957 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:02:23.41 ID:4rUKwdGH.net]
イベントが発生するとラムダをコールバックするような仕組みを実現したいです
登録はstd::functionのリストにラムダを突っ込めば簡単に出来ます
しかし、キャプチャされているオブジェクトが死ぬとき、登録を削除しなければなりません
登録削除はどうしたらよいですか?

958 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:11:17.06 ID:sEruxHcf.net]
Vectorが置いてたHTML Lintは一時期使ってたっけな

959 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:14:54.87 ID:9ozwOaJ6.net]
>>932
どうするもこうするも「キャプチャされているオブジェクトが死ぬとき、登録を削除」すればいいんじゃね

960 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/12/03(木) 12:18:45.51 ID:4JqwU0dP.net]
リストがstd::listかstd::vectorかどうかで対処が異なる。
削除はデストラクターで。リファレンス見ろよ。



961 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:21:48.73 ID:f0dL0w0J.net]
登録されてるファンクタが先に死ぬことはないって決まっているの?

962 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:23:21.36 ID:Fq2nS4CH.net]
>>921
>>923
coverityとかをlintって言う奴居ないだろ
covrityのページ見てみlintって文字出てきたか?
coverityでググってみ?
お前の思うほど一般名詞として使われていないから気を付けな

963 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:28:16.53 ID:4rUKwdGH.net]
リストの中に複数あるイベントコールバック用の関数オブジェクトの中から
どうやって自分を参照している削除対象の物だけを見つけ出したらよいんですか?
どの関数オブジェクトが何をキャプチャしているか、後から調べる方法は無いですよね

登録時に関数オブジェクトをこっそり別に保存しておいて
削除するときは保存しておいた関数オブジェクトとリスト内の関数オブジェクトを比較して
自分が登録した関数オブジェクトを探すんですかね

しかしstd::functionに突っ込んだラムダ同士を==で比較すると
どういう比較のされ方をしますか?
同じソースコードから生成されたラムダでも、キャプチャの中身が違っていたら
==で比較したときに別物扱いになりますか?

964 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:34:09.39 ID:sEruxHcf.net]
listに直接functionを突っ込まず、マーカーかなにかと一緒に入れておけば

965 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:34:49.55 ID:4rUKwdGH.net]
それとも自身のポインタ(this)と、登録したい関数オブジェクトを
std::pairでペアにして登録して
削除するときはthisを頼りに探すんですか?

966 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/12/03(木) 12:37:28.49 ID:4JqwU0dP.net]
>>938
std::listを使ってんの? 順序に意味があるの?
関数オブジェクトの比較をテンプレート引数に指定すれば?

967 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:41:14.42 ID:38PDYmvi.net]
>>937
うちだとcoverity版のlintとかつい言っちゃう
というかピコピコとかファミコンとかと同じ用法で
リントにかけろって言っちゃう

968 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 12:45:28.62 ID:zCQ/Nhg2.net]
>>925
一般名詞になったと言うページの URL 書いてみろよ w
そもそも lint って言いだした >>910 がツールだって言ってるのにアホすぎでしょ

969 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 16:08:58.02 ID:HBCwEi9c.net]
Boost.Signals2だとconnectionオブジェクトで切断したりweak_ptrで自動的に切断したりしてるね
このあたりは案外設計が難しい

970 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 16:36:39.69 ID:mJh8lY8m.net]
>>943
バカに触れないで
うつるから



971 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 16:53:20.76 ID:7lfAnJct.net]
出てくるのがHTML-Lintがやっとってどういう事だよ
hlintとかjslintとかpylintとかまだまだありますよ?

https://github.com/search?q=lint
十分一般名詞だよ
否定したところで恥かくのは自分だぞ

972 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 16:57:52.90 ID:mJh8lY8m.net]
ころころID変えながら涙目で弁解w

973 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 16:59:37.76 ID:7lfAnJct.net]
あーあ関係ないこと言い出してきたよ
lintがCの文法チェッカを指すなら
このgithubにあるlint達はみんなCのチェッカなんですかねえ?
自分が何言ってんのかちょっとは考えたら?

974 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 17:02:01.08 ID:vntsHvc0.net]
お前がな

975 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 17:05:23.56 ID:7lfAnJct.net]
IDコロコロ変えてるなんて発言が出るのは
自分がそうやってるからだろ?
それこそ馬鹿としか言いようがないね

976 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 17:24:04.23 ID:vntsHvc0.net]
お前がな

977 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 19:55:43.38 ID:zCQ/Nhg2.net]
>>948
> lintがCの文法チェッカを指すなら

お前以外の誰もそんなことは言ってないけど?
単に各言語用の lint って言うツールがあるだけのことだろ
そのページで例えば gdb で検索したら色々な環境用の gdb がヒットするにけど、それ見て gdb は一般名詞だー
とか言っちゃうのかよ w

978 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 20:06:18.77 ID:XbhyavhQ.net]
>>948が何を言いたかったのかも、どこで齟齬が生まれたのかも今わかったから、とりあえず落ち着け。
そして少なくとも俺はだいたい察したからそこまででレスバトルはやめとけ。

979 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 20:47:51.03 ID:SIn5hbzt.net]
また来たンゴ!
先日はありがとナス

なぜC++は黒魔術と呼ばれるのですか?

980 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 21:02:40.72 ID:7JN8BUI+.net]
C並にメモリにやばいアクセスが出来て
その上C以上に覚えなきゃいけないことが多いからかな



981 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 21:10:51.07 ID:WjbZJ8W6.net]
テンプレートによるメタプログラミングが難解で魔術のように見えるから

982 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 21:13:12.19 ID:W6SHvClG.net]
黒魔術部分ってテンプレート酷使系を揶揄するのが発祥じゃなかったっけ。
ふつーに使う分にはなんも黒くないよ
深入りし過ぎず身の丈に合わせて使えばいいんよ
C++11以降はむしろ手軽に使えるよ

深入りが楽しいのも事実
今時ならconstexprあたりから術式の深みにはまるが良い

983 名前:デフォルトの名無しさん [2015/12/03(木) 21:23:47.71 ID:qdrKfbrZ.net]
template<typename T> void hoge(){}
はヘッダにかけるのに
void hage(){}
はヘッダに書くとエラーでます。何故ですか

984 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 21:28:42.30 ID:SIn5hbzt.net]
ありがとナス!
javaで息抜きしてくるンゴ

985 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 21:33:58.72 ID:7JN8BUI+.net]
>>958
テンプレートは実際に型をはめた時に実体化されるから

986 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 21:43:59.05 ID:X7HD53YV.net]
>>960
想像でものを言うな低能

987 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:04:47.16 ID:QauuBag/.net]
>>958
下記は実体を記述しているからダッメ
ヘッダにするならinilineかstatic必須
でないとヘッダをインクルードするたびに
実体の複製が大量生成されてリンケージの
段階でコンフリクトが大量発生する

988 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:08:35.38 ID:X7HD53YV.net]
>>962
まるでテンプレートやinlineだと実体の量産が無いような物言いだな

989 名前:デフォルトの名無しさん [2015/12/03(木) 22:09:31.99 ID:OfqEsdYX.net]
任意のディレクトリ内にある複数のcsvファイルのファイル名をCStringの配列に格納する方法を教えてください。

990 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:11:32.47 ID:T6cOKf23.net]
また炎上学習法ですか



991 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:15:49.85 ID:X7HD53YV.net]
>>964
まずCStringの定義を説明しろ低能

992 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:16:18.73 ID:gNtJcgPL.net]
>>958
それコンパイラーのバグだよ

993 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:17:36.98 ID:Fq2nS4CH.net]
>>958
template関数はinlineキーワードを付けたときと同じ状態になります。

994 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/12/03(木) 22:18:03.95 ID:4JqwU0dP.net]
>>964
csvファイルは拡張子が.csvである。
ディレクトリー(フォルダー)の中の項目は、Windowsでは
FindFirstFile/FindNextFileで、LinuxのようなPOSIX環境ではopendir/readdirで列挙できる。
csvファイルのみを抽出したい場合は、「*.csv」というワイルドカードパターンを使う。

995 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:20:43.14 ID:4nUxrQps.net]
csvファイルの拡張子が.csvだと
いつから>>969は錯覚していた?

996 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/12/03(木) 22:28:52.79 ID:4JqwU0dP.net]
補足と修正。
拡張子が.csvではないcsvファイルを想定する場合については、
ファイルの中身をチェックするしかない。その場合は非効率な処理となる。
csvファイルには方言が多く、例えばエクセルのcsvは複数行のテキストを一つのフィールドに記述できる。

997 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 23:14:00.82 ID:OcXjfpNR.net]
>>965
これ好き

998 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 23:17:26.41 ID:LRrF0HN+.net]
C++で質問です。

メニュー一覧から「Hoge Fuga」を検索してそのWM_COMMAND値を返す方法
を探しています。

よろしくお願いします。

999 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 00:12:56.11 ID:KK6LKRIE.net]
>>972
ちゃんとできる奴がスレにいるならその学習法は良いが
>>964>>973は高度

1000 名前:で出来る奴いないからやる価値はない []
[ここ壊れてます]



1001 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 00:16:41.56 ID:K0bZWv/B.net]
高度

1002 名前:デフォルトの名無しさん [2015/12/04(金) 00:46:00.64 ID:H0SRHl0K.net]
>>932
カメだが、
コールバックされる側Aはstd::functionのstd::shared_ptrを持っておく。
イベント発生側Bはstd::functionのstd::weak_ptrのリストを持っておく。
Aのshared_ptrをBのweak_ptrのリストに登録する。
イベントが発生したらweak_ptrが有効か見て判断すればできないかな?

1003 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 01:56:40.84 ID:qWhz4QUx.net]
あっれーテンプレート関数やクラスを実体化したやつは1個だけなんじゃないの
多くはインライン展開されるからコードの増殖に見えるが
アドレスをとったときの実体は唯一(さもなくばODR制約違反の不正なコード
のはず…
それが証拠に"a.cpp"でtemplate<class T> foo(T x) { return x + (T)1; }を定義してT=intで実体化し、
"b.cpp"でtemplate<class T> foo(T x) { return x + (T)2; }を定義してやはりT=intで実体化したりすると
リンク時に実体が2つある系のエラーになった
ような希ガス、

1004 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 02:19:45.74 ID:ezzwHQH9.net]
>>958
テンプレート(やクラスやインライン関数など)の定義は、実用上ヘッダに書いて複数の翻訳単位で
定義しないといけないので、定義の重複を認めている。
(字句的に同一であることを含めていくつかの常識的な制約はある。)

そういった特例に含まれないものの定義をヘッダに書くと複数の翻訳単位に定義が含まれ、
定義が重複することになる。 ODR(One Definition Rule) 違反ってやつで、結果は未定義。
一般的な実装ではリンクエラーとして検出される。


この特例に含まれるという点ではテンプレートとinline関数は同様だけど、関数テンプレートが
自動的にinlineとみなされるわけじゃない。

ODR はプログラム全体に「定義」がいくつ含まれるか、という話。
「実体」とか言ってるとテンプレートインスタンスとごっちゃになったりするのでやめといたほうがいい。

1005 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 07:53:55.32 ID:lXdK5bEE.net]
CSVの文法って真面目に凝りだすと面倒だよな……>>971みたいに「1セルが複数行ある」パターンもあるし

1006 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 08:35:38.61 ID:w/Hp0b+s.net]
CSVの話をする際にRFC 4180の名前も出せないレベルだから面倒に感じるんだろう

1007 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 11:26:43.26 ID:W/x9yQ78.net]
static inline void hoge()
inline static void hoge()
どっちが主流?
あるいは(ビルドは通るけど)本来はどちらかが文法的には間違いだったりする?

1008 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 11:35:00.30 ID:v4H8WRK+.net]
static void iniline hage() がスタンダード

1009 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 11:37:34.61 ID:v4H8WRK+.net]
static void inline hage() だスタンダード的に
inline などのモードは、型と手続き名の間に入れるのがハゲの鉄則

1010 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 11:46:52.73 ID:1FHuCnKY.net]
static voidはdecl-specifier-seq、
baka()はinit-declarator-list
specifierの一種であるinlineを追加するんなら
decl-specifier-seqの後ろに追加するのが良いだろう。
つまりvoid static inlineだ。
*constやstruct X finalの様にC++は修飾を右に書く文法だからな。



1011 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 14:08:30.99 ID:YEfoDPnk.net]
>>796
いちいち関数オブジェクトをA側で保持しておくのは面倒なんで
B側で関数オブジェクトとAのポインタをstd::pairで保持しておいて
削除するときはAのポインタをキーにする方がシンプルで簡単かも

1012 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 17:08:00.24 ID:H94Wo3u0.net]
質問
C++ Win32 コンソールアプリケーションにて
自身のウィンドウを最小化させるにはどうしたらいいですか?

1013 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 18:58:24.09 ID:YEfoDPnk.net]
GetConsoleWindow
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms683175%28v=vs.85%29.aspx

これが使えるんじゃないかな、しらんけど
ただし、XP以上じゃないとダメだよ

1014 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 19:46:31.79 ID:4rTjiz/h.net]


1015 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 20:18:19.17 ID:KK6LKRIE.net]
ウィンドウ 最小化 Win32 でぐぐったら
d.hatena.ne.jp/s-kita/20121220/1356014299
が出てきた。
ShowWindowのC++バージョンがあればいいんだよね

1016 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 20:49:29.84 ID:7W1HEY29.net]
>>980
Excel がそれに従ってるとでも?

1017 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 21:00:52.06 ID:H94Wo3u0.net]
>>987
ありがとうございました

1018 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 21:59:39.04 ID:rgdHsALa.net]
>>990
RFCの方が後付けなんでExcelの方が従ってるわけではないのは当然だけど、
準拠しない部分があるってこと?

1019 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 23:19:56.54 ID:qWhz4QUx.net]
>>978
レスdクス勉強になた、

それはそうとして皆さん!
ttp://www.emit.jp/prog/prog_opt0.html
↑クラスのメンバの直接利用をdisられてるんですが
パフォーマンス(ネタ)言語たるC++に何か対策は無いんですか;

メンバをいったんポインタか参照に置き換えればrestrict修飾子が使えるけど
もっと一発でハイパホーマンスにできるやつご存知ないですか??

1020 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 23:49:12.83 ID:8OSUTWwz.net]
>>993
std::fill_n(m_pBuffer, m_nSize, n) でいいんじゃないかな。
https://goo.gl/Lbt2gK



1021 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 00:14:21.98 ID:+8tnJCl8.net]
次スレの季節

C++相談室 part121
peace.2ch.net/test/read.cgi/tech/1449240881/

1022 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 01:03:42.55 ID:28a5J014.net]
>>992
従ってる
Qに触れるな

1023 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 03:16:50.47 ID:NRX1k+Is.net]
>>994
レスdクス、
しかし>>993のリンク先の記事が示すことは、
struct Foo { int m_x; } g_foo;
int main() {
 int a = g_foo.m_x; // ・・・(1)
 何がしかの非restrictなポインタ操作(外部リンケージの関数呼び出しは含まない!)
int b = g_foo.m_x; // ・・・(2)
printf("a=%d, b=%d\n", a, b);
}
上の(1)と(2)のような書き方をしたとき、(1)と(2)の両方でメモリアクセスが生じる
(g_foo.m_xのリードアクセスについて、(1)〜(2)を通してのレジスタ割り当ては行われない
ということなのdeath、

これソースコードを極力変えずに速くする(g_foo.m_xをレジスタ割り当てさせっぱなしにする)方法は無いですかいのう…

1024 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 03:56:29.05 ID:J/NXgEYT.net]
うめ

1025 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 06:45:38.80 ID:zpovgyFs.net]
>>996
フィールド内改行が<CR> <LF>ではなく環境依存
RFCには完全に準拠していない

1026 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 07:24:15.82 ID:A2giUrci.net]
>>999
ここまで頭が悪いと生きているのも辛いだろうな
RFC 4180読み直せよ

1027 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

1028 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






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

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

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