トップページ⇒tech
1002コメント329KB

C++相談室 part120 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/10/22(木) 21:29:58.52ID:OXupIzBk
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

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

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

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0002デフォルトの名無しさん2015/10/22(木) 21:31:52.43ID:OXupIzBk
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0003デフォルトの名無しさん2015/10/23(金) 00:59:05.52ID:9CUn1Ki5
↑はこのスレの恒例です
いちいち煽り返さない・反論するなら具体的に・嘘や我流を挙げない
以上の三つを守って平和に使いましょう
0004デフォルトの名無しさん2015/10/23(金) 06:23:06.65ID:5Xmp3DW7
うちは生ハイレグ非推奨にしてる
通常はvector、生配列と互換性が欲しい時はarray使ってる
0005デフォルトの名無しさん2015/10/23(金) 06:23:41.30ID:5Xmp3DW7
ハイレグって、、、orz
0006デフォルトの名無しさん2015/10/23(金) 08:46:02.70ID:WmdTCvEv
よく使うので予測変換されてしまったのですネ
わかります、わかります
0007デフォルトの名無しさん2015/10/23(金) 09:22:49.13ID:oPnU+EZi
>>1 に「質問する前にFAQに目を通せ」と書かれているけど、
目を通すべきFAQを紹介していただきたい。

「C++ FAQ」と検索しても、ピンとくる情報が見当たらない。
どこかのサイトで公開されているものか、はたまた紙の書籍なのか。
0008デフォルトの名無しさん2015/10/23(金) 10:52:16.04ID:NgB4pPA8
>>7
昔のスレのテンプレでは 2 に載ってた。
http://peace.2ch.net/test/read.cgi/tech/1345823164/
> 2 :デフォルトの名無しさん:2012/08/25(土) 00:46:47.34
> ■基本■
> [C++ FAQ]
>  http://www.parashift.com/c++-faq-lite/
>  http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
>   Cとその仕様を比較しながらの解説なので分かりやすい。
>   ***** 質問の前に必ずこの二つに目を通してください *****

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

ひとつめのリンク C++ FAQ Lite は、今だとこっちに取り込まれてるみたい。
https://isocpp.org/wiki/faq/
0009デフォルトの名無しさん2015/10/23(金) 12:01:02.21ID:ZvB3M2By
むしろ生ハイレグだったら推奨したい
0010デフォルトの名無しさん2015/10/23(金) 16:34:08.16ID:9CUn1Ki5
書くんじゃなくてカくんですか分かりません
0011デフォルトの名無しさん2015/10/23(金) 19:38:09.08ID:f5MibCBq
FAQに目を通せと言う奴は何故かバカが多い
中身を理解せずにに単語レベルで脊髄反射してレスするのが典型的な行動パターン
0012デフォルトの名無しさん2015/10/23(金) 20:52:10.42ID:ozV5uknl
低レベルに限ってこういうことを言う
001372015/10/23(金) 21:18:20.30ID:oPnU+EZi
>>8
早速のお答えにお礼申し上げる。
柴田さんのところは良いサイトですな。

もう片方 ttps://isocpp.org/wiki/faq/ は英語なので辛そう。
目次を見ると「C++に関する神話と都市伝説」なんて
面白そうなタイトルもあるけど読めるかどうか。
0014デフォルトの名無しさん2015/10/24(土) 00:07:00.83ID:hkUmvlfG
>>11
なぜかって、解りきってんじゃん
自分では何も言えないカスがggrksを1つ憶えしてるだけだろ

たとえばこういうスレで低レベルという言葉の使い方がおかしいやつとかw
0015デフォルトの名無しさん2015/10/24(土) 00:18:17.72ID:zfbPKWbg
今頃知ったのですが、返り値のある関数内でreturn文が一つもないのに
コンパイルエラーにならないのって酷くないですか?
0016デフォルトの名無しさん2015/10/24(土) 00:26:15.82ID:bL0EazKV
なるだろ?
0017デフォルトの名無しさん2015/10/24(土) 00:26:34.71ID:ayPUmhGB
>>15
なるが…@VisualStudio
0018デフォルトの名無しさん2015/10/24(土) 00:33:06.40ID:Ir698C46
少なくともmain関数にreturnは要らない
0019デフォルトの名無しさん2015/10/24(土) 00:52:41.06ID:3cj2wJ90
C言語と勘違いしてんじゃね?
0020デフォルトの名無しさん2015/10/24(土) 00:56:42.44ID:NDQYSDCE
// voidを返す関数
void voidReturn(bool b)
{
 if (b)
  return void(0); //なくてもいい
 else
  ;
}
0021デフォルトの名無しさん2015/10/24(土) 01:48:44.12ID:XpmdunGV
なるほど規格では別にエラーにはならんのか
関数末尾に到達した場合、値を返す関数でも値なしのreturnがあるものとして扱う
ttp://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value-without-pr
理由はその関数が途中returnせずに関数の最後に到達するかコンパイル時にチェックしきれないから
だとさ
0022デフォルトの名無しさん2015/10/24(土) 05:25:37.76ID:cp0zv7Rq
ここのサンプルコードに
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;
}

こんなのあるんだけどこれ意味あるんですか?
0023デフォルトの名無しさん2015/10/24(土) 06:23:29.91ID:YiK6tCta
そもそも規格に正しくないソースをコンパイルしたらエラーにしろって書いてないし
まあ今時の処理系で警告出さないのは珍しくなってるとは思うが
0024デフォルトの名無しさん2015/10/24(土) 07:22:52.82ID:c7n9Kxmt
>そもそも規格に正しくないソースをコンパイルしたらエラーにしろって書いてない

どうしてこういう
人を勘違いさせて陥れるようなことを書けるんだろうか
0025デフォルトの名無しさん2015/10/24(土) 07:50:50.23ID:YiK6tCta
>>24
どこかに書いてあると言うならソースよろ
0026デフォルトの名無しさん2015/10/24(土) 08:01:45.27ID:Ir698C46
どうしてこういう
人を陥れるようなミスリードを書けるんだろうか
0027デフォルトの名無しさん2015/10/24(土) 08:16:25.18ID:NDQYSDCE
たぶん、「正しくない」を ill formed のことではなく

未規定 ⊆ 正しくない

の意味で使ってるんだろう。
0028デフォルトの名無しさん2015/10/24(土) 08:25:21.60ID:2gR2C/q8
       ☆ チン        ハラヘッタ〜
                     ハラヘッタ〜
 ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< >>23さん、ソースまだ〜?
      \_/⊂ ⊂_)_ \____________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:|  |
   | Visual Studio   .|/
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0029デフォルトの名無しさん2015/10/24(土) 08:26:00.24ID:2gR2C/q8
あ、すまん
23じゃなく24ね

吊ってきます
0030デフォルトの名無しさん2015/10/24(土) 08:59:10.31ID:VUwmRE0S
ダサっ
0031デフォルトの名無しさん2015/10/24(土) 09:54:04.96ID:6XAl/uQ0
マジなの?エラーにするなって書いてあるって、マジなの?
ソースは?ソースはどこにあるの?
0032デフォルトの名無しさん2015/10/24(土) 10:10:22.55ID:7EkRf1mY
> エラーにしろって書いてない
と
> エラーにするなって書いてある
の区別ができない奴はマ辞めた方がいいと思う
0033デフォルトの名無しさん2015/10/24(土) 10:12:44.84ID:NDQYSDCE
そのような人類はいない

と思う
0034デフォルトの名無しさん2015/10/24(土) 12:43:18.70ID:Ir698C46
>>31
規格では1.4に診断メッセージを出すこととしか書いてない
エラーにするとかいう記述は無いはず
0035デフォルトの名無しさん2015/10/24(土) 12:54:50.11ID:hOfHEHo2
このエラーになるってやつはなんなの?>>16>>17
普通は出ても警告でしょ
VSはエラー扱いにしてんの?
0036デフォルトの名無しさん2015/10/24(土) 13:03:13.47ID:xlX2ViuV
>>35
そのぐらい自分で確認しろ
http://webcompiler.cloudapp.net/
0037デフォルトの名無しさん2015/10/24(土) 13:10:01.01ID:v+2N4LMl
あ の ね mainは特別なんだよ
main以外はVSではデフォルトの設定ならエラーC4716になるよ
0038デフォルトの名無しさん2015/10/24(土) 13:14:45.87ID:hOfHEHo2
なんだ、警告をエラー扱いにしてるだけじゃん
0039デフォルトの名無しさん2015/10/24(土) 13:32:16.53ID:ONf7Qbj7
error C4716: 'hoge' : 値を返さなければいけません


怒られた
0040デフォルトの名無しさん2015/10/24(土) 13:42:34.52ID:hOfHEHo2
https://msdn.microsoft.com/en-us//library/ft5xye74.aspx
Compiler Warning (level 1) C4716
0041デフォルトの名無しさん2015/10/24(土) 13:46:14.61ID:9aDzkraI
↑なんか言えよアスペ
0042デフォルトの名無しさん2015/10/24(土) 13:47:36.18ID:hOfHEHo2
こんな簡単な英語も読めないのか
なんでここにいるの?
0043デフォルトの名無しさん2015/10/24(土) 13:59:57.97ID:YiK6tCta
>>34
>>15 は未定義じゃね?
なので診断メッセージも要求されないと思うが

>>35
そのレベルの話は要らんよ
0044デフォルトの名無しさん2015/10/24(土) 14:01:44.76ID:ONf7Qbj7
プロジェクトの設定によっちゃエラーじゃなくて警告になるのかね
そもそもreturn書かないならvoidにするけどさ
0045デフォルトの名無しさん2015/10/24(土) 14:07:27.65ID:Ir698C46
>>43
>>23に『そもそも』と断わりがあったので
一般的な話と理解したのだが
0046デフォルトの名無しさん2015/10/24(土) 14:38:52.48ID:YiK6tCta
>>45
ああすまん、そこは君の言う通りで正しい
0047デフォルトの名無しさん2015/10/24(土) 16:30:55.59ID:Ir698C46
しかしreturn書かないとundefind behaviorなのか
勉強になった
0048デフォルトの名無しさん2015/10/24(土) 16:35:32.59ID:hOfHEHo2
なんだ、どんな高レベルの話なのかと思ったらそんなことか
ある意味びっくりしたわ
0049デフォルトの名無しさん2015/10/24(土) 18:29:29.78ID:3yfAWb6Z
ID:hOfHEHo2がコミュ障すぎて哀れ
0050デフォルトの名無しさん2015/10/24(土) 18:41:40.37ID:hOfHEHo2
コミュ障アスペ言うだけのお仕事お疲れ様です
0051デフォルトの名無しさん2015/10/24(土) 20:51:33.26ID:8lZJgWy6
このスレにはとにかく誰でもいいからケンカしたい人が常駐しています
スタートアップからの削除も不可能です
0052デフォルトの名無しさん2015/10/24(土) 20:59:32.25ID:Ir698C46
>>2を見る限りこのスレはそういうスレなんだから仕方がない
0053デフォルトの名無しさん2015/10/24(土) 21:18:24.59ID:HaxSH1Dy
戻り値のある関数try blockもwell-formedでundefind behaviorだっけか
auto f() -> int
try {
 throw 0;
}
catch (...) {
}
これは何で許されてんだろ
0054デフォルトの名無しさん2015/10/25(日) 01:44:04.31ID:xmPcotqF
>>51
自己紹介乙
0055デフォルトの名無しさん2015/10/25(日) 03:56:53.78ID:4lnR5/Hi
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。
0056デフォルトの名無しさん2015/10/25(日) 04:04:12.94ID:4lnR5/Hi
あ、あとポインタも… (検証忘れていた)
つまり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できない模様
0057デフォルトの名無しさん2015/10/25(日) 08:19:09.96ID:hWsy4IeG
おいQよ。長文やめろ。
読んでないけどcopy elisionじゃないのか。
本当は呼ばれるけど省略されてるだけという。
0058デフォルトの名無しさん2015/10/25(日) 12:50:41.08ID:4lnR5/Hi
いろいろ試してわかったこと
・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のバグ?
0059デフォルトの名無しさん2015/10/25(日) 13:09:04.48ID:PijF3SYg
>>58
const参照でcatchすればいいだけだろ
一番外側ってどこだよ
例外発生中にそのtryの外に出るような例外が更に発生したら(デフォルトでは)std::terminateが呼ばれるのは仕様
0060デフォルトの名無しさん2015/10/25(日) 13:10:44.10ID:B2NleybV
>>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扱いされてムーブはされない
0061デフォルトの名無しさん2015/10/25(日) 21:38:18.68ID:amtg7r/f
じゃんけんの勝敗を判定する最もシンプルでエレガントなコードってどんなんでしょう?
0062デフォルトの名無しさん2015/10/25(日) 21:40:34.79ID:FwYjAUOL
スレ違いは去れ
0063デフォルトの名無しさん2015/10/25(日) 22:08:04.68ID:1QFSvKv3
>>61
構造的に美しいのはグーチョキパーにVisitorパターンとか?
0064デフォルトの名無しさん2015/10/25(日) 22:44:48.86ID:WeEsOmrk
循環する列の中で、ある要素と、別の要素の距離は、
順方向と逆方向のどちらが近いか、という問題か?
0065デフォルトの名無しさん2015/10/25(日) 22:54:57.00ID:l/fL5071
omae == ( ore + 1 ) % 3
0066デフォルトの名無しさん2015/10/26(月) 00:31:48.73ID:WiaZeXi7
>>59
うーん、なんかよくわからん仕様だなそれ。
mainでプログラム全体を
try{
 // プログラム全体
}catch(...) {
 // プログラムのすべての例外をcatchする…
}
で包んでいれば、
どこで例外が飛ぼうが例外を揉み消せると思ってたんだけど
仕様上はそれをすり抜ける場合があるってこと?

>>60
うーん、なるほど
rvalueからlvalueを構築できないといけないのか
呼ばれないことがあるのは最適化のせい?
0067デフォルトの名無しさん2015/10/26(月) 00:37:37.85ID:8cS3iYFV
>>63>>64>>65
おお、いいですね!
結局以下のような感じにしました。
int judge(const Hand& ore, const Hand& omae) {
return (ore == omae) ? 0 : (omae == ( ore + 1 ) % 3) ? 1 : -1;
}
ありがとうございました!
0068デフォルトの名無しさん2015/10/26(月) 01:40:29.63ID:YRFGsT3p
>>67
そんな解読困難なコードが「いい」というような感覚は早く捨てるがいい。
0069デフォルトの名無しさん2015/10/26(月) 02:33:41.56ID:igXkyu20
記述量や行数を抑えるのがシンプルでエレガントだと考えるならこれでいいんじゃね
0070デフォルトの名無しさん2015/10/26(月) 05:36:08.43ID:E0EWk/3Q
そもそもジャンケンのロジックごときを人間様が一々考えて書くべきかねぇ?
ネット上に幾らでもサンプルあるんだからニューラルネットに学習させればいいのに
0071デフォルトの名無しさん2015/10/26(月) 07:05:11.45ID:vgIN4zh7
>>61
グーチョキパーが 0~2 なら 3×3 の配列でやるとか
0072デフォルトの名無しさん2015/10/26(月) 07:55:43.62ID:ztwFNJyv
この程度のロジックに数行使うよりよっぽど分かりやすい気が
0073デフォルトの名無しさん2015/10/26(月) 09:43:35.93ID:t0giKvEY
>>68
return (ore-omae+2) * 2 % 3 - 1;
とかならわかるけど、その例を解読困難という意味がわからない。
0074デフォルトの名無しさん2015/10/26(月) 12:36:11.99ID:LpR+ksZ8
>>71
そこでタプルをキーにしたマップですよ
0075デフォルトの名無しさん2015/10/26(月) 17:35:19.79ID:AJ3LGlVQ
グーチョキパー以外の手にも対応できるようにしないと(使命感)
0076デフォルトの名無しさん2015/10/26(月) 17:43:37.10ID:aKtHVHdt
http://img6.omosoku.com/141449856214144985627574.jpg
こういうのにも拡張できるようにしないとな
0077デフォルトの名無しさん2015/10/26(月) 18:03:34.67ID:VCR+r8C9
そのロジックは外部にあるグーチョキパーの定義順に依存してるから分かりにくいんだよ。
だから文字列で受け取って処理するものの方がいい。
0078デフォルトの名無しさん2015/10/26(月) 18:16:24.40ID:w3zzHJMH
そこで文字列持ち出すのは遅いだけでなくバグの温床になるから、やっちゃ駄目な手段の最たるもの
スペルミスしたらどうするんだ

入力が例え文字列でも、入力部でエラーチェックとenum数値化して後はenumで扱うのがバグ対策として最善
0079デフォルトの名無しさん2015/10/26(月) 18:41:25.49ID:9DWZHCXT
>>73
それは無駄に難読化してるだろ
return (omae-ore+4)%3-1;

>>67も読めないようならプログラマとしては諦めた方がいい。
配列にしても初期化コードは必要なのだし、そこにベタで書かれても余計に迷惑だ。
judge関数にくくっている時点で全く問題なくなっている。あとは指摘通りenumだよ。
0080デフォルトの名無しさん2015/10/26(月) 19:28:19.15ID:jGdtvb/A
.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ってアンマネージなものを受け取るときはコピー渡しか、
あるいはポインタ渡しにしないといけないんでしょうか?
0081デフォルトの名無しさん2015/10/26(月) 20:01:56.53ID:elUSwIsv
>>80
ローカル変数への参照を返してる時点で論外
0082デフォルトの名無しさん2015/10/26(月) 20:13:47.59ID:MJ9QERRk
>NullReferenceExceptionエラーになりました

嘘つけ
0083デフォルトの名無しさん2015/10/26(月) 20:25:08.37ID:t0giKvEY
>>79
>return (omae-ore+4)%3-1;
せめて元の仕様ぐらい満たしてから言えよ…なんだこのクソコード
0084デフォルトの名無しさん2015/10/26(月) 20:32:34.92ID:09dgbM7x
>>78
それじゃ同じことで解決になってない。
バグの温床などというがそれはただの思い込み。
0085デフォルトの名無しさん2015/10/26(月) 20:43:53.30ID:t0giKvEY
>>84
ユーザー入力が文字列なのは当たり前の話
そして文字列だけじゃコンパイル時チェックは入らない
バグになりやすいから、可能ならenumにした方が良いよ
0086デフォルトの名無しさん2015/10/26(月) 20:55:33.65ID:igXkyu20
>>75
増やしたらジャンケンの要である三すくみが破綻するだろ!いい加減にしろ!
0087デフォルトの名無しさん2015/10/26(月) 21:02:57.02ID:BA/+Pgz/
つhttp://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/
0088デフォルトの名無しさん2015/10/26(月) 21:14:05.03ID:/aNdzrlS
>>85
勝手に仕様を決めるなよ
r、s、pのキーコードを投げるのに決まってるだろ
0089デフォルトの名無しさん2015/10/26(月) 21:36:11.12ID:t0giKvEY
>>88
先輩それコンパイル時チェックあっても怖いっす・・・
0090デフォルトの名無しさん2015/10/26(月) 21:44:35.42ID:9DWZHCXT
>>83
アサイン逆か。
return (ore-omae+4)%3-1;
いずれにしてもお前のが無駄な計算をしているのは確かだよ。
0091デフォルトの名無しさん2015/10/26(月) 21:54:59.46ID:9DWZHCXT
>>83
いや、逆じゃねーな
ID:t0giKvEY 池沼はテメーだバカタレ
0092デフォルトの名無しさん2015/10/26(月) 22:09:31.14ID:66JW6Ozr
>>90-91
言わんこっちゃない…
配列にしときゃよかったのに w
0093デフォルトの名無しさん2015/10/26(月) 22:15:06.77ID:9DWZHCXT
>>92
いやまずは自信満々の>>83, ID:t0giKvEY の言い訳を聞こうよ。
0094デフォルトの名無しさん2015/10/26(月) 22:16:34.95ID:ud2D7ccR
このまま日付変更までだんまりに1千ペリカ
0095デフォルトの名無しさん2015/10/26(月) 22:47:06.51ID:1QkHB6vM
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;
}
}
};
こんな感じでひとつ
0096デフォルトの名無しさん2015/10/26(月) 23:07:43.16ID:igXkyu20
だからこのスレには荒らしが混じってると何度
0097デフォルトの名無しさん2015/10/26(月) 23:17:00.15ID:93KzrJS0
>>81の言う
「ローカル変数への参照を返してはいけない」
はどんな場合でも成り立つ原則だから覚えておくといいよ!!
0098デフォルトの名無しさん2015/10/26(月) 23:40:04.06ID:9DWZHCXT
>>95
勝ち判定だけならそれでもいいんだけど、 -1,0,1 にアサインすると sort とかの時に便利だから、
あの仕様でいいんだよ。
0099デフォルトの名無しさん2015/10/27(火) 00:17:50.31ID:a5wkmoM9
>>90
悪い確かにコピペしたテストコードが間違ってた

>>94
死ね
0100デフォルトの名無しさん2015/10/27(火) 03:03:10.47ID:HNGX9QQL
std::sortですら-1,0,1でなくlessを使っているというのに
std::qsortのコンパレーター風の仕様に拘る奴はなんなの
0101デフォルトの名無しさん2015/10/27(火) 03:06:15.31ID:HNGX9QQL
>このまま日付変更までだんまりに1千ペリカ

00:17:50.31
> 死ね

Q渾身のギャグですか?
0102デフォルトの名無しさん2015/10/27(火) 04:55:56.79ID:kXLLNmC/
健気に待ってたんだね
0103デフォルトの名無しさん2015/10/27(火) 05:16:21.58ID:CAcFYEW6
いったい何をソートするつもりなんだろう
0104デフォルトの名無しさん2015/10/27(火) 12:02:19.24ID:T5qJYgNG
蒸し返すわけじゃないんだけど、>>22の注意書きってどういうこと?

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

return CMediaSample::Release();

って書いたらダメってこと?
0105デフォルトの名無しさん2015/10/27(火) 12:09:30.09ID:EcLm8+/Y
LL言語みたいに動的に配列に追加していくのってどうやるのか教えてください
0106デフォルトの名無しさん2015/10/27(火) 12:22:05.98ID:jhggiZlS
STLで検索(ピッ)
0107デフォルトの名無しさん2015/10/27(火) 12:46:11.47ID:nyQaZFXX
・LL言語がわかりません定義してください
・動的に配列に追加がわかりません定義してください

もしかして std::vector ではありませんか?
0108デフォルトの名無しさん2015/10/27(火) 13:13:45.83ID:gPvV5cn8
typedef long long LL;
0109デフォルトの名無しさん2015/10/27(火) 15:53:01.19ID:9ni5ZXBK
<?php
$ary = array();
$ary[] = 1;
$ary[] = 2;
$ary[] = 3;

$aryの中身は[1, 2, 3]
0110片山博文MZ ◆T6xkBnTXz7B0 2015/10/27(火) 15:58:41.24ID:5PFO2WOq
std::vector<int> ary;
ary.push_back(1);
ary.push_back(2);
ary.push_back(3);
//aryの中身は{1, 2, 3}
0111デフォルトの名無しさん2015/10/27(火) 16:06:17.94ID:xaNt5qb2
decltypeの「decl」って何の単語を略したんでしょうか
0112デフォルトの名無しさん2015/10/27(火) 16:10:46.96ID:gPvV5cn8
そのレスが書き込めるなら、googleの入力ボックスにも入れられるでしょ?>decl
0113デフォルトの名無しさん2015/10/27(火) 16:12:27.74ID:QeXnp+TO
C++を学ぶのにここの先輩方に怒られない優良本を教えてください
PHPとRubyのプログラミング経験はありますがC++は分かりません
0114デフォルトの名無しさん2015/10/27(火) 16:14:30.91ID:IFaQ1PsR
スコットメイヤーズの本と、例のナゾナゾ集読んどけ
0115デフォルトの名無しさん2015/10/27(火) 16:23:54.41ID:cfkfKsSk
>>104
自分でdeleteしてたコードの名残だと思う
0116デフォルトの名無しさん2015/10/27(火) 16:24:36.79ID:cfkfKsSk
>>111
declareですね
0117デフォルトの名無しさん2015/10/27(火) 17:05:38.96ID:xaNt5qb2
ありがとうございます
0118デフォルトの名無しさん2015/10/27(火) 17:07:24.83ID:xaNt5qb2
>>112
decltype 略
でググってました(答えが出なかった)
0119デフォルトの名無しさん2015/10/27(火) 17:11:58.64ID:gPvV5cn8
おかしいでしょ?declが知りたいのにdecltypeを検索するのわ
そういう方面での分離・解析的思考はプログラミングの役に立つから
もうちょっと柔らか頭になりなさい
0120デフォルトの名無しさん2015/10/27(火) 18:44:21.61ID:xbbraB1s
デクラレーションタイプって読んでたけどデクラレなのか
0121デフォルトの名無しさん2015/10/27(火) 18:50:44.68ID:mCp2/GHM
modern C++ design読んでるんですけど
KillPhoenixSingletonのなかで
deleteするんじゃなくてデストラクターを呼ぶ理由がわかりません
deleteしないとメモリーが解放されないと思いませんか?
0122デフォルトの名無しさん2015/10/27(火) 19:03:05.06ID:jhggiZlS
オブジェクトはtheInstanceだべ
寿命が尽きれば勝手にメモリ解放されるでしょう
0123デフォルトの名無しさん2015/10/27(火) 19:13:06.43ID:mCp2/GHM
extern void __DestroySingleton();
でメモリー解放されるのは初めの一回だけでしょ
この関数がなにかは分かりませんが
なかでdeleteしているのではないか
0124デフォルトの名無しさん2015/10/27(火) 19:32:29.64ID:jhggiZlS
そのSingletonの唯一のインスタンスはstatic void Create()の中のtheInstanceでしょ?
0125デフォルトの名無しさん2015/10/27(火) 19:43:58.44ID:mCp2/GHM
theInstanceのメモリーを解放されたシェルに
プレイスメントニュゥをしたんでしょ
ニュゥしたらdeleteしないとメモリー解放出来ないでしょ
0126デフォルトの名無しさん2015/10/27(火) 19:50:45.48ID:Jiaaez0T
>>121
初版は持ってるけどそれ何ページ目だっけ?
0127デフォルトの名無しさん2015/10/27(火) 19:52:28.90ID:mCp2/GHM
納得しました
静的領域に動的に初期化されたメモリーは
開放できるわけないですね
ありがとうございました
0128デフォルトの名無しさん2015/10/27(火) 19:59:35.12ID:mCp2/GHM
初版とかあるの?
なんか本に書いてあるコードとlokiライブラリーのと
全然違うからそんな気がしてたけど
0129デフォルトの名無しさん2015/10/27(火) 20:35:48.84ID:utoCV8ti
>__DestroySingleton
こんな名前の関数を作るバカの本を真に受けてはならない
0130デフォルトの名無しさん2015/10/27(火) 20:56:58.00ID:kGQ62i2f
では>>129様渾身の関数名とオススメ書籍をどうぞ
0131デフォルトの名無しさん2015/10/27(火) 21:06:03.34ID:KgZQBpIB
その関数名はダメだろ
というか本の中に出てきた関数名じゃないよな?
0132デフォルトの名無しさん2015/10/27(火) 21:06:40.48ID:utoCV8ti
>>130
destroy_singleton
オヌヌメはそうだな。さっちんのExceptional何とかがいいだろう
あとModern Effective何とか
もちろん日本語版は不可
0133デフォルトの名無しさん2015/10/27(火) 22:42:38.89ID:CBXkry86
なんで日本語版だめなん?
0134デフォルトの名無しさん2015/10/28(水) 01:16:08.03ID:j1/zW92X
WindowsでNVIDIA以外使うならANGLE使っとけ
0135デフォルトの名無しさん2015/10/28(水) 01:36:06.63ID:j1/zW92X
スレ間違えたぜ…
0136デフォルトの名無しさん2015/10/28(水) 14:44:27.71ID:KgN4RL86
以前出たじゃんけん判定の話で
タプルをキーにしたマップで判定テーブルを作ってみたら

hoi[{goo,choki}]

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

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

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

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

いちいちmake_pupleしなくていいのは助かるんだけど
0137デフォルトの名無しさん2015/10/28(水) 15:24:21.67ID:shJPlFF3
ちゃんとコテつけたら答えてやろう
0138デフォルトの名無しさん2015/10/28(水) 16:33:35.31ID:3egweU9O
紫を作・・・いや、何でもない
0139デフォルトの名無しさん2015/10/28(水) 21:00:36.73ID:Qhaqod7/
↓の内容が理解できません

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

weak_ptrが最後の最後まで生きてるような場合はメモリは全く解放されないということですか?
0140デフォルトの名無しさん2015/10/28(水) 21:25:56.14ID:en6I5N16
>>139
デストラクターだけ呼んでメモリを解放しない糞な実装を使ってたことを自慢したいんでは?
0141デフォルトの名無しさん2015/10/28(水) 21:53:02.65ID:+VgSqF93
管理領域を別に確保するmake_sharedの方が糞実装と呼ばれる気がするが。
0142デフォルトの名無しさん2015/10/28(水) 21:56:23.56ID:en6I5N16
make_sharedか。勘違いした
make_shared<T>(…)はshared_ptr<T>{new T{…}}
と違って
そういう高速化の反面のデメリットのある特別な関数
0143デフォルトの名無しさん2015/10/28(水) 21:59:20.30ID:TK665Laz
デストラクタはvirtualにしなくてはいけない(戒め)
ってよっ、よく言われるけどさ(唐突)
逆に、finalなクラスなら仮想関数の呼び出しコストを少なくするために
virtualをつけないべきじゃない? (へらず口) 教えてくれよな〜頼むよ〜(懇願)
0144デフォルトの名無しさん2015/10/28(水) 22:02:20.54ID:en6I5N16
>>143
むしろ「昔はそんなこと言ってる奴が多かったな」
と言われているのが最近の流れだと思うのだが
0145デフォルトの名無しさん2015/10/28(水) 22:49:04.25ID:3egweU9O
>>143
当たり前。
コード書いている本人が意図を説明できないvirtualは書いてはならないvirtualだ。
0146デフォルトの名無しさん2015/10/28(水) 23:19:02.53ID:ED1QU3vb
スマートポインタ使っておけば本来必要だったところでも要らなくなったしな
0147デフォルトの名無しさん2015/10/28(水) 23:41:51.38ID:WuGdnON5
今は(本来は「今も昔も」なのかもしれないが)継承を無理に重ねるなと教えられるから、virtualつけるほうが少数。インターフェース継承したいときくらい。
そしてインターフェース継承なら別にデストラクタにvirtualいらない。

俺らが考える程度の次元の実装継承とかクソだよクソ。
継承の本質は動的ポリモフィズムであって、内部データが積み重なる実装継承は大体の場合において異端児。もう一回考え直すべきだ。
0148デフォルトの名無しさん2015/10/29(木) 00:10:26.29ID:LDv0f1Xe
>>147
実装継承なんて普通やらないから後半はどうでもいい。
デストラクタにvirtualいらない例でスマートポインタを使う以外のものをあげてくれ。
0149デフォルトの名無しさん2015/10/29(木) 00:14:42.80ID:RHn1cp1m
実装多重継承普通にやってるが(ミックスイン的に)
これが出来るのがC++の良いところ
0150デフォルトの名無しさん2015/10/29(木) 00:20:10.24ID:97GIdb3t
C++ってインターフェースなくない?
どうやってインターフェース実現するの?
多重継承?
菱型継承問題はどうするの?
デストラクタが肥大化する問題は?
void *から正しくstatic_castできない問題はどうするの?
0151デフォルトの名無しさん2015/10/29(木) 00:21:04.84ID:FU1wYuSd
なんかvirtual継承とかあるらしいっすよ
0152デフォルトの名無しさん2015/10/29(木) 00:25:14.36ID:97GIdb3t
あと、多重継承するとそれぞれのクラスの仮想関数テーブルがメモリに乗るから
インスタンスのサイズが無駄にでかくなるよね。それも無視できないのでは?
0153デフォルトの名無しさん2015/10/29(木) 00:27:08.85ID:Xs9VAOmG
>>150
うん、ないよ。
どうやってって、おまえ自分で記述できないの?
おまえの定義でいう「インターフェース」をC++の表現力で作ればいいってだけだぞ。

>>149
同意見。
0154デフォルトの名無しさん2015/10/29(木) 05:22:12.94ID:2sW62WRC
なんでintefaceのための継承で菱形継承になるんですかね?
0155デフォルトの名無しさん2015/10/29(木) 06:58:08.62ID:sby5qjeS
あの、ここって学校で出された課題の質問でもいいんですか?
0156デフォルトの名無しさん2015/10/29(木) 07:02:59.19ID:/qvHJgPS
スレタイすら読めない理解出来ないゆとりが居ると聞いて。
0157デフォルトの名無しさん2015/10/29(木) 08:06:42.77ID:97GIdb3t
>>154
interface A { ... }
interface B : A { ... }
class C : A { ... }
class D : C, B { ... }
0158デフォルトの名無しさん2015/10/29(木) 08:15:41.08ID:2pvdQwAq
>>147
なんで「インターフェース継承なら別にデストラクタにvirtualいらない」の?

virtual 関数入りのインターフェースクラスから派生した実装クラスで new して
インターフェースクラスのポインタで delete するから、要るよね?
それとも shared_ptr 必須ってこと?
0159デフォルトの名無しさん2015/10/29(木) 08:41:06.52ID:yVSpRiwh
それに unique_ptr だとダメだからな
0160デフォルトの名無しさん2015/10/29(木) 09:03:03.74ID:riQ9FZZK
親クラスの実装はコピペするつもりか
0161デフォルトの名無しさん2015/10/29(木) 11:17:05.61ID:M5LgoQD5
>>158
するからってなんでそれが当たり前みたいに言ってんの?
intefaceの要件にdelete含めるならデストラクタでもなんでもvirtualにしたらええわ
0162デフォルトの名無しさん2015/10/29(木) 12:48:47.00ID:yVSpRiwh
interface経由でアクセスするのにdeleteだけは別ってのはあまり自然とは思えないだろ。無いとは言わんが。
0163デフォルトの名無しさん2015/10/29(木) 15:26:02.34ID:IDJmDfji
>>157
抽象クラスなら菱形継承しても何の問題も出ないけど
どうして問題だと思ったの?
0164デフォルトの名無しさん2015/10/29(木) 17:03:20.53ID:90AKzuDc
>>140-142
レス遅くなりました、すいません

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

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

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

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

自己解決のつもりですが、以上の理解で正しいでしょうか?
0165デフォルトの名無しさん2015/10/29(木) 17:33:13.09ID:RHn1cp1m
>>164
>vecのメモリが解放されるのは、vectorが内部データをnewによりObjectのヒープとは別のヒープ上に持つからなんですね。
そうじゃないよ
std::vectorのデストラクタで開放してるからだよ
配列は直接new[]した配列は勝手には開放されないけど
例えばstd::string ary[100]なら開放されるよ
0166デフォルトの名無しさん2015/10/29(木) 17:39:54.84ID:RHn1cp1m
newと書いたら必ず対応するdeleteが無ければいけない
C++でリソース管理を正しく行うための秘訣はいかにしてアプリレベルでのnewとかopenを減らすかということ
0167デフォルトの名無しさん2015/10/29(木) 17:46:08.33ID:VInZxeNW
Windowsのコンソールアプリで
コードページをUTF-8に変更したのちに
printfを使うと正しく出力されるのですが
coutだと文字化けしてしまいます。
http://codepad.org/Rqaw4VP6

coutでも文字化けしないようにするには
どうすればいいでしょうか?
0168デフォルトの名無しさん2015/10/29(木) 17:53:17.46ID:IDJmDfji
>>165-166
>>164の言っていることはおおむねあっているよ
shared_ptrのすべての参照が無くなった時点でデストラクタが走るので
デストラクタで開放されるものに関しては開放される
しかし、Objectの一部として一緒に確保されたメモリブロックについては
weak_ptrのすべての参照がなくなる時点まで残る
だからnewじゃない配列なんかに関しては開放されずに残る
0169デフォルトの名無しさん2015/10/29(木) 18:11:24.87ID:j3RBo1Qz
#include <iostream>
using namespace std;
struct A{
int a=1;
};

int main() {
A b(A c);
return 0;
}
これがコンパイル通るんですけどどういう意味ですか?
0170デフォルトの名無しさん2015/10/29(木) 19:04:10.54ID:90AKzuDc
>>165
すいません、newという言葉を使うのは不適切だったかもしれません
(vectorが内部データを作るときにnewを使ってるのではと想像したからでした)
Objectのデストラクタがメンバvectorを破棄し、その際vectorのデストラクタが呼ばれ、vector内のデータが破棄&メモリ解放されることは理解してます

回答くださった方ありがとうございました
0171デフォルトの名無しさん2015/10/29(木) 19:18:13.43ID:j3RBo1Qz
#include <iostream>
using namespace std;
class A{
public:
A(){}
A(A&&){cout <<"move"<<endl;}

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

return 0;
}
なぜmove constructor がよばれないのですか?
0172デフォルトの名無しさん2015/10/29(木) 19:34:34.48ID:I8hon1X6
規格を見ずにいうと
12.8節の31段落あたりのルールによる
0173デフォルトの名無しさん2015/10/29(木) 19:49:45.07ID:3bhNvGdK
>>141
とりあえずmake_shared使っとけ!みたいなに言う人多いような・・・
weak_ptrの問題の他にもファクトリパターン使えないとかカスタムデリータ指定できないとか欠点あるし・・・

そういやshared_ptrを循環参照に対応させる案ってなかったっけ?C++17から?
0174デフォルトの名無しさん2015/10/29(木) 22:24:33.93ID:R4UWbXLC
>>169
A b(A c);はただの関数プロトタイプ宣言
>>171
規格上コピーとムーブコンストラクタ処理の省略が許されている
g++なら-fno-elide-constructors付きでコンパイル
0175デフォルトの名無しさん2015/10/29(木) 22:59:44.31ID:97GIdb3t
>>163
仮想継承しないとコンパイルエラーになるんだよなぁ (呆れ)
http://codepad.org/jYRRufRC
0176デフォルトの名無しさん2015/10/29(木) 23:07:18.68ID:2sW62WRC
>>175
菱形以前の問題なんだがエラーメッセージすら読めないの?(呆れ)
0177デフォルトの名無しさん2015/10/29(木) 23:07:49.65ID:IDJmDfji
PersonWhoSaysHelloOnly が抽象クラスじゃないから当然じゃね?
0178デフォルトの名無しさん2015/10/29(木) 23:13:55.91ID:6f48xvzh
菱形継承問題どうするの?って、そもそも必要なけりゃ菱形継承しなきゃいいだけのように思うが。
0179デフォルトの名無しさん2015/10/29(木) 23:18:01.77ID:RHn1cp1m
そうそう、この手の多重継承ヤバイ論はわざわざへんてこりんな例を持ち出してくるのばかりなんだよな
0180デフォルトの名無しさん2015/10/29(木) 23:23:15.61ID:R4UWbXLC
菱型継承と近親交配って似てるね(錯乱)
0181デフォルトの名無しさん2015/10/29(木) 23:34:45.02ID:97GIdb3t
IGreetingの継承にpublicつけ忘れてた
コンパイルエラーになるのは変わらんけど
× class IGreeting : IHelloSaying
○ class IGreeting : public IHelloSaying
>>176,177
IHelloSayingのSayHello()はPersonWhoSaysHelloOnlyで実装してるし
IGreetingのSayBye()はPersonWhoGreetsで実装してるでしょ
必要な関数はすべて実装されてるのに実装されてないと出る、これは菱型継承が起こっているから
Javaではインターフェースが言語でサポートされているからこんなことは起こらない
>>178
すべてのクラスがコントロール下にあるならそうなんだろうな(棒)
実際には、外部のライブラリの中で上の例みたいなことがされてて継承できず
仮想継承で解決しようにもライブラリの中では仮想継承していないから解決できず
仕方ないからライブラリごと書き換えたり、全部自前で1から実装することが多い。
このせいで生産性が著しく低いんだよC++は
0182デフォルトの名無しさん2015/10/29(木) 23:35:27.69ID:LDv0f1Xe
いついかなる時でも菱形継承
0183デフォルトの名無しさん2015/10/29(木) 23:41:17.91ID:PeHv4fTr
別に無理して使わなくていいよ
0184デフォルトの名無しさん2015/10/29(木) 23:43:07.91ID:2sW62WRC
そりゃあJavaのようにしか設計出来ないのなら生産性低いだろうね
君にはJavaがお似合いだよ
0185デフォルトの名無しさん2015/10/29(木) 23:43:39.49ID:6f48xvzh
>>181
できの悪いライブラリは使うのに苦労するって話か?そりゃそうだろw
0186デフォルトの名無しさん2015/10/29(木) 23:46:47.05ID:IDJmDfji
>>181
PersonWhoGreetsクラスに

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

を追加すれば良いだけなんじゃないの?
確かにひと手間かかるけど、レアケースだから別にどうってことはなくない?
どうしてこれだけのことなのに、いちいち全部自前で1から実装しようって話になるの?
0187デフォルトの名無しさん2015/10/29(木) 23:50:44.30ID:97GIdb3t
>>186
あ、ほんとだ
これは知らんかったわサンクス
0188デフォルトの名無しさん2015/10/29(木) 23:53:02.09ID:2sW62WRC
エラーメッセージ読んでそれに対処しようとしたらすぐ出来ることだと思うけどなぁ?
C++使うと生産性低いのも仕方ないね(棒)
0189デフォルトの名無しさん2015/10/30(金) 00:22:38.50ID:nvHwlse0
>>187
ファッ!?
0190デフォルトの名無しさん2015/10/30(金) 00:55:35.54ID:wkivSnT7
>>161
するのが当たり前とは言わないけど、インターフェースってことは
何かしら virtual 関数持ってるんだからデストラクタを virtual にしても
追加のオーバーヘッドは発生しないわけで、その状況で delete できないなんて
危険で不便になるかもしれない制限を増やす選択はとらないと思う。

それはそれとして、 >>147 は単に「インターフェース継承なら」が書き間違いで、
「インターフェース継承でも別にデストラクタにvirtualいらない」ってことだよね。
それなら(個人の意見として)別におかしくはない。
0191デフォルトの名無しさん2015/10/30(金) 01:05:25.58ID:WdbOFcdR
>>190
そのintefaceがdeleteを要件に含めてないならdeleteする方がおかしい。
渡した方は何故か殺されるわけで、逆に言えばvirtualなデストラクタ持ってたら渡したら殺される(=所有権を渡す)事を期待するからそうでないならvirtualなデストラクタは定義しない方がいい。
同じintefaceでdeleteするところとしない所が混在してるなら設計腐ってる
0192デフォルトの名無しさん2015/10/30(金) 01:23:44.72ID:f7YhtMHw
func(hoge(), huga(), buzz());
ってhoge huga buzzの評価順序ってコンパイラ依存だよね?
これをコンパイラによらず必ず左から評価するために
Hage &&hage = hoge();
Hugo &&hugo = hugo()
Fizz &&fizz = buzz();
func(hage, hugo, fizz);
みたいに外に出すのって実行速度に悪影響あったりする?
0193デフォルトの名無しさん2015/10/30(金) 02:06:41.00ID:wkivSnT7
>>191
void do_something(std::ostream& o);
↑この関数の呼び出しで所有権が移動することが期待されるってこと?

そんなわけないよね?・・・ちょっと何言ってるのかわからないよ。
0194デフォルトの名無しさん2015/10/30(金) 02:29:47.25ID:8kNsJEt3
>>192
そりゃ最適化の余地のために規定してないんだから潜在的には悪影響はあるだろう

ちなみに規格上はコンパイラ依存(実装定義・未規定)ではなく無順序であって
同じ関数の呼び出しが複数箇所にあるときにそれぞれで引数の評価順が違っても許される
0195デフォルトの名無しさん2015/10/30(金) 09:19:22.31ID:d4FfMDoX
>>194
未規定と無順序ってどう違うんだ?
0196デフォルトの名無しさん2015/10/30(金) 09:26:53.71ID:qHHhBlGv
>>192
心配するなって、外に出したって実行順なんてコンパイラ依存だ

最適化0にしなければな
0197デフォルトの名無しさん2015/10/30(金) 09:52:13.78ID:MfB76mRu
>>196
しれっと嘘付くなよ
CPU内部のOut of Orderとは話が違うんだぞ
0198デフォルトの名無しさん2015/10/30(金) 10:43:05.97ID:Ew+sxEe4
>>195
C++規格での『未規定』は要するに
「あらかじめ用意されたAかBかCのいずれかの動作でなければならない。
ただしどの動作にするかは処理系の実装側で決める。
その決定は同じ処理系(同じコンパイラ・同じバージョン・同じコンパイルオプション)なら
一貫して同じでなければならない。」
って感じのもの
最終的には規定されるが規格の段階では『(未だ)規定されていない』状態

順序関係における『無順序』とは順序関係を持た(せ)ないという規定
内容の説明は省くが
無順序のところに順序関係を仮定・推測してそれを前提としたコードは
意図したとおりには動かない可能性があるというもの
0199デフォルトの名無しさん2015/10/30(金) 11:08:10.84ID:qHHhBlGv
>>197
最適化かけたままステップ実行したことないのか?
0200デフォルトの名無しさん2015/10/30(金) 11:09:08.09ID:wkivSnT7
>>198
> その決定は同じ処理系(同じコンパイラ・同じバージョン・同じコンパイルオプション)なら
> 一貫して同じでなければならない。」
その説明、「実装定義」 "implementation defined" の説明に見えるんだけど。
「未規定」は "unspecified" だよね?
unspecified なら「一貫して同じ」なんて制約は無いよ。実行ごとに違ったっていい。
0201デフォルトの名無しさん2015/10/30(金) 11:11:40.02ID:8EL3LTBc
>>199
あんたの言ってる事が本当なら順序に依存するプログラムを書く手段がない事になる
0202デフォルトの名無しさん2015/10/30(金) 11:21:15.28ID:fK4ls09n
>>196 wwww
嘘つき
0203デフォルトの名無しさん2015/10/30(金) 11:23:18.63ID:qHHhBlGv
>>201
好きにしろ、おれは一向に困らん。

居るんだよな、レビューの時に
デバッグプリント外すと挙動がおかしくなるのでデバッグプリント外せません
とか恥ずかしげもなく言う奴が
0204デフォルトの名無しさん2015/10/30(金) 11:35:36.18ID:fK4ls09n
恥の上塗り>>196wwww
0205デフォルトの名無しさん2015/10/30(金) 11:37:21.12ID:IeVTHDcT
まったく
まぁ副作用が無いなら順番関係ないだろうけどね
0206デフォルトの名無しさん2015/10/30(金) 11:41:40.99ID:G+DB55N3
厚顔無知って怖いな・・・

少なくとも>>203はプログラマじゃないだろ
こんなデタラメ平気で言えるのは
0207デフォルトの名無しさん2015/10/30(金) 12:44:46.27ID:FKezdCzi
副作用がなければ(ないことがをコンパイラが確認できれば)入れ替えはあるんじゃなかったっけ?
0208デフォルトの名無しさん2015/10/30(金) 13:03:05.02ID:fK4ls09n
元の流れ的に
今は副作用が無い場合の話はしていない
副作用があって順番を固定したいから、どうのこうの、っていう流れ
0209デフォルトの名無しさん2015/10/30(金) 13:07:58.90ID:lB31ouJc
そのスレッドから見える結果としての順序が変わらなければ入れ替わることもある
メモリバリアとか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に引っかかることはありえる
0210デフォルトの名無しさん2015/10/30(金) 13:12:15.30ID:IeVTHDcT
pthread使えよ
0211デフォルトの名無しさん2015/10/30(金) 13:16:02.00ID:lB31ouJc
>>210
何の話?
0212デフォルトの名無しさん2015/10/30(金) 13:17:23.11ID:fK4ls09n
>>209その話が>>196と何の関係が有る?
0213デフォルトの名無しさん2015/10/30(金) 13:18:15.86ID:lB31ouJc
>>212
無いよ
副作用が無ければ入れ替わることがあるって間違った知識の人が居たから書いただけ
0214デフォルトの名無しさん2015/10/30(金) 13:21:16.76ID:IeVTHDcT
何言ってんだこいつ
0215デフォルトの名無しさん2015/10/30(金) 13:33:14.15ID:fK4ls09n
元々の話は>>192だからね
副作用のある関数の実行順を固定したいとき、どうするかって言う
関数の引数で呼び出すと、順番がどうなるかは不定になる
明示的に複数文に分けて呼び出せば順番は保障される
たたそれだけ
後者の場合で、たとえインライン展開されてコンパイラが凄い最適化したとしても、
得られる結果が同じであれば、今回の事例ではOKってことになる
途中の過程がどうであれ、結果が同じなのだからな
関数の引数で呼び出すと、途中経過もそうだが、
そもそもから結果すら同じにならないから、問題だというわけさ
結果が違うわけだから最適化以前の問題、
なぜなら、最適化は結果が同じである範囲で最適化するのが当たり前だから、
根本的に結果が不定になるのは、最適化レベルの話ではないし、その話をしているわけ
0216デフォルトの名無しさん2015/10/30(金) 13:34:25.76ID:fK4ls09n
つまり、最適化で順番が入れ替わる風な事を言っている人は的外れもいいところ
そういう時限の話をしているわけではない
0217デフォルトの名無しさん2015/10/30(金) 13:43:37.44ID:lB31ouJc
>>214
お前が何言ってんだよ

>>196 に関係ある話をすると
a()
b()
結果はa()が呼ばれてからb()が呼ばれるのと同じになる。
そのスレッドから見える結果が同じであればコンパイラはその中でどう入れ替えてもいい。
でも結果が同じであることは保証されてるんだからプログラマはa(),b()の順序で呼ばれるものとして扱っていい
上に書いたけど前提としてすべて単一のスレッドから見えるという条件付き
0218デフォルトの名無しさん2015/10/30(金) 13:47:08.35ID:fK4ls09n
>>192 はC++の仕様レベルで順番が不定であるような、根本的なことを問題にしている
環境によって計算結果そのものが異なってしまう、そういうお話
一方で最適化は順番が入れ替わっても、結果が変わらない範囲で入れ替わるのが普通
ここに大きな差が有る
順番が入れ替わって結果も変わってしまう話と
順番が入れ替わっても結果は変わらない話を
同列に語るのはおかしいわけ
0219デフォルトの名無しさん2015/10/30(金) 13:54:19.08ID:4B/tV0Oy
>>192の問題を全く理解していない>>196にツッコミをいれたけど
そのツッコミは>>192とは関連ないだけだよ
>>192は>>194で解決している
0220デフォルトの名無しさん2015/10/30(金) 14:28:57.55ID:d4FfMDoX
>>198
「無順序」を規定している規格票の文書番号は?
ちなJIS X3014:2003規格票の文中に "無順序" なる文字列は含まれていないが。

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

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

1.3.5 処理系定義の動作(implementation-defined behavior) 適格プログラムの構文単位と正しいデータとの組合せに対する,処理系に依存した動作であって,それぞれの処理系が文書で説明を用意しておかなければならない動作。
0221デフォルトの名無しさん2015/10/30(金) 14:47:05.92ID:AF8Cyymv
effective modern c++読んでるんだが完全転送の辺りが難しすぎる
読んでて理解はできるけどいざというときに自分で正しく書ける気がしない

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

ポインタ渡しを排除したい、Cにはない参照の概念を導入(C++98?)
↓
それだと型推論でオブジェクトを渡してコンテナに詰める時に最適化の不都合があった
↓
ムーブセマンティクスや完全転送という概念を導入してなんとか対処しようとした

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

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

これ無理ゲーじゃね…?という気がしてるんですがどうなんですか
頭のいい人の仕事とは思えない
0224デフォルトの名無しさん2015/10/30(金) 15:15:15.07ID:WD6nWn6o
新機能は便利、簡単にするために追加して行ってるわけで、使いこなせないならムリして全機能を駆使してプログラミングする必要がない。
使いこなせる範囲でプログラミングすればいい。
0225デフォルトの名無しさん2015/10/30(金) 15:15:40.79ID:AF8Cyymv
6種じゃなくて5種ですねスマソ
0226デフォルトの名無しさん2015/10/30(金) 16:15:20.98ID:Q/lHi+8Q
>>215
>得られる結果が同じであれば、今回の事例ではOKってことになる

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

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

だったら問題ないね


>>192の本来の質問趣旨からはだいぶずれちゃったね
0227デフォルトの名無しさん2015/10/30(金) 16:37:58.27ID:fK4ls09n
>>226
誰もそんなこといってなくね?
0228デフォルトの名無しさん2015/10/30(金) 17:37:38.51ID:b1AWcwGp
>>AF8Cyymv
C++ってオブジェクト指向型や手続き型とかに囚われない
汎用性の高い仕様が売りの言語だと解釈している
それらを取捨選択してもええんよ?ってスタンスじゃないの

必要不必要に関わらずデフォルトな動作をしないコンストラクタは
明示的に書けばいいじゃない
その辺りは言語仕様ってよりも設計の話じゃね?
0229デフォルトの名無しさん2015/10/30(金) 18:12:02.26ID:tM2hXE1V
今北
またQが暴れてんの?
0230デフォルトの名無しさん2015/10/30(金) 18:55:47.83ID:MOhQGiL+
>>223
「どのコンストラクタが呼ばれるか?」ってのは確かに難しいけど、呼ばれる方より呼ぶ方に注目するのもいいかもよ。
つまり何が左辺値になり、何が右辺値になるか、ってことを完璧に押さえる。
0231デフォルトの名無しさん2015/10/30(金) 19:27:26.88ID:FKezdCzi
>>213
> 副作用が無ければ入れ替わることがあるって間違った知識

?
0232デフォルトの名無しさん2015/10/30(金) 20:12:58.71ID:l0WThWA1
ひょっとして「副作用が無くても(CPUのOO実行とかキャッシュで)入れ替わることがあるので副作用が無ければOKというのは誤り」と言いたかったのか?
0233デフォルトの名無しさん2015/10/30(金) 20:20:10.57ID:FKezdCzi
>>232
いやいや、規格として入れ替えちゃダメなんだっけ?
って言う疑問
もちろん (副作用がないから) 結果が同じであると言う前提で
0234デフォルトの名無しさん2015/10/30(金) 20:36:46.36ID:lB31ouJc
>>223
なぜどのコンストラクタが呼ばれるかを気にしないといけないと思ったのか
0235デフォルトの名無しさん2015/10/30(金) 22:16:04.39ID:Pds69/6e
A{ f() };
この時A( p & )なのかA( p && )なのか分からずにマトモなコードが書けるはず無かろう
0236デフォルトの名無しさん2015/10/30(金) 22:19:58.57ID:lB31ouJc
>>235
なんで?
どっちだとしても、どっちでもないにしてもAがf()の返り値で初期化されるのは変わらんだろ?
0237デフォルトの名無しさん2015/10/30(金) 22:24:11.00ID:lB31ouJc
>>231
副作用があっても入れ替わることはある。
ただ、お前の思っている副作用と俺の思っている副作用が違う可能性はある
俺の思っている副作用はそれぞれの関数の副作用、関数が出てきて副作用といったら普通こっちを指すと思う。
0238デフォルトの名無しさん2015/10/30(金) 22:34:29.51ID:S9hryATs
>>213
> 副作用が無ければ入れ替わることがあるって間違った知識

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

バカなのか、日本語が壊滅的におかしいのかはっきりしてくれ
0239デフォルトの名無しさん2015/10/30(金) 22:40:39.72ID:lB31ouJc
>>238
副作用の有無は関係ないって事だよ
解らない?
0240デフォルトの名無しさん2015/10/30(金) 22:51:10.96ID:dtOKOnuy
その前に入れ替わりの話が
コンパイラーの出力するコードの話なのか
実際に実行されるコードの話なのか
入れ替わってないけど入れ替わったように観測される話なのか
はっきりさせようぜ
0241デフォルトの名無しさん2015/10/30(金) 22:59:04.67ID:lB31ouJc
>>240
> コンパイラーの出力するコードの話なのか
> 実際に実行されるコードの話なのか
どちらも入れ替わることはある

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

はっきりしてる
0242デフォルトの名無しさん2015/10/30(金) 23:02:24.17ID:S9hryATs
>>239
ますますわからん

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

>>237
> 入れ替わることはある
0243デフォルトの名無しさん2015/10/30(金) 23:03:56.35ID:9G31gAG0
副作用あってもコンパイラーが順序入れ替えるってどんな場合だ?

>>242
>ますますわからん
そろそろ理解しろよ
0244デフォルトの名無しさん2015/10/30(金) 23:05:09.65ID:Z2IjK/Mc
相手への罵倒が先行してまともなやりとりにならないのはこのスレではよくあること
0245デフォルトの名無しさん2015/10/30(金) 23:07:34.90ID:lB31ouJc
>>242
「副作用がなければ」を何処にやったん?
大丈夫?
if文とか書ける?if文あっても無視してコード読むタイプ?
0246デフォルトの名無しさん2015/10/30(金) 23:18:35.20ID:lB31ouJc
>>243
メンバ変数に値を代入することも副作用て言うからね
詳しくはググってね
0247デフォルトの名無しさん2015/10/30(金) 23:23:20.63ID:9G31gAG0
>>246
メンバー変数に値を代入している関数呼び出しが入れ替わったら困るだろ
何を言っているんだおまいは
0248デフォルトの名無しさん2015/10/30(金) 23:27:47.12ID:9G31gAG0
しまったQを相手にしてしまった
もう寝る
0249デフォルトの名無しさん2015/10/30(金) 23:29:52.59ID:lB31ouJc
>>247
だからプログラマーが困らない(結果が変わらない)範囲で入れ替わることはあるんだって言ってるじゃない
コンパイラの最適化をなめたらいかんよ
0250デフォルトの名無しさん2015/10/31(土) 01:02:53.40ID:XKJ4olNv
>>231
すっげー頭のいいコンパイラだよな
Qより遥かに良くね?
0251デフォルトの名無しさん2015/10/31(土) 01:08:05.16ID:/0EnDxTB
杞憂に付き合うこと50レス 今日も釣果は上々なようだな
0252デフォルトの名無しさん2015/10/31(土) 02:17:43.79ID:xh8OJ8ET
コンパイラの使命はソースコードに書かれたアルゴリズムと等価なオブジェクトコードを生成すること
つまりアルゴリズムの等価性が証明できる範囲内なら何だってする
外部リンケージの関数呼び出し順序を入れ替えないのは、
外部リンケージの関数が副作用を持たないことの証明が高コスト過ぎて割に合わないからやらないだけにすぎない
外部リンケージの関数呼び出し順序は未来永劫変わることはないのだと安心しきっていると
ある日マルチスレッド状況下で反乱されて人類は死ぬ
volatileの手綱は決して緩めてはならぬ
0253デフォルトの名無しさん2015/10/31(土) 02:31:22.83ID:T2ZXoWbN
おやっさん、実行順序入れ替えにvolatileは関係ないっすよ
0254デフォルトの名無しさん2015/10/31(土) 02:35:08.98ID:vcVH8w6b
妄想する暇あるんだったら仕様調べればいいのにね。
0255デフォルトの名無しさん2015/10/31(土) 02:43:19.73ID:xh8OJ8ET
>>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の仕様を正しく考えたことが無い人
0256デフォルトの名無しさん2015/10/31(土) 02:52:53.21ID:xh8OJ8ET
つなみにコンパイラはアルゴリズムと言う言葉を決定論的な意味にしか捉えないから
コンパイラが思い描くアルゴリズムの等価性は
マルチスレッド状況下でしばしば崩れてしまう
プログラマを巻き添になる

マルチコア状況でOoOが絡むとさらに最悪で、volatileでも力不足でメモリバリアを明示的にする必要がしばしばある
VCなら2005以降のバージョンはマイクロソフトが良心的に対応してくれているから気づいていない人も多いが
人類は気を抜くとコンパイラの最適化に滅ぼされる…!
0257デフォルトの名無しさん2015/10/31(土) 03:01:46.39ID:T2ZXoWbN
両方optimized outされりゃ最適化はかからなくて当然でしょうけど
別にメモリバリアが作られるわけじゃないですよ
だから別に保証されてません
0258デフォルトの名無しさん2015/10/31(土) 03:04:19.63ID:xh8OJ8ET
>>257
>別にメモリバリアが作られるわけじゃないですよ
いやそれが!
ttp://yamasa.hatenablog.jp/entry/20090720/1248089123
0259デフォルトの名無しさん2015/10/31(土) 03:04:28.99ID:T2ZXoWbN
されたらー>されなきゃ
0260デフォルトの名無しさん2015/10/31(土) 03:13:34.56ID:T2ZXoWbN
>>258
何が言いたいのかわかりません
0261デフォルトの名無しさん2015/10/31(土) 03:20:44.82ID:T2ZXoWbN
あー、VCには有りますよって言いたかったのね
記事内容には保証がないように書いてるからてっきりそう言う意味かと
0262デフォルトの名無しさん2015/10/31(土) 05:22:27.29ID:l9+Xbb2B
#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をよぶことができますか?
0263デフォルトの名無しさん2015/10/31(土) 06:40:37.59ID:CV4w2C3P
QはJavaと勘違いしてるのか、炎上学習法なのか
struct E {auto g();};
struct B {auto f();};
EのインスタンスはB無しでも存在しうるんだから
E::gからB::fを呼ぶことなど不可能
0264デフォルトの名無しさん2015/10/31(土) 06:44:37.36ID:sWlimv2S
Qって何?
0265デフォルトの名無しさん2015/10/31(土) 06:53:21.10ID:2URj0/y9
>>264
2ちゃんねらーのこと
俺もお前もQ
0266デフォルトの名無しさん2015/10/31(土) 09:14:04.95ID:l9+Xbb2B
質問する人がQで
答える人がAだと思った
0267デフォルトの名無しさん2015/10/31(土) 09:20:19.61ID:uu+i9WLB
Qが何を指してるのか知らんけど、それを使う人は知識も知識欲も全くない感じがする
0268デフォルトの名無しさん2015/10/31(土) 10:07:08.61ID:VXrj8Wc8
>>245
> 「副作用がなければ」を何処にやったん?

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

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

お前がな〜 w
0269デフォルトの名無しさん2015/10/31(土) 10:56:35.69ID:6GUa9Xkk
>>268
落ち着けよ
Q(=267)の思考はこうだ

「副作用が無ければ入れ替わることがある」
↓
「そんなことはない。副作用の有無に関わらず入れ替わる」
↓
>>213
0270デフォルトの名無しさん2015/10/31(土) 11:27:11.89ID:VXrj8Wc8
>>269
それ矛盾したこと言ってることには気づいてるよね?
0271デフォルトの名無しさん2015/10/31(土) 11:34:50.45ID:CV4w2C3P
>>270
落ち着けよ
Q(=267)の思考はこうだ

「副作用が無ければ入れ替わることがある」
↓
「そんなことはない。副作用の有無に関わらず入れ替わる」
↓
副作用が無ければ入れ替わることがあるって間違った(因果関係の)知識の人が居た

技術文章としては誤りだが日常会話では使われる用法
0272デフォルトの名無しさん2015/10/31(土) 11:34:59.76ID:sWlimv2S
副作用が無ければ入れ替わることがある という間違った知識
って書いてあるだろ
日本語堪能ならどう矛盾してるのか説明してみなよ
0273デフォルトの名無しさん2015/10/31(土) 11:54:29.49ID:sWlimv2S
> 副作用が無ければ入れ替わることがある は間違い
> 副作用があっても入れ替わることはある。
つまり副作用の有無は入れ替わることに関係ない
というのが >>239

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

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

の二つの矛盾した文と思っちゃったのか。
うん。この人と会話出来る気がしない
0274デフォルトの名無しさん2015/10/31(土) 11:56:03.29ID:VXrj8Wc8
>>272
副作用の有無と入替の有無で表作って確認してみ
0275デフォルトの名無しさん2015/10/31(土) 11:58:53.07ID:VXrj8Wc8
>>273
アホすぎワロタ w
0276デフォルトの名無しさん2015/10/31(土) 12:21:41.13ID:uu+i9WLB
お前こそ
> 副作用が無ければ入れ替わることがあるは間違い
> 副作用があっても入れ替わることはある。
のどっちが誤りで矛盾してることになるのか○×つけてみなよ。
0277デフォルトの名無しさん2015/10/31(土) 12:37:52.04ID:uu+i9WLB
人を対象としたときに
●パンを食べた事がある
●罪を犯す
という二つの無関係な事柄から
パンを食べたことがあれば罪を犯す
が真だとする人の思考方法か?
0278デフォルトの名無しさん2015/10/31(土) 12:42:48.53ID:GVk0olpQ
地球規模で見れば
●パンすら食べられない人は罪を犯すしかなくなる
が真
0279デフォルトの名無しさん2015/10/31(土) 12:49:42.50ID:vcVH8w6b
入れ替わることがあるっていってるやつはこれの結果が不定だと思ってるわけ?
int x;
f() { x = 1; }
g() { x = 2; }
main() { f(); g(); printf("%d\n", x); }
0280デフォルトの名無しさん2015/10/31(土) 12:53:04.31ID:l9+Xbb2B
誰しも罪を犯して生きているものです
自分は無罪だなんていっているひとこそ
偽善者なんですよ
0281デフォルトの名無しさん2015/10/31(土) 13:00:16.33ID:CV4w2C3P
>>279
「副作用が有っても入れ替わる」って言われたらそう疑問に思うよな
で、聞いてみると>>252で『等価性が証明できる範囲内』
と話をすり替えるんだよ

Q:この人と会話出来る気がしない
Q以外:この人と会話出来る気がしない
0282デフォルトの名無しさん2015/10/31(土) 13:04:58.84ID:uu+i9WLB
>>279
その結論はとっくに出てると思ってたけどそこに戻るの?
実行結果は言うまでもなく2が出力される。決まってる。
コンパイラが吐くコードは
f();とg();の実行順どころか実行せず固定の2を出力するコードに最適化される可能性すらある
0283デフォルトの名無しさん2015/10/31(土) 13:08:18.56ID:vcVH8w6b
例を出しただけで、こういう場合に入れ替わると思ってるんかって聞いてんだよ
副作用がない場合は入れ替わることもあるが、それが問題になることはないわけ
それをデバッグコードがーと言われて文句垂れてるやつは原因を理解してないんだろ
0284デフォルトの名無しさん2015/10/31(土) 13:15:52.26ID:/0EnDxTB
特定IDの無意味な小分け連レスで埋まるスレ
0285デフォルトの名無しさん2015/10/31(土) 13:18:29.17ID:u/DkutH4
もちろん入れ替わります。
xはmainの最初で上書きされており
mainで始まる実行に於いて他のどこからもxは変更されていないためprintfに2を渡しさえすれば、
その前にg()→f()と実行されることがあります。
0286デフォルトの名無しさん2015/10/31(土) 13:19:37.94ID:vcVH8w6b
なるほどな
まぁこういうレベルの話はもういいや
0287デフォルトの名無しさん2015/10/31(土) 13:48:04.22ID:IVNTd+mA
元々の話は副作用が有って順序にも意味が有り、正しい順番で実行しないと結果が変わる場合の
関数呼び出しの順番の、規格レベルでの保証の問題なわけだが
コンパイラの最適化で消えたり入れ替わったりするようなのは始めから問題にしていない
最適化は結果が変わらない範囲で行われるのが普通だから、結果が変わらない以上は
それほど気にするほどの事でもない
元の話は、C++の仕様で順番が決まってなくて、環境によって結果すら変わってしまう話
0288デフォルトの名無しさん2015/10/31(土) 14:00:31.50ID:CV4w2C3P
Qと議論をしようと思ってしまった浅はかさを悔やめ
0289デフォルトの名無しさん2015/10/31(土) 14:37:54.35ID:nW7p773V
この話、長い?
0290デフォルトの名無しさん2015/10/31(土) 16:34:47.15ID:fU4Oqm0B
>>262
こうですね
D* pD = (D*)((reinterpret_cast<const volatile char*>(this)) - offsetof(D, D::e));
pD->f();
0291デフォルトの名無しさん2015/10/31(土) 18:38:49.04ID:xh8OJ8ET
>>287
>C++の仕様で順番が決まってなくて、環境によって結果すら変わってしまう話
int a = 1;
printf("%d, %d, %d, %d\n", ++a, ++a, ++a, ++a);
とか
int x = (++a) * (--a);
みたいなやつぐらいしか思いつかん…
0292デフォルトの名無しさん2015/10/31(土) 18:42:00.24ID:xh8OJ8ET
ていうか、
>最適化は結果が変わらない範囲で行われるのが普通だから、
>>291式の言語仕様で順序不定とされている呼び出し順に起因する場合を除き、
シングルスレッド状況で最適化前後で結果が変わる最適化はバグ
0293デフォルトの名無しさん2015/10/31(土) 20:03:14.61ID:A2a2AvME
>最適化は結果が変わらない範囲で行われるのが普通だから、
普通ってなんだよ。規格書に書かれてる用語で発言するように。
0294デフォルトの名無しさん2015/10/31(土) 20:32:05.28ID:aEG6VWTj
「発言」ってなんだよ。規格に書かれている用語で書けよ
0295デフォルトの名無しさん2015/10/31(土) 21:59:37.38ID:xh8OJ8ET
指摘される前に言うが>>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が無いとそうなる
0296デフォルトの名無しさん2015/10/31(土) 22:03:54.48ID:xh8OJ8ET
スマンfor(;;)ループ内のfoo()はhoge()に読み替えてホスイ…orz
0297デフォルトの名無しさん2015/10/31(土) 22:04:04.44ID:TuS0NuwD
ちょう賢い
0298デフォルトの名無しさん2015/10/31(土) 22:08:17.18ID:IVNTd+mA
そんで、そういう最適化で順番入れ替わるかも的なのはどうでもよくない?
元々は>>192の規格書レベルで順番が未定義なものについての話だろ
0299デフォルトの名無しさん2015/10/31(土) 23:00:24.11ID:uu+i9WLB
別に今更元々の話だけにこだわらなくてよくない?それ自体はすぐ解決してるんだし
>>196 みたいな自信満々に言ってる間違いとか
>>207 みたいな微妙な間違いとか、ほっといたら害になるから掘り下げたわけで
0300デフォルトの名無しさん2015/10/31(土) 23:40:05.67ID:IVNTd+mA
害にならないから掘り下げなくて良いよ
普通に排他処理が出来ていれさえすれば
コンパイラの最適化で順番が入れ替わろうが
アウトオブオーダーだろうがCPUキャッシュだろうか
全て問題ないから
0301デフォルトの名無しさん2015/11/01(日) 00:03:20.13ID:eOjFevzb
>>300
お前196か207?
そうじゃなかったら他人の事よくわかるね
0302デフォルトの名無しさん2015/11/01(日) 00:12:43.03ID:a/KTrDXN
本人じゃなくても考えれば分る事
ある機能上纏まった扱いになるメモリ領域
有体に言えば排他処理される単位のメモリ領域
それを複数のスレッドから同時にアクセスするから色々な問題が出てくる
しかし、先にも書いたが、排他処理されるわけだから
実際には複数のスレッドから同時にアクセスされることはない
だから問題は起こらない
もし起こるとすれば排他処理を忘れてバグってるとき
0303デフォルトの名無しさん2015/11/01(日) 00:20:37.22ID:eOjFevzb
>>302
自分で掘り下げてるじゃん?
0304デフォルトの名無しさん2015/11/01(日) 00:23:20.47ID:a/KTrDXN
問題は起こらない、これ以上話し合う必要は無い
0305デフォルトの名無しさん2015/11/01(日) 00:53:29.46ID:lAqYINyq
>>300
排他制御で守れるのはCPUのアウトオブオーダー実行&キャッシュだけだ
コンパイラの順序入れ替えは防げないぞ
0306デフォルトの名無しさん2015/11/01(日) 01:21:38.45ID:v/vxYa9c
最適化の話題は誤解と罠が蔓延する混沌(ケイオス)ェ、
やっぱ人類はちょう進化したコンパイラの最適化に滅ぼされる運命なんや…!
0307デフォルトの名無しさん2015/11/01(日) 01:22:23.36ID:IhLDgcVT
クラステンプレート内でのfriend指定についての質問ですが
template <class T>
class X {
public:
friend T;
friend T f();
};
後者のフリー関数 f へのfriend指定ではコンパイル時に警告が出ます。一般的には
template <class U> friend U f();
と別のテンプレートパラメータを使うらしいですが、これだと f をTに制限できないんじゃないでしょうか?
0308デフォルトの名無しさん2015/11/01(日) 06:46:37.27ID:83j3eZbo
>>307
気のせいじゃね?
0309デフォルトの名無しさん2015/11/01(日) 08:48:50.66ID:Wfult68o
>>299
> >>207 みたいな微妙な間違い

言いきるなら規格のどこに書いてるのか教えてくれ
0310デフォルトの名無しさん2015/11/01(日) 08:53:28.28ID:j/MV/fW7
>>309
ちゃんと糞コテ付けろ
付けないんだったら去れ
もはやお前は荒らしに近い
0311KUSO KOTE2015/11/01(日) 09:20:28.47ID:qqj1vZuH
>>299
> >>207 みたいな微妙な間違い

言いきるなら規格のどこに書いてるのか教えてくれ
0312デフォルトの名無しさん2015/11/01(日) 11:29:25.08ID:OJFcI0aa
>>310
答えられないなら黙っとけよ
ウザイだけだよ
0313デフォルトの名無しさん2015/11/01(日) 11:51:54.14ID:a/KTrDXN
>>305
いいや、守れる
例えばWindowsだと排他制御はEnterCriticalsectionで行うことが多いだろう
EnterCriticalsectionの例で考えると
EnterCriticalsection( &a ); //A
EnterCriticalsection( &b ); //B
こういう呼び出しがあって、AとBの呼び出し順がコンパイラの最適化で入れ替わる事はありえるか?
そんなことしたら即デッドロック、そんなおばかなコンパイラはありえない
他にも
EnterCriticalsection( &a ); //A
b=1; //B
こういうコードがあったとして、AとBが入れ替わる事はありえるか?
そんなことしたらBのコードが保護されなくなる、そんな最適化は常識的にありえないだろう

つまり、排他制御で囲まれている部分を飛び越えてのコードの入れ替えは起こるわけがないし、
排他制御の中のコードは一つのスレッドからしかアクセスされないので、単に排他制御にだけ気を使っとけば良い
0314デフォルトの名無しさん2015/11/01(日) 11:55:38.29ID:a/KTrDXN
排他制御だけ適切にしとけば
最適化によるコードの入れ替えやらアウトオブオーダーやらCPUキャッシュやらの
問題はすべて解決するし、そういう風にCPUもコンパイラも作って有るので
とにかく排他制御だけしっかりやっとけってこった
それ以上の議論は必要ない
0315デフォルトの名無しさん2015/11/01(日) 12:10:45.61ID:a/KTrDXN
コンパイラの最適化でコードの入れ替えが〜で問題になっていたのは
スレッドAで何か変数を読み書きをしていて
スレッドBからそれを読んだら変数の書き換えのタイミングが意図しないものになっていた
というものであるが、
言うまでもないが、複数のスレッドから同じ領域を読み書きしている状況は排他制御が壊れてバグっている
例外的にノンブロッキングなキューなどで意図的にそういうことをすることもあるだろうが、通常は狂った状態
バグった時の動作について議論しても意味がない、そんな暇があったらしっかり排他制御しろ
排他制御さえしておけば問題ないし、実際、世の中のプログラムはそうすることで
コンパイラの最適化でのコードの入れ替えなぞ気にする事もなく普通に動いているし
そうなるようにコンパイラもCPUもちゃ〜んと作ってある
議論の無駄
0316デフォルトの名無しさん2015/11/01(日) 12:11:41.22ID:83j3eZbo
入れ替わったら俺のコードが困る
→ゆえに俺のコンパイラーは入れ替えない

凄い理屈です
0317デフォルトの名無しさん2015/11/01(日) 12:13:20.76ID:83j3eZbo
ちなみにコンパイラーは何を見て入れ替えてはいけないと判断するんだ?
判断材料が何もないだろ?
0318デフォルトの名無しさん2015/11/01(日) 12:17:56.33ID:a/KTrDXN
お前もう議論する気もなくなるぐらいバカだな
コンパイラは、入れ替えてよいかの判断材料が何もなければ、ただ単に入れ替えない
あたりまえ
0319デフォルトの名無しさん2015/11/01(日) 12:19:07.01ID:I6OT07I5
>>317
だからなるべくconstとかつけましょう的な話なのでは
0320デフォルトの名無しさん2015/11/01(日) 12:20:24.59ID:a/KTrDXN
constなんかキャストしたら外せるし、コンパイラはそんなことを最適化の判断材料にはしない
ここは釣堀かよ
0321デフォルトの名無しさん2015/11/01(日) 12:21:12.99ID:kFpSN8VR
コンパイラに関数の中身が見えて、依存性が分かって、入れ替えても問題ない場合だけ入れ替えが許されるんだろ
EnterCriticalsectionみたいなのはコンパイラには中身が分からないからね
コンパイラがどこまで分かるかはその処理系による
ソース内の関数か外部ソースの関数かでも変わりうる
0322デフォルトの名無しさん2015/11/01(日) 12:22:43.07ID:I6OT07I5
>>320
少なくともgccはconstで判断してる箇所あるよ
そーすみてみそ
0323デフォルトの名無しさん2015/11/01(日) 12:23:34.31ID:a/KTrDXN
const int value = 1;
みたいなのは確かに最適化に使われるconstかもね
0324デフォルトの名無しさん2015/11/01(日) 12:24:02.37ID:83j3eZbo
直近のコードが排他制御コードを超えて移動すると勘違いした
外部リンケージの関数呼び出しだから二つは入れ替わらないな
>>318の言うとおりだ
0325デフォルトの名無しさん2015/11/01(日) 12:36:48.31ID:QtkQ0Wg4
素人はインテルのx86系CPUだけ使っとけ
そうすりゃ後はvolatileだけでOK
0326デフォルトの名無しさん2015/11/01(日) 12:43:17.09ID:v/vxYa9c
>>314
>Windowsだと排他制御はEnterCriticalsection
これはスゲー安パイではあるがライトキューとリードキューの「両方が」空になるまで待たされるので
数百(運悪くキャッシュのrefillが併発したら数千)クロックサイクルレベルの待ちが生じる
という具合で
せっかくのアウトオブオーダー実行がご破算になる、
ご破算になるのだ…!
0327デフォルトの名無しさん2015/11/01(日) 12:53:36.23ID:eOjFevzb
>>325
それはx86向けの頭にVがつく特定のコンパイラの中だけの話


ttp://d.hatena.ne.jp/Cryolite/touch/20101228#20101228f4
この記事とその前の記事で詳しく解説されてるから詳しくない奴は読め
とりあえず325は絶対読め
0328デフォルトの名無しさん2015/11/01(日) 13:09:03.16ID:Dh2LbIas
>constなんかキャストしたら外せるし

コンパイラにばれないように外せるとでも言うのだろうか?
0329デフォルトの名無しさん2015/11/01(日) 13:57:28.81ID:v/vxYa9c
void Foo::const_method() const {
 const_cast<Foo*>(this)->not_a_const_method();
}
みたいな?
0330デフォルトの名無しさん2015/11/01(日) 13:58:00.16ID:Wfult68o
>>328
> ここは釣堀かよ

釣のつもリなんだろ
言ってることがちょいちょいおかしいし
0331デフォルトの名無しさん2015/11/01(日) 14:06:59.71ID:v/vxYa9c
>>328>>330
普通に外せるわけだが、
const int a = 9999;
void foo(const int* p) {
*const_cast<int*>(p) = 1000;
}
int main() { foo(&a); }

ビルドは通るからコンパイラを騙せてゐる
多分推測だけど、言語仕様上は処理系依存か未定義動作か何かになっていると思う
0332デフォルトの名無しさん2015/11/01(日) 14:09:48.06ID:v/vxYa9c
、const属性な領域への書き込みに関しては
0333デフォルトの名無しさん2015/11/01(日) 14:24:53.41ID:eOjFevzb
>>331
それは未定義動作だからコンパイラによって関数呼び出し自体削除されても文句言えない
よって出来るとは言わない

そもそもconst_cast自体がコンパイラへconst外してと教えてるだけのもの
教えてるのにコンパイラにバレないように外せるとか何言ってんだか
0334デフォルトの名無しさん2015/11/01(日) 14:31:03.84ID:KbBmWBMW
vector<int>でcapacityが128になっていて
それを超えてpush_backするとプログラムがエラーになるんですけど
なぜですか?
0335デフォルトの名無しさん2015/11/01(日) 14:33:00.30ID:rWJZkGz+
>>334
それはあなたの頭がおかしいからです
お大事に
0336デフォルトの名無しさん2015/11/01(日) 14:33:37.96ID:eOjFevzb
>>334
最小の再現するコードをideoneとかcodepadに張れ

その過程で解決して張るまでもなくなるだろうけどな
0337デフォルトの名無しさん2015/11/01(日) 14:38:39.00ID:Wfult68o
>>331
バカすぎる w
0338デフォルトの名無しさん2015/11/01(日) 14:49:51.90ID:v/vxYa9c
>>332
混沌(ケイオス)かく始まりき、
>>331のfoo()が外部リンケージの関数だったとき、コンパイラにできることが本当にあるか冷静になって考えてみよう…
0339デフォルトの名無しさん2015/11/01(日) 14:51:35.06ID:v/vxYa9c
ちな、今の流れはちょう賢いコンパイラではなくて現用のやつ前提

>>336
ビルドは通った、と書いたが?
0340デフォルトの名無しさん2015/11/01(日) 14:54:17.76ID:v/vxYa9c
アンカミスった、>>338のは>>333へのレスorz
0341デフォルトの名無しさん2015/11/01(日) 14:57:13.16ID:64iMabHc
関係ないところに噛みついてしまったことは訂正しなくても良いのですか?
0342デフォルトの名無しさん2015/11/01(日) 14:57:16.21ID:eOjFevzb
>>340
じゃあ次はそれが328へのレスとして妥当であるかどうかを考えましょうね
0343デフォルトの名無しさん2015/11/01(日) 15:05:50.89ID:i5WJmpKv
みんなやめて!
俺のために戦わないで!!
0344デフォルトの名無しさん2015/11/01(日) 15:27:30.12ID:v/vxYa9c
>>341
スマン、

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

んまー>>320の言ってることは誤りだが(foo()の呼び出し元でconst前提の最適化は為され得る
>>331のfoo()が削除されるというのは言い杉
0345デフォルトの名無しさん2015/11/01(日) 15:39:39.56ID:eOjFevzb
>>344
fooだけ見たら正当なコードだろう。
fooの呼び出しが最適化で削除されないというのは関数を跨いでの最適化は行われないという前提での話
あなたの提示したコードは簡単にinlineに展開されうるし別の翻訳単位に移したとしても将来にわたってリンク時の最適化が行われない保証もない
その場限りの使い捨てコードしか書かないと決めてるのでなければ言いすぎじゃないんだよ。
あなたはそう決めてるのかもしれないけど、それを周りにまき散らすのは止めてくれ。
0346デフォルトの名無しさん2015/11/01(日) 15:55:39.84ID:a/KTrDXN
もはや面倒だからよんでもないんだけど
排他処理さえしっかり出来ていれば問題ないよ
03473342015/11/01(日) 15:59:01.70ID:KbBmWBMW
パソコンを再起動したらなぜか直りました
多分、何かしらのエラーによってDLL内の
アローケーターのコードがハングアップしたことにより
vectorのメモリーをアローケートしようとすると
ハングアップしたのだと思います。
そして再起動により新たなるDLLをメモリーに
アローケートしたことによりバグフィックスが
クリアーされたのだと思います
ありがとうございました
0348デフォルトの名無しさん2015/11/01(日) 21:51:55.02ID:IhLDgcVT
>>308
>これだと f をTに制限できないんじゃないでしょうか?
というのが気のせいということですか?

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

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

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

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

つまり>>345は全部誤り
混沌(ケイオス)かく始まりき…
0350デフォルトの名無しさん2015/11/01(日) 22:42:10.95ID:Wfult68o
>>349
> しかも言語仕様上はinline展開される関数のアドレスを取ることは合法、つまり実体としてのfoo()は常に存在するから

アドレス取られない時は実体を生成しなくていい
0351デフォルトの名無しさん2015/11/01(日) 23:22:57.61ID:s4vM5XPF
今度はカオスか、このスレは本当に奇人変人がよく集まるな まるで博物館だ
0352デフォルトの名無しさん2015/11/01(日) 23:23:48.76ID:eOjFevzb
>>349
そうだな>>331元のコードをちゃんと見たら >>345 は誤りだった
fooだけ見たら正当とか自分が恥ずかしい。

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

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

読めなかったら日本語訳してくれてる人が居るからその記事読め
0353デフォルトの名無しさん2015/11/01(日) 23:52:28.20ID:eOjFevzb
ついでに言うとかなり前からgccもmsvcもclangもリンク時最適化出来る
未定義動作を最適化する事によって何もしなくなった関数の呼び出しを削除するぐらい簡単だろうよ
0354デフォルトの名無しさん2015/11/02(月) 10:14:10.87ID:H6zkuXqe
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>を書かないようにできないんでしょうか
0355デフォルトの名無しさん2015/11/02(月) 10:39:22.65ID:pkynDUbv
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);
}
0356デフォルトの名無しさん2015/11/02(月) 10:54:40.24ID:H6zkuXqe
std::string s("abc");
BasicScopeOutHandler<> outo2(s, "");

これも動くようにしたいです
0357デフォルトの名無しさん2015/11/02(月) 11:04:34.97ID:pkynDUbv
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();
}
0358デフォルトの名無しさん2015/11/02(月) 11:09:21.26ID:H6zkuXqe
わかりました
ありがとう
0359デフォルトの名無しさん2015/11/02(月) 11:13:27.15ID:pkynDUbv
こういう書き方も出来ないでもないけど

#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(i)> outo(i, 0);
outo.print();
std::string s{"abc"};
BasicScopeOutHandler<decltype(s)> outo2(s, "");
outo2.print();
}
0360デフォルトの名無しさん2015/11/02(月) 11:18:17.84ID:n84MEZR7
>>354
template<typename U>
BasicScopeOutHandler makeBasicScopeOutHandler(U& target, const U& valueToSet);

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

こんな感じでいけなかったっけ?
0361デフォルトの名無しさん2015/11/02(月) 11:23:16.31ID:xR1wQeYt
inline指定した関数がインライン展開される条件がよくわからないんですが
たとえば関数内で関数呼び出しがあるとダメでしょうか?たとえば↓
class a {
vector<int> v_;
public:
inline size_t() {return v_.size(); }
};
0362デフォルトの名無しさん2015/11/02(月) 11:30:56.04ID:pkynDUbv
>>360
stringが素直に動かないけどそういう手もあるな

http://ideone.com/cWEh9h
0363デフォルトの名無しさん2015/11/02(月) 15:50:12.29ID:l0YqebeX
>>361
inlineは単にコンパイラへのヒントでインライン展開される条件は言語仕様的には決まってないよ
強制的にインライン展開したいなら
__forceinline (VC)
__attribute__((always_inline)) (GCC)
0364デフォルトの名無しさん2015/11/02(月) 16:24:49.76ID:pyzNwXiR
>>363
再帰してたらどうなるの?
0365デフォルトの名無しさん2015/11/02(月) 17:19:59.82ID:sH3CQlXL
再帰の深さが翻訳時定数になるならアンロールできるね
0366デフォルトの名無しさん2015/11/02(月) 17:39:42.86ID:l0YqebeX
>>364
どんな関数でもインライン化出来るというわけじゃもちろんない
VCの__forceinlineの場合
https://channel9.msdn.com/Forums/TechOff/56830-Does-forceinline-guarantee-the-code-to-be-inline/fa0cde630fc144cc81cb9dea011d3fc6
0367デフォルトの名無しさん2015/11/02(月) 19:07:02.80ID:pyzNwXiR
看板に偽りありだね。effortinlineじゃん。
0368デフォルトの名無しさん2015/11/02(月) 19:52:12.81ID:xR1wQeYt
>>363
ありがとうございます

インライン展開されたかどうかは一般的にはアセンブリコードを見ないとわからないようで
VSで吐いて頑張って見てみましたが、stdコンテナのせいか複雑すぎて自分にはワケワカメですた
0369デフォルトの名無しさん2015/11/02(月) 22:17:34.05ID:YJ91Wm1P
>>367
そりゃできないもんはしょうがないだろ
再帰はネスト8まで(変更可)できるみたいだし
0370デフォルトの名無しさん2015/11/02(月) 22:54:03.85ID:pyzNwXiR
>>369
出来ないならforceと名乗るなと言う主張なのだが。
0371デフォルトの名無しさん2015/11/02(月) 23:04:16.53ID:YJ91Wm1P
あすぺの方かな?
0372デフォルトの名無しさん2015/11/03(火) 00:53:31.97ID:/tqLaLx+
__enforce_inline_if_possible
0373デフォルトの名無しさん2015/11/03(火) 01:27:57.22ID:aAIJ30cE
初心者質問で申し訳ないんだがプリミティブな型(配列とかではない)をわざわざ参照やポインタで渡す利点って何?
でかいクラスとかベクタは寝私じゃまずいんだろうけど

ベストプラクティス集みたいなのが知りたい
0374デフォルトの名無しさん2015/11/03(火) 01:32:24.06ID:kkml9wFg
>>373
出力を(戻り値としてではなく)受け取りたい場合とか
0375デフォルトの名無しさん2015/11/03(火) 08:11:12.58ID:MzR8Ch2t
>>373
ファイルから4byte取ってint値を返す関数みたいな、
関数の返す値がintの全範囲を取りうる上に、
別にエラーフラグも欲しい場合とか。

結果値とエラーフラグの構造体ってのも座りが悪い気がする故。
0376デフォルトの名無しさん2015/11/03(火) 08:50:54.22ID:LsPLW4EI
そんなクソな理由なら
もう言語仕様にdestructuring入れちまえよ
0377デフォルトの名無しさん2015/11/03(火) 13:42:32.87ID:cBt+bdl5
まぁそういうわけのわからないものは入れないってのがCのポリシーだからな
0378デフォルトの名無しさん2015/11/03(火) 17:39:36.79ID:BAZ2T+2b
>>373
Int型のデータを4byte分のchar型領域に格納したい時とか
0379デフォルトの名無しさん2015/11/03(火) 20:35:08.57ID:Xgba2yKF
> 寝私

ね・・・値渡し?
0380デフォルトの名無しさん2015/11/03(火) 21:10:03.53ID:f9WhIZl3
良く読解できたな
俺は何のことだかさっぱり分らんかったわ
ネワタシね
0381デフォルトの名無しさん2015/11/03(火) 22:44:59.85ID:tQp1seHW
い・・・引数
ね・・・値渡し
0382デフォルトの名無しさん2015/11/04(水) 00:07:29.19ID:lNTSrs7r
ああなるほど、そういう事か
> ねわたし
0383デフォルトの名無しさん2015/11/04(水) 00:09:39.58ID:lNTSrs7r
いんすうって読んでる人には会ったことあるけど、ねわたしは初めてだわ
0384デフォルトの名無しさん2015/11/04(水) 10:11:00.23ID:knfKdYCP
 
米Microsoft社 まいくろそふと

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

OneDrive「無制限」廃止

        http://goo.gl/vyy1PO

 
0385デフォルトの名無しさん2015/11/04(水) 10:23:47.98ID:WTQazYun
定数は、

ていすう?
じょうすう?
0386デフォルトの名無しさん2015/11/04(水) 10:35:27.81ID:anjRIvjf
さだかず
0387デフォルトの名無しさん2015/11/04(水) 10:41:49.13ID:JtLiF9NW
誰だよ
0388デフォルトの名無しさん2015/11/04(水) 19:07:21.77ID:BxtwdD3S
local layer = cc.Layer:create() -- レイヤーを作成
local texture = cc.Director:getInstance():getTextureCache():addImage("texture.png")


cocos2dxのC++なのですが、セミコロンの意味がよくわかりません。
セミコロンの後に関数を書くような記述って一般的なC++でもありますか?cocosが特別なだけでしょうか?
0389デフォルトの名無しさん2015/11/04(水) 19:09:52.06ID:BxtwdD3S
すみません。コロンでした。
0390デフォルトの名無しさん2015/11/04(水) 19:14:51.93ID:v71WI/Wg
それc++じゃなくてluaじゃね?w
0391デフォルトの名無しさん2015/11/04(水) 19:16:02.64ID:+TsKcPkL
>>388
それC++じゃなくてluaじゃね?
0392デフォルトの名無しさん2015/11/04(水) 19:16:55.52ID:+TsKcPkL
一分以上遅くまるかぶりした…
0393デフォルトの名無しさん2015/11/04(水) 19:18:12.36ID:v71WI/Wg
丸かぶりやめーやwww
連投した思ったわw
0394デフォルトの名無しさん2015/11/04(水) 19:32:54.97ID:S5IgxevX
この被り方はやるなw
0395デフォルトの名無しさん2015/11/04(水) 20:24:49.37ID:T4zkVKip
ワロタ
草一個の差かよ
0396デフォルトの名無しさん2015/11/04(水) 21:19:20.53ID:lblQBd0R
それにc++とC++ w
0397デフォルトの名無しさん2015/11/04(水) 21:25:46.25ID:+TsKcPkL
>>393
すまんw

書き込む直前にスレ更新して未読メッセージを一覧表示する機能があれば、この丸かぶりは俺だけのもんだったんや…
0398デフォルトの名無しさん2015/11/06(金) 01:49:10.60ID:82c/dtbv
例外使用で
例外がどこから発生したかを調べる定石ってなんかありますか?
スルーする型に発生した場所の情報を埋め込むとか?
0399デフォルトの名無しさん2015/11/06(金) 02:11:58.70ID:7H52eTq5
>>398
埋め込むほかに無いと思うんだけど、それで何か問題でも?
0400デフォルトの名無しさん2015/11/06(金) 02:18:06.51ID:PhAaiQpi
whatに入れとけば事足りるよね
そんな色んな所から例外出るわけでもないし
コールスタック欲しくてデバッガ使えるなら例外発生時のbreak入れれば
0401デフォルトの名無しさん2015/11/06(金) 07:42:58.68ID:82c/dtbv
whatという機構があったんですね、知りませんでした、ありがとうございます

>>399
↑のようなことも知らなかったので・・・
0402デフォルトの名無しさん2015/11/06(金) 12:57:38.82ID:5OTArlnR
What?!
0403デフォルトの名無しさん2015/11/06(金) 22:52:44.46ID:PcJjmoGr
まあ、__FILE__と__LINE__を保持っておけば良いんじゃね?
0404デフォルトの名無しさん2015/11/07(土) 05:08:13.90ID:13F/39Al
このスレってスキル高い人多そうだけど、そういう人が
アプリケーションの開発力も高いとは限らないもんでしょうか?
0405デフォルトの名無しさん2015/11/07(土) 08:32:12.74ID:mDm5qU1u
アプリケーションの開発で重要なのは、開発カより例えば >>404 で自分が欲しい答えをちゃんと返せる様な質問をする能力
0406デフォルトの名無しさん2015/11/07(土) 09:17:42.53ID:XiUv/MWJ
数学板から誘導されてきました

下記の組み合わせ最適化問題を解きたいのですが、計算量が膨大になるため、効率のよい解き方を探しています
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くらいを想定しておりますので、これを全探索するとなると不可能です
何かヒューリスティックな解き方はありますでしょうか

よろしくお願いいたします
0407デフォルトの名無しさん2015/11/07(土) 12:00:33.53ID:0KPezM4w
すべての事象が独立してるのだから単純なタスク分割&スレッド化で十分。
0408デフォルトの名無しさん2015/11/07(土) 12:04:40.36ID:G66S+Nhf
スレ違いの気はするがとりあえず。

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

nの探索順序を決めて次数M深さNの探索木を考えた場合は、下の方から緩和部分解を
求めておけば比較的簡単にできる。
nの順序や探索順序(深さ優先、幅優先等)など検討する余地はあるけど。
0409デフォルトの名無しさん2015/11/07(土) 14:00:20.34ID:XiUv/MWJ
>>408
ありがとうございます
分枝限定法で実装してみたいと思います

某所で質問した際には遺伝的アルゴリズムの利用が有効かもしれないと言う助言をいただいたのですが、この手の問題には有効なのでしょうか
詳しい方がおられましたらお教えいただけると嬉しいです
0410デフォルトの名無しさん2015/11/07(土) 14:34:34.34ID:aJXYP9QX
宿題スレでやれ
0411デフォルトの名無しさん2015/11/07(土) 16:12:16.42ID:CNI6gO7O
>>409
厳密解である必要がないなら有効だろね
まぁ遺伝アルゴというかモンテやね
0412デフォルトの名無しさん2015/11/07(土) 17:20:47.01ID:FO8fPt0J
質問です。
STLにさまざまなものがありますが
ライブラリの使い方(文法)を覚えていく方法
一つ一つの関数の仕組みまで勉強していく方法

当然関数の仕組みまで覚えるに越した事はないのですが
初めから関数の仕組みまで覚えるべきでしょうか
0413デフォルトの名無しさん2015/11/07(土) 18:47:37.20ID:P638M0v0
>>412
CでもC++でも何でも良いからしっかり基礎を学ぶべき。

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

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

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

データ構造、重要。
0414デフォルトの名無しさん2015/11/07(土) 18:57:28.00ID:V1z7c7F8
listはC++03までsizeの実装方法は決められてなくてC++11でO(1)になるよう決められたよ
0415デフォルトの名無しさん2015/11/07(土) 19:06:00.19ID:P638M0v0
まじか
メンバとして値を持つ感じになるんかね。
0416デフォルトの名無しさん2015/11/07(土) 20:01:11.90ID:V1z7c7F8
>>415
そう。
そのためにgccのlibstdc++のlistはABIが変わる
https://gcc.gnu.org/wiki/Cxx11AbiCompatibility

clangのlibc++は最初から定数オーダーで実装されてる
0417デフォルトの名無しさん2015/11/07(土) 22:42:33.58ID:P638M0v0
>>416
なにそれ怖い
というか思ったよりあちこち変わってるのな。

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

ご教示いただけましたら幸いです
0419デフォルトの名無しさん2015/11/08(日) 01:10:10.99ID:OJJscNiO
考えてみましたが>>418はやはり無理そうでした
お手数お掛けしました
0420デフォルトの名無しさん2015/11/08(日) 13:04:27.46ID:gczgyzuS
学生数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)

ただ、色々仮定を置いてるから実際には最適解を複数保持したりだとか焼きなまし法を使ったりだとか
工夫は必要だと思うけど。
0421デフォルトの名無しさん2015/11/08(日) 13:26:50.84ID:OyB7Ho6V
総当たりだと計算量どのくらいになるの?
0422デフォルトの名無しさん2015/11/08(日) 14:42:08.03ID:HlEs+VqN
>>420
eが科目毎の上昇点なのか全科目の合計なのか良くわからんなあ。
科目毎だとしたらEを超える確率を求めることに意味はあるんだろうか。
上昇点の合計が一番大きいものを選べば最適に近いと言っているだけにも見えるが。
0423デフォルトの名無しさん2015/11/08(日) 14:53:00.18ID:gczgyzuS
>>421
んーと
生徒数P、科目数N、強化学習授業の種類が各科目ごとにM通りとすると
M種類の強化学習授業の選択をN回繰り返す試行をして、それに対しP人の生徒の上昇得点をN科目について加算するわけだから
O(M^N*P*N)
くらいじゃないかな。
N=M=10, P=1000の元でおよそ2^30回の加算。待ってりゃそのうち終わる程度の計算時間。
0424デフォルトの名無しさん2015/11/08(日) 15:02:22.03ID:gczgyzuS
>>422
最初の3行を除いて、科目ごとの上昇得点じゃなくて全科目の合計の上昇得点について言ってる。
総和が云々の添字付きのμやσは各科目毎。
σ_i^2≒μ_iの近似で一般の正規分布ではなくポアソン分布の定理を使ってる。
0425デフォルトの名無しさん2015/11/08(日) 17:46:23.21ID:HlEs+VqN
Pr(e>E)には授業の組み合わせがパラメータとして存在して、それぞれ異なる分布ということだよね。
とすると最適化の肝のこの部分は

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

単純な山登りで、次に探索する方向を決定するのに計算量の軽い評価関数(*)を使うということか。
本当に目的関数を最大化する方向に進むのかどうかってのとローカルミニマムに嵌りそうなのは
気になるけど。
>>420で書いてるように焼きなまし法なりを使う必要はあるだろうね。
0426デフォルトの名無しさん2015/11/09(月) 09:56:26.57ID:ddVcBsOP
場所もわきまえず
どこでもオナニーする奴なんなの
みているこっちの身にもなってくれ
すれ違いにスルーもできないのだろうか
レベルの低い奴だな
0427デフォルトの名無しさん2015/11/09(月) 13:18:17.88ID:ui6/e9F0
見なけりゃいいだろw
たまのスレ違いへのレスにいちいち腹立てるとか
0428デフォルトの名無しさん2015/11/09(月) 13:35:12.41ID:XQ/YTWqk
個人的に気に入らない書き方に腹を立てるような奴に何を
0429デフォルトの名無しさん2015/11/09(月) 14:18:52.79ID:cYOWQcMh
スルー出来ないレベルの低い奴ですという自己紹介でしょ
0430デフォルトの名無しさん2015/11/09(月) 14:51:13.36ID:0gQn1clE
質問です

まだ実際にやったわけではないので知ったかなところがあるかもしれませんが、Linuxでのncursesと同じような働きをするものはwindowsにはないのでしょうか、、、
0431デフォルトの名無しさん2015/11/09(月) 14:54:51.84ID:xDt2hEwv
>>430
cygwinかmsysか何か+ncursesじゃ駄目なの?

ncursesは内部でターミナルのエスケープシーケンスを使ってカーソル動かしたり画面切り替えたりしてるから、
windowsのコマンドプロンプトにそういう隠し機能が無い限りは存在し得ないと思うよ。
俺はもう面倒くさくなってオーナードローする方向に行ったけど。
0432デフォルトの名無しさん2015/11/09(月) 16:06:19.72ID:ddVcBsOP
>>427
ルサンチマン特有の考え方だな
お前は一生成功者を妬んで生きていくがいい
0433デフォルトの名無しさん2015/11/09(月) 16:37:44.83ID:0gQn1clE
>>431
学校ではDebianを使っているのでncursesでも良いのですが、家の普段の開発環境はWindowsのconemuを使ってるのでそっちでできると助かるのです。
ないのであればWindowsではVisualC++とかを使って作るしかないのですよね
0434デフォルトの名無しさん2015/11/09(月) 17:05:28.90ID:ddVcBsOP
学校の質問は学校でしろカス
0435デフォルトの名無しさん2015/11/09(月) 17:08:40.90ID:ddVcBsOP
常識しらずの小便臭いガキはかあちゃんのおっぱいでもペロペロしてろよ
0436デフォルトの名無しさん2015/11/09(月) 17:44:55.09ID:xDt2hEwv
>>433
ググったらconemuでncursesが使えそうだけど?
Inject ConEmuHkとANSI X3.64の2つをonにすればANSI escape sequencesが使えるって書いてある。

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

http://superuser.com/questions/561740/how-to-enable-color-options-in-conemu-similar-to-bash-terminal
https://en.wikipedia.org/wiki/ANSI_escape_code
0437デフォルトの名無しさん2015/11/09(月) 18:12:23.70ID:0gQn1clE
>>434
そもそも学校のプログラムでそこまでやらないです。

>>436
ありがとうございます!
試してみたいと思います。
0438デフォルトの名無しさん2015/11/09(月) 19:03:24.85ID:0gQn1clE
>>436
画面がクリアされて文字色がワインレッドになりました
0439デフォルトの名無しさん2015/11/09(月) 19:10:29.92ID:xDt2hEwv
>>438
じゃぁncursesをインストールして使えば?
多分使えるから。

あるいはエスケープシーケンスについて調べてncursesモドキを作るとか。
自分のマシンでだけ動きゃいいんならそんなに難しくないよ。
0440デフォルトの名無しさん2015/11/09(月) 19:22:23.15ID:fyLz/sBu
32bit windowsならansi.sys
0441デフォルトの名無しさん2015/11/11(水) 20:18:12.05ID:ukRjpW0W
http://i.imgur.com/UFmYAuK.jpg
0442デフォルトの名無しさん2015/11/11(水) 20:49:02.48ID:wdiN+26M
iterator = 万能になったポインタ っていう掴みで悪くないかな?
0443デフォルトの名無しさん2015/11/11(水) 21:30:42.79ID:Tc78WGfj
iteratorって必ずしもポインタじゃないだろ
どちらかってと帰納法の一般式ですといわれた方がぴんとくるんだが
0444デフォルトの名無しさん2015/11/11(水) 21:49:23.78ID:N9P9dKNU
帰納法の一般系って数学的帰納法(あるいは超限帰納法)じゃね?
イテレータって再帰処理してるの?
0445デフォルトの名無しさん2015/11/11(水) 21:57:04.54ID:WDtG518P
万能もポインタはスマートポインタの方で
イテレータはイテレータだろう
0446デフォルトの名無しさん2015/11/11(水) 22:03:35.22ID:N9P9dKNU
いや、「帰納法」「一般式」だけみてアホなこといってました、すいません。
++i 自体、++(++i)みたいに考えれば帰納的だし、数学的なんちゃらは全てを数え上げることが本題でしたね。
とても恥ずかしい
0447デフォルトの名無しさん2015/11/11(水) 22:14:12.41ID:Q1JmCgC7
数学的帰納法は帰納法ではないものの代表だと言うのに
0448デフォルトの名無しさん2015/11/11(水) 22:51:35.10ID:lGaCUbJ1
まさに走査子。
なかなか素晴らしい訳なんじゃないかと思う。

商品を一個ずつ掴んで検査するロボットアームみたいなものをイメージすればよいのではないかと。
0449デフォルトの名無しさん2015/11/12(木) 00:45:27.72ID:JWXmz4jM
525本
0450デフォルトの名無しさん2015/11/12(木) 01:28:41.05ID:/8Fe5VeX
汎用になったポインタじゃね?
0451デフォルトの名無しさん2015/11/12(木) 01:41:54.65ID:BmfTbCza
ポインタだとリンクリストはポインタの加減算で移動できない。ポインタはどういう意味で使っているか前後を見ないとわからない。

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

参照はnull参照も付け替えもできないから代替としては弱いけれど。
0452デフォルトの名無しさん2015/11/12(木) 05:57:05.06ID:eWqhTRW7
NTSC! NTSC!
0453デフォルトの名無しさん2015/11/12(木) 06:52:24.86ID:Mz0/g+xS
C++でどうも概念が理解しにくい言葉があるんだけどこれであってるのか?

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

ポインタとイテレータが違う構造なのもわかるけどイテレータがピンと来ない感じ
0454デフォルトの名無しさん2015/11/12(木) 08:05:18.35ID:iQ6UIi2A
ポインタ→メモリ上の"場所"を指すもの
参照→メモリ上の"モノ","オブジェクト"を指すもの
イテレータ→ループを処理側ではなく状態側で切り取ってむりやりオブジェクト化したもの
コンテナ→別のオブジェクトを入れる入れ物・受け皿 複数のものをどう並べておくかで種類が分かれる
関数オブジェクト→関数を"ハードコーディング"せず間接的に記述・構築する仕組み
0455デフォルトの名無しさん2015/11/12(木) 08:23:02.05ID:BmfTbCza
イテレータはコンテナの要素を指し、指す要素を移動できるモノ。

配列要素を指すポインタを抽象化・拡張。
0456デフォルトの名無しさん2015/11/12(木) 08:38:17.92ID:G83c/GIg
>>455
それはコンテナのイテレータ
イテレータの概念は添字付けられたもの(可算個)全般の実装
コンテナのイテレータは、あくまでその一例
0457デフォルトの名無しさん2015/11/12(木) 10:15:01.62ID:GK7FZzYO
イテレータとポインタを混同するっていうのって何か新鮮だな
まぁC++の場合はポインタに寄せてってるから分からんでもないが
JavaのEnumerationだとhasMoreElements()とnextElement()
JavaのIteratorだとhasNext()とnext()
C#のIEnumerator だとMoveNext()とCurrent
こーいうのも知っておけば混同しようが無いと思うけど
0458デフォルトの名無しさん2015/11/12(木) 11:49:30.88ID:LxPNMIkD
ポインタは言語に組み込まれた機能要素で、それを使ってイテレータなどの概念を実装している。
レンズを使って望遠鏡を作るとか顕微鏡を作るとかいう関係と同様。
関数オブジェクトはなんでその文脈で出てくるのか理解できない。
0459デフォルトの名無しさん2015/11/12(木) 12:12:47.18ID:+BgE0e3i
メンバ変数ポインタからメンバ変数の型を
取り出す方法はありますか?

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

こんなイメージです
0460デフォルトの名無しさん2015/11/12(木) 12:26:18.33ID:9l61Vk4V
>>459
decltype(Foo::bar)
0461デフォルトの名無しさん2015/11/12(木) 12:50:44.86ID:+BgE0e3i
>>460
ありがとうございます
できればmem2type<メンバ変数ポインタ>::typeとして使用できる方法も知りたいのですが可能でしょうか?
0462デフォルトの名無しさん2015/11/12(木) 13:25:07.11ID:LxPNMIkD
>>461
やりたいことがよく見えない。
メンバボインタを引数に渡すということであれば
template <typename R. typename T>
R memp2type(R T::* p);

という関数を宣言して、
decltype(memp2type(p));
とやればできるかな?
0463デフォルトの名無しさん2015/11/12(木) 13:39:00.75ID:zAzQWwNw
<>は使えないが

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; };

…目的が見えないな
0464デフォルトの名無しさん2015/11/12(木) 13:40:26.70ID:zAzQWwNw
1行目間違えた
template<class T> struct mem2type_impl { typedef T type; };
0465デフォルトの名無しさん2015/11/12(木) 13:52:08.03ID:+BgE0e3i
すみません、テンプレートを使うというよりは、
C++03の範囲で行う手段が知りたいのですが、
何か方法はありますでしょうか。
0466デフォルトの名無しさん2015/11/12(木) 13:52:52.81ID:zAzQWwNw
BOOST_TYPEOF
0467デフォルトの名無しさん2015/11/12(木) 14:30:10.82ID:+BgE0e3i
>>466
ありがとうございます
予想以上に大掛かりな処理が必要そうでびっくりしましたが、調べてみたいと思います
0468デフォルトの名無しさん2015/11/12(木) 14:47:53.39ID:zAzQWwNw
>>467
使うツールセットは?
msvcやgccあたりなら特に準備しなくても動く(コンパイラの独自拡張を裏で使うので)
0469デフォルトの名無しさん2015/11/12(木) 21:24:48.58ID:JxIPjKjJ
>>447
嘆かわしいことに機械学習の本では大概数学的帰納法の意味で帰納法と書いてある…
0470デフォルトの名無しさん2015/11/12(木) 23:01:53.17ID:VdOPydER
部分特殊化の基本的な使い方じゃないの?
ためしてないけどこんな感じ

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));
}
0471デフォルトの名無しさん2015/11/13(金) 00:22:52.33ID:wyADWSOf
>>457
EnumerationとIterationを混同してるぞ…
0472デフォルトの名無しさん2015/11/13(金) 00:34:21.81ID:GGTDEwnn
それに違いなんて無いぞ?
英語の話をしたいのか?
0473デフォルトの名無しさん2015/11/13(金) 00:37:47.63ID:gkMX52H5
>>470
>>465にC++03の範囲でって書いてあるから、decltypeが使えない状況なんじゃない?
0474デフォルトの名無しさん2015/11/13(金) 00:44:18.74ID:wyADWSOf
>>472
あるから。
enumerationは列挙。
iterationは反復。
enumerationするための手段がiterationな。
それを同じと言っても確かに問題ない事が多いけど、それなら配列へのポインタをイテレータと言っても問題ないレベルの違いな。
0475デフォルトの名無しさん2015/11/13(金) 02:02:36.76ID:GGTDEwnn
名前の都合でしかないから
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の場合は登場時からブロック付きメソッドを「イテレータ」と表現してた経緯があり
外部イテレータを提供する(?)ときにこの名前が使われた
http://docs.ruby-lang.org/ja/1.9.3/class/Enumerator.html
> 要約
> each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使えます。

迷いのない言語には片方しか用意されてない
両方を区別して使い分ける必要が無いから
0476デフォルトの名無しさん2015/11/13(金) 02:54:36.52ID:W9y/9ft7
一般的な語意の話なら >>474 も正解。
具体的な Java や Ruby のインターフェースの話なら >>475 も正解。

話がかみ合ってないだけ。
0477デフォルトの名無しさん2015/11/13(金) 06:46:34.15ID:VFyva8w7
この流れで一般的な語彙の話する奴がバカなだけ
違いがわかる俺カッケー君 w
0478デフォルトの名無しさん2015/11/13(金) 08:32:09.27ID:wyADWSOf
だから>>457も見方の問題であって、iterationとenumerationを同列に扱う立場で話を始めているのに、何故ポインタとイテレータを同列に扱う見方を上から目線で小馬鹿にしてるのかがわからない、という指摘でしょ。
0479デフォルトの名無しさん2015/11/13(金) 09:06:29.82ID:gfKlURBY
ポインタとイテレータを同列に語ったらそりゃ小馬鹿にされます(教育)
0480デフォルトの名無しさん2015/11/13(金) 12:29:14.68ID:wlkMWFWk
ポインタもそうだが、英語のニュアンスの違いを説明するなら、
イテレーションを積み重ねたのが列挙というべき。
イテレーションは繰り返し操作の1単位という意味もあるし、
実際プログラミングはその意味のが近い。
0481デフォルトの名無しさん2015/11/13(金) 13:20:33.94ID:+1eGYaPq
列挙の手段が反復
反復の結果が列挙
0482uy ◆Qawu9.2l1E 2015/11/13(金) 15:32:34.62ID:Y891nyvQ
C++の使いどころってマジでどこ
ちなみにゲーム関連は他言語で間に合ってる
0483デフォルトの名無しさん2015/11/13(金) 15:35:06.05ID:4ohAy024
組み込み
0484デフォルトの名無しさん2015/11/13(金) 15:45:56.89ID:cTzYhkFo
なんでコンパイルが通るのか?
何故〜が出来るのか?
それは逆に言えば、コンパイラが独自で判断した結果。
ついでに言えば、コンパイルは通っても実行時エラー
が出る可能性がある。
変なアドレスにアクセスしてしまう事もある。

何故出来るのかと疑うより、疑い用の無いコードを書けば良し。
0485デフォルトの名無しさん2015/11/13(金) 17:54:33.02ID:jSCbd5hj
>>481
つまりデータを"列挙"するために、そのデータに一定の操作を加えて"反復"させるということで、
そのデータを指し示す物がイテレータということになるのでしょうか?
0486デフォルトの名無しさん2015/11/13(金) 18:38:26.94ID:+1eGYaPq
ただの言葉遊びに反応されても困る
まじめに考えるな
0487デフォルトの名無しさん2015/11/13(金) 18:52:41.76ID:jSCbd5hj
>>486
コンテナを指すもの=イテレータと思って間違えないならそうします
0488デフォルトの名無しさん2015/11/13(金) 19:41:25.51ID:I9q4X3X4
反復結果列挙!


いえ、並べただけですよ
0489デフォルトの名無しさん2015/11/14(土) 03:13:06.25ID:nfjsLiRt
>>474>>481
はげどう
C#のIEnumeratorとか要素だけが列挙されて出てくるのや
確かに種も仕掛けもiterationっぽいがユーザーからは見えないカンジ
0490デフォルトの名無しさん2015/11/14(土) 03:15:27.20ID:nfjsLiRt
ていうかIEnumeratorはyieldを使っても実装できるからそうすると
iteratorは何処?ここは誰?状態に個人的によくなる
怖い…
0491デフォルトの名無しさん2015/11/14(土) 05:15:42.95ID:iwAmPq2+
列挙する手段は再帰でも構わないわけだけど、再帰を理解できない某スレの低脳はどうするんだろう?
0492デフォルトの名無しさん2015/11/14(土) 12:52:37.77ID:FyDiFGtK
皆さんはライブラリの関数は大体覚えているんですかね?
0493デフォルトの名無しさん2015/11/14(土) 12:59:51.14ID:FyDiFGtK
まだ学生なのですが
ctype time string iomanip iostream fstreamの関数を覚えるので精一杯感があって
実際の仕事をされている方々もリファレンスを見たりしながらやるのでしょうか?
0494デフォルトの名無しさん2015/11/14(土) 13:34:53.75ID:Fh2qjyRJ
基本的には何も覚えないよ
他の言語もいろいろやってると「この時はこういうの」
っていうクラスなり関数なりが思いつくから
それを探して使うだけ
クラスライブラリの全容を学ばなきゃいけないのかと最初は思うだろうけど
必要に応じて学んでいけばそれで十分
もちろん、先に全容を掴んでいればそれはそれで君にとって有利ではある
0495デフォルトの名無しさん2015/11/14(土) 13:50:41.11ID:DASkv8IC
よく使うクラス(例えばstringとか)なら覚えちゃってるけど
基本はリファレンス検索したりヘッダー検索したりググったりして解決ですよ
0496デフォルトの名無しさん2015/11/14(土) 14:10:57.22ID:AK9Sm4Mt
カテゴリレベルでのどういった道具があるかは知っておいたほうがいいけど詳細までの丸暗記は無意味だな
詳細は>>495みたいによく使うものなら自然に覚えていくしめったに使わないものなら無理に覚えておく必要がない
0497デフォルトの名無しさん2015/11/14(土) 15:30:41.71ID:FyDiFGtK
では、あれをしたいという時にそのライブラリと関数がわかるくらいでいいのでしょうか、引数まで覚えることもないのでしょうか?
0498デフォルトの名無しさん2015/11/14(土) 16:20:33.76ID:DASkv8IC
覚えなくていい
テストに出るなら頑張って覚えた方がいいがw
0499デフォルトの名無しさん2015/11/14(土) 16:22:40.30ID:iX1kSKz7
ありがとうございます!
0500 ◆tAo.kQ2STk 2015/11/14(土) 16:26:49.52ID:1e4erM+I
しょっちゅう使う関数なら自然と引数の型やその順序まで覚えてしまうものだけど、
基本的には「あれをしたい」って思った時にそのライブラリというかカテゴリの名前が分かりゃそれで十分かな。
ググれるから。

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

ただ、標準ライブラリに何が用意されてるのか位はさらっと目を通しておいたほうがいい。
よほど特別な理由がない限り、標準的な関数やクラスを自分で実装するのは2つの理由で無駄だから。
1つ目の理由は、もちろん既にあるものを自分で実装するのが時間の無駄だってこと。
バグ取りなんかも必要だし、よっぽど腕が良くないと既存の物より高速に動作する物は作れない。
2つ目の理由は、そのコードを読んだ人に「このVariableArrayクラスはstd::vectorクラスと何が違うんだろう?」って調べる事を強要するから
他人の時間を無駄にしてしまうってこと。
0501デフォルトの名無しさん2015/11/14(土) 16:39:01.71ID:LsNNjMuZ
仕事でGTK使うことなんてあるの?
0502デフォルトの名無しさん2015/11/14(土) 16:57:20.04ID:nfjsLiRt
Aを覚えるよりBを覚えたほうが良い ⇒ ワカル
Aは覚えなくていい ⇒ ワカラン…

特にペナルティーとか何かと引き換えとかが無いなら、記憶する方が良いに決まっている
0503デフォルトの名無しさん2015/11/14(土) 17:01:26.38ID:DASkv8IC
そら時間をかけずに覚えられるなら覚えた方がいいさ
でもそんな奴は相談に来ないだろ
0504デフォルトの名無しさん2015/11/14(土) 17:03:36.95ID:KefGJNy1
まぁ、多すぎて覚えられないという前提がなければ、全部覚えたほうがいい
ただ普通の開発者はプロでも、よく使うとこと、今よく使ってるとこくらいしか覚えてない

俺はSTLのalgorithm周りやら、boostのublasなんかは特にリファレンスしなくても使えるが、
iostreamとかstringとかはかなりメジャーだろうけど俺はいちいた覚えてないから使うときは調べる
0505デフォルトの名無しさん2015/11/14(土) 17:04:32.34ID:/ti03Yhd
時間を引き換えにせず覚える事の出来る人間ばなれした優秀なやつか、はたまた時間を無限のように感じているニートか

>>504
それは単によく使うから覚えてるだけだろ
0506デフォルトの名無しさん2015/11/14(土) 17:05:28.30ID:KefGJNy1
あれioは標準入出力だから覚えてるか
すまんファイル入出力を覚えてないの間違いだたofstreamみたいなやつ
0507デフォルトの名無しさん2015/11/14(土) 17:06:16.95ID:KefGJNy1
>>505
そう、よく使うから覚えてるだけ
それで充分だと俺は思うが…
0508デフォルトの名無しさん2015/11/14(土) 17:11:41.12ID:hcV3aB4u
ハッカーなら覚えていて当然だけど
一般人なら覚えてなくていいよ
テストで100点取るのとは違うんだからね
0509デフォルトの名無しさん2015/11/14(土) 17:29:13.74ID:nfjsLiRt
何を真とするかの基準も無く
ただ易きに流れるだけの人に仕様を満足する仕事は期待できない…
期待できないのだ…!
0510uy ◆Qawu9.2l1E 2015/11/14(土) 18:02:46.08ID:Shexr7Cq
今10分くらいで全部覚えてきた
http://www.cppll.jp/cppreference/index.html

この程度も覚えられないとか甘え過ぎ
ダウンロードボタンあるからDLしてコンビニいって全部印刷オススメ
0511デフォルトの名無しさん2015/11/14(土) 18:15:33.61ID:hcV3aB4u
日本語で覚えるとかありえないしし(ププププ
0512デフォルトの名無しさん2015/11/14(土) 18:21:18.79ID:/ti03Yhd
カスに構うなよ
0513デフォルトの名無しさん2015/11/14(土) 18:47:38.72ID:Va7f2G7P
>>509
> 何を真とするかの基準も無く

吠えてるだけだよな


お前って
0514デフォルトの名無しさん2015/11/14(土) 18:57:41.40ID:cBGEdvst
そりゃ覚えた方が良いに決まってるけど、覚える事を最優先にする必要は無いよねー
目的は何かを作る事であるわけですから、作る方に労力使う方がイイよねー
そして、その過程でよく使うものは、そのうち嫌でも覚えちゃうものさー
0515デフォルトの名無しさん2015/11/14(土) 19:46:32.92ID:vZ7mka6Q
でもダメな奴のソースコードって、標準で用意されてるのに使わない奴多いよね。
他の言語の知識がないのなら、一覧表くらい眺めてみてもよいのでは?
0516デフォルトの名無しさん2015/11/14(土) 20:06:52.07ID:DASkv8IC
そりゃいざ必要なときに調べもしなきゃ
0517デフォルトの名無しさん2015/11/14(土) 20:21:01.67ID:KefGJNy1
>>515
これはあるあるだな
自前でforループ回さないと死ぬ病気なんだと思ってる
0518デフォルトの名無しさん2015/11/14(土) 20:38:30.93ID:7qU/f9+6
そういう奴に限って「ライブラリは信用できない」とか言う
0519デフォルトの名無しさん2015/11/14(土) 20:40:29.09ID:kiB3B4ET
>>517
ごめんよ
イテレータってよくわからんから使いたくないねん(´・ω・`)
0520デフォルトの名無しさん2015/11/14(土) 20:49:29.91ID:lT+7Yk9s
そんな奴ほど自分のコードのこだわり強いんだよな…
0521デフォルトの名無しさん2015/11/14(土) 20:51:06.70ID:KefGJNy1
>>519
会社で言われたら戦慄する
0522デフォルトの名無しさん2015/11/14(土) 20:56:08.58ID:T7cDyZTE
>>519
ちょ
0523デフォルトの名無しさん2015/11/14(土) 21:20:44.80ID:9QHlt6TY
まぁ外部イテレータに関しては無理に使う必要性を感じないのも事実
添え字でアクセスできるコンテナに対してはそれで指してやりたい
0524デフォルトの名無しさん2015/11/14(土) 21:23:41.49ID:kiB3B4ET
逆にイテレータを使うメリットってなんやろ
移植性?コンテナ変えたい場合にサクッと変えられるとか?
0525デフォルトの名無しさん2015/11/14(土) 21:32:08.36ID:P7eSj/oG
>>524
ある場合ではイテレータと言う名前を用いること自体が嬉しい
例えばsetやmapの中身を順番に触って行きたいとき
イテレータという概念でもなきゃメソッド名に困ることになる

それ以外で聞いたことあるのは「順次アクセスさせたいだけなのに
添え字用変数を容易したりケアしたりしたくない」みたいな話
0526.パンティーガァル2015/11/14(土) 23:47:52.47ID:KR6EjTDB
>>524
ない
コンテナを変えなきゃいけない場合ってのは
結局全体の構造を見直さなければならないってことだ
いずれにせよサクッとは変えられない
0527デフォルトの名無しさん2015/11/15(日) 00:56:51.15ID:rMAuDQml
> ハッカーなら覚えていて当然だけど
違うよ
本物のハッカー的気質が強い人にとっては本質を正しく理解することが重要で
表に出ている部分をただ覚えるようなことには意味を見出さない
だから規格の丸暗記といった方向での知識量とかは逆にたいしたことなかったりする
0528デフォルトの名無しさん2015/11/15(日) 01:01:18.56ID:81QugJpf
余談だけどイテレータはコンテナの種類に依らず
一様な方法でコンテナの中身にアクセスする手段じゃん?

たとえばranged-forマップのイテレータから直接取り出せるのはキーと値のペアなんだけど
for(const auto& a : container){
(*it).second
って書かないといけないからstd::pairにoperator Type()みたいな演算子があると嬉しいんだけどヤバいかな
http://ideone.com/eH1XCR
0529デフォルトの名無しさん2015/11/15(日) 01:02:30.06ID:81QugJpf
途中送信スマソ
for(const auto& a : container)
{
cout << a.second << endl;
}
って書くとcontainerの変更に弱いよねって話です
0530デフォルトの名無しさん2015/11/15(日) 01:46:33.53ID:9kIFKVss
お前らgofのiteratorパターン読み直せ
0531デフォルトの名無しさん2015/11/15(日) 02:08:16.81ID:JMNPWmcH
>>528
>(*it).secondって書かないといけない

お前が勝手にそう思いこんでるだけ
どうしてもpairだけ特別扱いしたいなら勝手に変換してろ
http://ideone.com/egCx9V
0532デフォルトの名無しさん2015/11/15(日) 02:42:37.11ID:etzO6ADE
iterator使ってたら
std::map<k,v>からstd::vector<std::pair<k,v>> に変えたところでアクセス方法変わらないよね?
コンテナの変更に弱くなるってどういう事?
0533デフォルトの名無しさん2015/11/15(日) 02:52:02.64ID:81QugJpf
>>531
そりゃ拡張性のためにあらかじめ変換関数を用意するならなんでも行けるよ

queueにもbegin()とか用意してくれたらな,とかたまに思うんだけど
設計思想には反するんだろうな
0534デフォルトの名無しさん2015/11/15(日) 02:54:47.49ID:JMNPWmcH
>>532
解説しよう
「要素Tを取り出すのにa.secondと書くとvectorに変更するときに修正が必要になるので変更に弱い」という意味なのだ
528はオツムが弱いので連想配列とシーケンシャルコンテナーの違いが理解できなかったのだ
0535デフォルトの名無しさん2015/11/15(日) 03:05:58.39ID:etzO6ADE
コンテナの中身変えといて中身の扱い方が変わるから変更に弱いって言ってるってこと?
何言ってるのかわからんのだけど
0536デフォルトの名無しさん2015/11/15(日) 03:16:49.04ID:9kIFKVss
>>535
イテレータの意味わからんやつに説明しても無駄
何を抽象化してるのか理解してないんだからいくら説明しても無駄
0537デフォルトの名無しさん2015/11/15(日) 03:24:17.91ID:81QugJpf
よく考えなくても自分が悪かったよ すまんかった
std::mapじゃなくてstd::set使えばいい話だった
0538uy ◆Qawu9.2l1E 2015/11/15(日) 06:08:04.15ID:BtG1eDoL
(′・ω・`)?w
0539デフォルトの名無しさん2015/11/15(日) 08:51:12.02ID:V8NTA7lA
東方のゲームエンジンって全部ゲームエンジンで作ってるんだろうか
それとも弾幕部分だけ?
あとゲームエンジンって自作言語→c++に変換する物なの?それとも直接実行ファイル?
0540デフォルトの名無しさん2015/11/15(日) 09:01:47.86ID:Us7uvw8P
>>539
弾幕部分はzun自作の"弾幕スクリプト"で書いてるらしい

「東方 弾幕スクリプト」でググれ
0541デフォルトの名無しさん2015/11/15(日) 09:21:54.05ID:V8NTA7lA
>>540
弾幕だけなんですね
ただ、自作言語をどうしているのか書いてなかったので知ってる方いますか?
直接実行ファイルにしてるのか、c++コードに変換してるのか
0542デフォルトの名無しさん2015/11/15(日) 11:25:49.49ID:a/0hbCSJ
>>541
弾幕スクリプトは初めて知ったけど、C++のコードに変換することはありえないよ
なんでゲーム屋がこういうのをスクリプトや外部データにするかって、ハードコードしたら敵の動きを
確認するためだけに毎回ビルドしなきゃならなくなるからだ
多分ステージのロード時とかボス戦前とかにゲームエンジン(C/C++)がパースしてるんじゃないか
0543デフォルトの名無しさん2015/11/15(日) 12:00:25.29ID:V8NTA7lA
毎回ビルドしたら何か問題あるのでしょうか?
ビルドって難しい事じゃないですし
0544デフォルトの名無しさん2015/11/15(日) 12:10:46.73ID:Q5DXGuJU
見てないから推測だが
単にデバッグ効率・ゲームデザイン効率の問題と思われる
ビルドしてたらゲーム立ち上げ直してデバッグしたいシーンまでゲームを進め直さなきゃならなくなる
ランタイムでスクリプトが読み込めればゲーム中デバッグコマンドで設定変えてみることが出来る
0545デフォルトの名無しさん2015/11/15(日) 12:18:17.96ID:ZxsxGSS5
DSLを使う目的はビルド時間だけじゃないからありえんってことはない。
ただまぁ、C++のコードにコンバートするのはかえって面倒くさかったりするんで
普通はバイトコード使うだろうな。

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

これ実現するなら前提としてバイトコード使うことになるけど、ユーザーにスクリプトを
変更させたりするんでなければリリースするバイナリにパーザを含める必要もない。
0546デフォルトの名無しさん2015/11/15(日) 12:20:15.34ID:V8NTA7lA
つまり独自言語テキスト➡独自言語バイナリ➡プログラミングが読み込むって事ですかね
0547デフォルトの名無しさん2015/11/15(日) 12:45:49.31ID:a/0hbCSJ
>>546
多分そうだと思う
まぁ生のテキストかバイトコードかは知らんけど、ゲームバランス調整するために
ちょっと弾幕の出方を変えてみる、っていうごとに「毎回ビルド」っていうのはシャレにならんよ
著しく生産性が下がる
2Dのシューティングとはいえ、インクリメンタルリンクとかプリコンパイルドヘッダの恩恵を入れても
絶対ビルドが数秒で終わるような規模じゃない

特にまずいのは、そういうデータをヘッダに書いてる場合、書き換えたらそのヘッダを
インクルードしてるソース全部コンパイルされるんで
「この弾の出方だとちょっと美しくないなぁ、角度をもう少しずらしてみよう」で数分〜十数分待ち
発狂するだろw
0548デフォルトの名無しさん2015/11/15(日) 12:51:31.67ID:V8NTA7lA
ビルドってそんな掛かるのか
3秒もかからないものだと思ってた
0549デフォルトの名無しさん2015/11/15(日) 12:51:32.34ID:V8NTA7lA
ビルドってそんな掛かるのか
3秒もかからないものだと思ってた
0550デフォルトの名無しさん2015/11/15(日) 12:52:15.98ID:V8NTA7lA
連続送信すまん
0551デフォルトの名無しさん2015/11/15(日) 12:52:16.54ID:V8NTA7lA
連続送信すまん
0552デフォルトの名無しさん2015/11/15(日) 12:57:45.86ID:a/0hbCSJ
ブラウザどうなっとんだw
いやまぁ自分が使ってるマシンがしょぼいせいもあるかもしれんけど、
多分東方シリーズのソースってなると結構な規模じゃないかねぇ(ソース資産多いだろうし)
数万〜十数万行くらいはあるんじゃないか
0553デフォルトの名無しさん2015/11/15(日) 13:18:28.52ID:sKF/cfhp
むしろスクリプトでリアルタイムで弾幕を調整することが目的だろうな
ゲームはバランス調整とかが面白さのカギだからな
0554デフォルトの名無しさん2015/11/15(日) 13:32:37.24ID:V8NTA7lA
あ、またおかしくなってた
リアルタイムで出来るようにしてるのか
ソースコード凄い量だな
俺は長くても2万行しか書かないからそこまで時間掛かるとは思ってなかった
0555デフォルトの名無しさん2015/11/15(日) 13:36:06.34ID:sKF/cfhp
調整用のノブとかレバーとかがあって
それを動かすことで弾幕を調整できるようになってるっぽい
0556デフォルトの名無しさん2015/11/15(日) 13:48:22.71ID:gyJr19GH
> 俺は長くても2万行しか書かない
> 3秒もかからないものだと思ってた
嘘つき ID:V8NTA7lA は死ね
てか嘘つきって何でこんな意味のない嘘をつくんだろう
0557デフォルトの名無しさん2015/11/15(日) 13:51:26.35ID:V8NTA7lA
え。。
dxlibのラッパー合わせたらそのくらいあるけど、3秒かからないよ
0558デフォルトの名無しさん2015/11/15(日) 13:58:34.66ID:4LMfzWCO
弾幕スクリプトとやらが何時から導入されたのか知らんが結構歴史長いし、
今は数秒〜十数秒程度でコンパイル出来るけど昔はもっとかかったんじゃないのか
0559デフォルトの名無しさん2015/11/15(日) 14:10:17.13ID:IT6gF8gc
昔は数百行のプログラムでもコーヒー入れていっぷくできていたが、最近は一瞬だな
make -jなんてしたら数万行でも一瞬
0560デフォルトの名無しさん2015/11/15(日) 14:10:32.11ID:ZxsxGSS5
そもそも、全体のコード量が何十万行あったとしても更新された分しかコンパイルする
必要ないだろうに。まさか自動生成されるヘッダを全部のソースにインクルードするような
アホなつくりをするとも思えんし。
0561デフォルトの名無しさん2015/11/15(日) 14:15:30.09ID:sKF/cfhp
例えば音楽作るのだって聞きながら作るよな
いちいち全部wavにしてから視聴しない
それのゲーム版だと思えばいい
0562デフォルトの名無しさん2015/11/15(日) 15:57:42.64ID:K62AMl2G
そのための分割コンパイルですよ
0563デフォルトの名無しさん2015/11/15(日) 17:26:01.43ID:R15Ww/xo
>>542
ドメイン特化スクリプトの目的は大抵特定ロジックを試行錯誤しながら書く際の効率を高めるため。
ソースコードに変換するか、スクリプトもしくはバイトコードを解釈するランタイムを埋め込むかの違いは速度がクリティカルなら前者、デザイナーみたいな人間を使った分業開発なら後者だけど、そうでないならどちらでも大した差はない。
個人開発ならその時の気分が大きいだろう。
0564.パンティーガァル2015/11/15(日) 18:12:46.07ID:WZ0Q9prU
>>562
左様
さらに言うならそういう用途ならインライン展開しまくり&コンパイル時間掛かりまくりのC++なんか捨てて
最初からCで逝けってこったw
0565uy2015/11/15(日) 19:14:25.53ID:VVKd20XZ
c++で全部書くわけないじゃん

c++がスクリプトと比べて何が劣ってるのか理解すべき
0566デフォルトの名無しさん2015/11/16(月) 01:44:05.54ID:7yHHnP/U
職種別、資格別、スキル別の平均最低月給リスト
http://jobinjapan.jp/cate/
全掲載求人109,160件の平均最低月給195,800円

C++の求人 の平均最低月給216,000円
http://jobinjapan.jp/job-listing/keyword-cpp-pg.html
0567デフォルトの名無しさん2015/11/16(月) 02:01:56.94ID:4p5ov1Aj
安いなー。手取りいくらになるんだ
0568デフォルトの名無しさん2015/11/16(月) 16:30:49.38ID:zms46H5z
日本はC++が分野ごと息絶えてるって聞くけど
ここのコアな住人もプロでやってる人は少ないんじゃないの
0569デフォルトの名無しさん2015/11/16(月) 19:03:02.69ID:nM/1wF+C
確かに少ないかもな
そもそもC++書けるってやつが少ないかも
そのおかげで俺みたいな個人事業主にも発注があって助かります
0570デフォルトの名無しさん2015/11/16(月) 20:42:59.28ID:TvcCpGLD
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個の変数を愚直にループで回すくらいしか思い付かないんだが、これは最悪だよな?
0571デフォルトの名無しさん2015/11/16(月) 21:58:37.56ID:EYXzMg1y
スレ違いだが、そんなレベルなら何も考えずにライブラリ使うのがいいんじゃないか?
0572デフォルトの名無しさん2015/11/16(月) 22:44:51.08ID:TvICL1RJ
>>571
どのライブラリ?
添字の縮約を一度にできるライブラリがあるの?

まぁアルゴリズムスレで聞くべき話題だったと思うので、移動することにします
失礼
0573デフォルトの名無しさん2015/11/16(月) 22:51:10.04ID:skOZM3LY
アルゴリズムスレなんてなくね

どこに移動する気なんだ
0574デフォルトの名無しさん2015/11/16(月) 22:59:27.02ID:+K0mRhMl
データ構造,アルゴリズム,デザインパターン総合スレ 2
http://peace.2ch.net/test/read.cgi/tech/1362301811/
0575デフォルトの名無しさん ぱよぱよちーん©2ch.net2015/11/17(火) 01:34:54.58ID:mTy4uFbL
これはどの程度真に受けていいのでしょうか?
http://monobook.org/wiki/Bjarne_Stroustrup_%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%93%E3%83%A5%E3%83%BC
0576デフォルトの名無しさん2015/11/17(火) 02:00:19.38ID:vhPJDvYj
>>575
日本語が読めれば解ると思うんだけど何が知りたいの?
0577デフォルトの名無しさん2015/11/17(火) 02:00:46.79ID:HbGe248J
こういうバカも実在するんだ
0578デフォルトの名無しさん ぱよぱよちーん©2ch.net2015/11/17(火) 03:38:13.51ID:mTy4uFbL
答えられない人には訊いてないです
0579デフォルトの名無しさん2015/11/17(火) 03:45:22.76ID:hCC9Eug4
真に受けてはダメです
0580デフォルトの名無しさん2015/11/17(火) 03:45:25.60ID:+Z1Wb6Hb
>>570
メモリも時間計算量も抑えたいなら自分で計算すればいいじゃん
どちらにしろインプレイスで処理できないならメモリは必須だろ
0581デフォルトの名無しさん2015/11/17(火) 03:58:20.84ID:Hk9c0pnU
明らかにネタだけど、真に受けていいのかという問いかけには、じゃあ誰の回答も真に受けていいのかという話になるので、あなたが自分で考えて納得する以外に方法はない。

じゃあ君はどう思う?それが唯一君が納得する答えだよ。
0582デフォルトの名無しさん2015/11/17(火) 07:47:43.98ID:vhPJDvYj
ジョーク文書って書いてあるのにどの程度真に受けていいのかとか日本語読めないとしか思えないんだけど?
0583デフォルトの名無しさん2015/11/17(火) 11:03:02.19ID:2Ns9WBgW
つまり
「ジョークと書いてあるので真に受けてはいけない」
と答えれば満足行くわけかね
0584デフォルトの名無しさん2015/11/17(火) 13:08:57.39ID:0utt7BoB
ジョークではあるけど、戒めでも有るから、初心者が読むには良い文章なんだけどな
C++は良い部分だけを上手く活用してなんぼの言語だからね
0585デフォルトの名無しさん2015/11/17(火) 13:24:06.90ID:ZdmPhf6a
もうC++みたいなクソ言語に初心者を巻き込むなよ
ジジイたちのオナニ言語で勝手に俺スゲーしてろ
0586デフォルトの名無しさん2015/11/17(火) 14:36:17.09ID:5fHlJfRB
処理が早いって聞いて学んでるけど正直やめたい
0587デフォルトの名無しさん2015/11/17(火) 14:45:23.69ID:0utt7BoB
他の言語も同様程度には複雑だから、何やっても一緒だぞ
0588デフォルトの名無しさん2015/11/17(火) 14:48:02.58ID:JCt1lq+9
んなこたーない
他言語はもっと単純
C++は「意味のない煩雑さ」が多い言語
0589デフォルトの名無しさん2015/11/17(火) 14:50:50.48ID:Xq9knrfv
さて、そんな皆さんにご用意したのが、この

C

です!
0590デフォルトの名無しさん2015/11/17(火) 15:14:32.69ID:HbGe248J
>>588
例えばどの辺が「意味のない煩雑さ」だと?
その煩雑さとやらが何故そうなったのか、あなたが意味を見出せない、
或いは、意味を見出そうしないだけなんじゃないですかね
0591デフォルトの名無しさん2015/11/17(火) 15:15:46.82ID:/zPinGq0
「自分には理解できない」
が抜けてるだけだろ
0592デフォルトの名無しさん2015/11/17(火) 15:26:20.33ID:1Xdfjtqs
ヤバい面白い。
本人の反論文書(なんたらopen channel)も読んでみたいけど見つからん。
0593デフォルトの名無しさん2015/11/17(火) 15:39:40.06ID:PebPi9W7
ttps://m.srad.jp/~taro-nishino/journal/503243
これかな
0594デフォルトの名無しさん2015/11/17(火) 16:25:51.50ID:1Xdfjtqs
>>593
thx!
0595デフォルトの名無しさん2015/11/17(火) 17:31:40.90ID:5VMzV+9C
>>569
個人事業主でやっていけてるってことはそれなりに高スキルとみた
でもうちみたいなお固い企業だとそういうとこに発注できないんだよなぁ
リスクがどうだの信用照会は通るのかだの・・・
下手なとこに発注するよりよほど良いはずなのに
特にC++バリバリ使うような案件だと
0596デフォルトの名無しさん2015/11/17(火) 19:00:51.79ID:+c9tLHNn
分厚い8000円くらいするC++リファレンス本を購入しそうなターゲット層の住むスレ
0597デフォルトの名無しさん2015/11/17(火) 20:23:22.10ID:uYtrfvr1
>>595
腕の良し悪しよりも安心(ゼニ)が大事なんや
フリーランサーは賠責保険に加入するべきなんや


「ウチの案件を受ける場合はまずコレコレの会社のこの保険に加入してください」
0598uy ◆Qawu9.2l1E 2015/11/17(火) 20:39:26.45ID:ZbjRFgjU
>>590
http://peace.2ch.net/test/read.cgi/tech/1420379468/950-957

↑
0599デフォルトの名無しさん2015/11/17(火) 21:45:04.42ID:5VMzV+9C
>>597
なんだかなって思うわ
まぁ今更な話題だが
0600デフォルトの名無しさん2015/11/18(水) 22:45:50.07ID:oenAzU52
>>596
いいじゃん、なりふり構うために耳ふさいでるバカいないってことなら
0601デフォルトの名無しさん2015/11/19(木) 01:26:10.66ID:6x5+bHoL
リファレンスを書籍化されても、それって単なる更新の止まったC++入門サイトのようなものだから
0602デフォルトの名無しさん2015/11/19(木) 06:18:47.24ID:ApowG8Dl
リファレンスなら
http://en.cppreference.com
か
http://www.cplusplus.com
でいいよな
本は検索もできなくて使い勝手悪いし
0603デフォルトの名無しさん2015/11/19(木) 08:58:46.38ID:JIJtk7D/
ブラッド・コックスとトム・ラブがObjective-Cを作り「この言語はCのメモリ安全性とSmalltalkの高速性を合わせたものだ」と宣言する。
現代の歴史家は2人が失読症ではないかと疑っている。
https://twitter.com/okdshin/status/666903312151613440
0604デフォルトの名無しさん2015/11/19(木) 18:58:37.37ID:cVDALBAT
どうしようもないクソ言語ということですね
0605デフォルトの名無しさん2015/11/19(木) 21:19:35.24ID:Q69wQH7X
俺も他でレスしちゃったけどそれマルチ
内容はジョーク文書だった
0606デフォルトの名無しさん2015/11/19(木) 23:07:11.25ID:dLb/5HwU
リファレンスと言ったら規格
それ以外は参考書
0607デフォルトの名無しさん2015/11/19(木) 23:11:53.81ID:Q69wQH7X
参考書はreference bookだよ
0608uy ◆Qawu9.2l1E 2015/11/20(金) 00:06:42.29ID:QlSu2hgW
C++の多種多様な機能は、別に良いんだけど
2つの使われない理由を挙げてみよう

1、多くのアプリは動的言語の速度で間に合ってしまう
2、C++を使う時は最高速のコードを組みたい時、
  そういう時に、C++の何を使ったらどのくらい遅いか調べるのも面倒なので
  結局C++の機能の殆どを使わないのでは?


静的言語でここまで出来るようになったという観賞用ソースコードの域を出ていない


個人的にはC#、JAVA、C++という選択肢があったらC++選ぶけれど
そもそも静的言語で多くのソースコードを記述する機会がなくなったと思う
現在の静的言語の役割とは、動的言語から使用する為のモジュールを作って終わり
0609デフォルトの名無しさん2015/11/20(金) 00:14:32.19ID:AMmCkZV3
Ruby3.0で静的型が導入されてからまた来てくださいね
0610デフォルトの名無しさん2015/11/20(金) 00:21:51.59ID:ms2dnfiV
>>608
それ重要な役割だろ…
0611デフォルトの名無しさん2015/11/20(金) 01:01:07.26ID:7Mk50+GE
前々から気になっていたんだけれどもプラグイン形式のソフトウェアってどうやって作ればいいの?
どういうふうにプラグイン形式を実装してるかさっぱり想像つかないんだけど
0612デフォルトの名無しさん2015/11/20(金) 01:10:54.60ID:xFdS5SzN
cとluaの連携でも試してみると分かりやすいんでない
大雑把に言えばAPI決めて所定の手続きで拡張の余地を作るだけのことなのだけど
0613デフォルトの名無しさん2015/11/20(金) 01:20:09.43ID:vozKP37P
C++の達人って技術に見合った対価をもらってなさそう

そういや前に2chで聞いた話だけど、SAP開発のエキスパートとかすごいらしいな
自分たちじゃどーにもならないSAPユーザに対しゴルゴ13のごとくさっそうと現れ、
クライアントとほとんど交流せずに一人ホテルに2週間缶詰して華麗に解決し
さっそうと帰っていくという・・・年収数千万オーダーだと
0614デフォルトの名無しさん2015/11/20(金) 01:41:33.88ID:7Mk50+GE
>>612
プラグイン用のディレクトリにぶっこむだけで動くプラグインとかあるじゃん?
あれはプラグイン用のクラスかなんかでディレクトリ読み込んでまとめて呼び出して実行してんの?
0615デフォルトの名無しさん2015/11/20(金) 05:55:25.20ID:mKFSoHrL
>>614
ネイティブコードのプラグインを作りたいならdynamiclinkのlibraryを作って決められたディレクトリに入れる
それらに対して
dlopenで開いてdlsymで関数のアドレス取ってきて実行(WindowsならLoadLibraryとGetProcAddress)

予めinterface(シンボル名とそのinout)を決めておけば読み込んだファイルによって異なる動作をさせることが出来る

例えば画像ファイルプラグインだったら

サポートしている形式の拡張子を返す関数
ファイルのバイナリデータを渡すとRGBA32bitの配列と高さ幅を返す関数

とか有れば対応するプラグインを探し出してデコードする事が出来るよね

あと、そういうの作るときはC言語互換の関数にした方がいい。理由はC++はコンパイラによってシンボル名もクラスのABIも変わるから。
0616デフォルトの名無しさん2015/11/20(金) 06:57:11.86ID:KfJz9Mn6
てか使われていないと言う話がよくわからん。
実際使わないところも多いのだろうが、使うところが極端に少ないというほど使われていない調査結果なんてあったっけ?
個人の主観による偏ったサンプリングの結果でしょ。

コンパイラやブラウザとか一般の目につくところで使われている分、全く目にしないということは少ない言語だと思うのだが。
0617デフォルトの名無しさん2015/11/20(金) 08:09:59.46ID:DKlXZRvY
webとかwindowsしか見てないんじゃね
0618デフォルトの名無しさん2015/11/20(金) 08:26:48.90ID:BmwCPVtJ
> 使われていない

俺の回りでは (キリッ

ってことでしょ
0619デフォルトの名無しさん2015/11/20(金) 10:27:28.40ID:FnrKl1QX
一回LFSをやればc/c++がいかに使われているかが分かると思うんだがなぁ。
LFS内でc/c++以外で使われてる言語っつったらautoconf/automakeにmake、m4、perl、sed、awk、grep、flex/bison、
それにTclなんかが少しずつ使われてるくらいか。

とやや的外れな突っ込みをしてみる
0620デフォルトの名無しさん2015/11/20(金) 13:20:49.61ID:7Mk50+GE
>>615
詳しくありがとう
0621デフォルトの名無しさん2015/11/20(金) 14:15:16.83ID:SnNAjHh0
new Hoge[12](arg1, arg2);
みたいな書き方はg++とかclangとかでもエラーになるけど昔の何かの環境では
問題なくコンパイルできてた記憶がある
この辺の経緯を知ってる人がいたら教えてください
それと同じような事をしたかったらどうすればいいかも教えてくれると助かります
0622デフォルトの名無しさん2015/11/20(金) 16:57:03.25ID:AMmCkZV3
しらないけど
new hoge[12]{ a1, a2 };
とか
new hoge[12] = { a1, a2 };
とかは試してみた?
俺は試してないから
動くかどうか知らんが
0623デフォルトの名無しさん2015/11/20(金) 17:56:26.14ID:eapfkFrg
>>621
std::vector使え
要素数reserveして一つずつemplace_back
0624デフォルトの名無しさん2015/11/20(金) 18:01:07.80ID:eapfkFrg
Hogeがコピー出来て全部同じ値初期化でいいなら
v.resize(12,Hoge(arg1,arg2));
でもいい
06256212015/11/20(金) 19:42:52.26ID:SnNAjHh0
みなさん返答ありがとう!
>>622
コンパイルエラーだった…
>>623
こんなのが追加されてたんだ
若干ソースは冗長になるけど結局やってる事は同じになるんだな
>>624
コンストラクタが1回しか呼ばれなかった
06266212015/11/20(金) 19:45:18.88ID:SnNAjHh0
>>623
ちなみにvector使わずに同じ事って出来るの?
0627デフォルトの名無しさん2015/11/20(金) 20:25:42.57ID:eapfkFrg
>>626
mallocとplcement new使えば出来るけどお勧めしない
06286212015/11/20(金) 20:49:53.12ID:SnNAjHh0
>>627
とりあえずソースというかヘッダーを見てみたけどc++11の機能を使えば
できるっぽい感じがした (あいかわらず難解だな…)
後は自分でもう少し調べてみるよ
0629デフォルトの名無しさん2015/11/20(金) 20:55:59.43ID:eapfkFrg
>>628
03で出来るよ。11でそれをやりやすくなった機能は特にない。

素直にvector使っときな。
0630デフォルトの名無しさん2015/11/20(金) 21:16:17.90ID:FYcH3zZp
>>629
いいからコテ付けろよ
0631デフォルトの名無しさん2015/11/20(金) 22:13:46.34ID:eapfkFrg
>>630
なんで?
0632デフォルトの名無しさん2015/11/21(土) 00:41:01.91ID:rACYfPqD
>>621
new Hoge[12](arg1, arg2);
これはどんなことを期待しているんだ?

Hoge(arg1, arg2)で配列全てを初期化
配列をHoge(arg1),Hoge(arg2),以下はHoge()にする
0633超音波テロの被害者2015/11/21(土) 02:58:33.14ID:OmX67Z3Y
超音波テロの被害にあっています。
卑劣極まりない被害にあっています。

何が起こったかわからないときから、
わかってみれば、
まだ世の中に知られていない超音波テロ。
0634超音波テロの被害者2015/11/21(土) 02:59:01.72ID:OmX67Z3Y
世の中のどれだけの音の振動源・発信源が
使用されているのかわからないが、
多数の振動源・発信源がシステム化され、
ネットワークを通して、
超音波・音波を集中させて
対象を攻撃するらしい。
0635超音波テロの被害者2015/11/21(土) 02:59:37.09ID:OmX67Z3Y
人や社会が襲われ、罪もない人が超音波で襲われ、
卑劣な被害にあっています。
聞こえる声、音。超音波テロの加害者の声。

「もらいました」という声とともに、
形のあるもの、ないもの、奪っていき、壊していく
超音波テロの加害者の声。
聞こえる声、音。超音波テロの加害者の声。
0636超音波テロの被害者2015/11/21(土) 03:00:13.10ID:OmX67Z3Y
超音波による物理的な力で、
ものが飛び、ものが壊れる。
それが人間の体に対してまで。

身体の表面を突き抜け、内臓を攻撃される。
頭蓋骨を突き抜け、意識を失わされる。
聞こえる声、認識できない声で、精神的なダメージ。
人間の体を壊そうとする超音波テロ。
0637超音波テロの被害者2015/11/21(土) 03:00:46.41ID:OmX67Z3Y
日本国中、どこにいても超音波で襲われる。
車に乗っている人間が襲われる。
歩いている人間が襲われる。
自宅で超音波の攻撃を受ける。

被害を訴えても信じてもらえない。
罪もない人間が超音波で襲われる。
0638超音波テロの被害者2015/11/21(土) 03:01:53.54ID:OmX67Z3Y
「見続けるのがいやだから、殺して終わる」、
「証拠隠滅だ」という超音波テロの加害者の声とともに
強烈な超音波の攻撃。
叫ばされ、いたぶられ、
超音波テロの卑劣な被害にあっています。
心の底から被害を訴え、祈っています。

天に神に届きますように。
0639デフォルトの名無しさん2015/11/21(土) 06:28:37.30ID:GdR6w5S8
>>632
バカの特長はイメージだけで会話していて、
詳細を確認してみると答えられず
ただ会話できた気になっていただけのことが多い。
つまり何も考えていない
0640デフォルトの名無しさん2015/11/21(土) 06:57:16.09ID:rG1U6ao0
学会における俺が丁度そんな感じだ
0641デフォルトの名無しさん2015/11/21(土) 07:01:17.98ID:z75NBL1W
女の会話は100%その類
0642デフォルトの名無しさん2015/11/21(土) 07:49:23.72ID:WnHcVy1K
超音波が身体の表面を突き抜けるのは当たり前。
だがネットワークのケーブルは音波の振動を伝達するのに向いていないから
音の伝送媒体として使うことは現実的に難しいだろう
0643デフォルトの名無しさん2015/11/21(土) 12:28:51.78ID:UH5fCNhv
struct A{
template <class T> operator T&();
operator std::string();
};
こういうクラスがあったとき、
MSVCだと
std::string str=A();
でtemplateの方が呼ばれるの何でなん?
stringの場合参照返したくないんだけど回避方法ある?
0644デフォルトの名無しさん2015/11/21(土) 12:34:10.95ID:+qmJr5EI
画面の中の俺の彼女は計算しつくされた会話をしてくれるぜ
0645デフォルトの名無しさん2015/11/21(土) 12:37:44.25ID:JXjswKeV
>>643
戻りの型ではオーバーロードできないよ。
コンパイルエラーにならないのに驚き。
0646デフォルトの名無しさん2015/11/21(土) 12:47:20.28ID:UH5fCNhv
>>645
キャスト演算子な
0647デフォルトの名無しさん2015/11/21(土) 13:00:31.13ID:sVK4zYvW
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
最初にnを入力してもらい
n文字を一文字ずつ入力させ
それを並べ替えてできる順列を全て列挙しろ
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc 4.8.1
 [3.3] 言語:どちらでも
[4] 期限: 無期限
[5] その他の制限:特になし

自分で作ったところ7文字の順列には1秒かかるかどうかなのですが10文字にすると15秒くらいかかります。
確かに階乗は爆発的に大きくなりますが、仕方ないのでしょうか
0648デフォルトの名無しさん2015/11/21(土) 13:19:39.66ID:2FFj0oRp
必要なだけメモリを確保しておいてそこに文字列を展開して
printf("%s", buffer);
したり
write(STDIN_FILENO, buffer, length);
したりしたら少しは速くなるんじゃない?
あるいはファイルに書き出してみたらどうなる?
windows上でgcc動かしたこと無いから実際どうなるかは知らんけど、
7文字の順列(重複が無ければ約5000通り)の列挙に1秒はどう考えても掛かり過ぎてる。
0649デフォルトの名無しさん2015/11/21(土) 14:27:55.67ID:+qmJr5EI
>>647
コード貼ったら?
0650uy ◆Qawu9.2l1E 2015/11/21(土) 15:42:51.71ID:uVehkYL0
>>633-638
専門家によると、3時間しか寝ていない人は、4時間しか寝ていない人に比べ、睡眠時間が1時間少ないという研究結果が出ています。
0651デフォルトの名無しさん2015/11/21(土) 15:57:00.75ID:wPUZshUi
たまには面白いことでも言ってみろよ
06526472015/11/21(土) 16:04:52.60ID:sVK4zYvW
>>649
すみません、ちゃんとctimeを利用して測ったところ
n=7 0.0124s
n=8 0.1012s
n=9 0.952s
n=10 9.856s
でした

>>650
https://ideone.com/fFeukM
0653デフォルトの名無しさん2015/11/21(土) 16:09:06.21ID:wPUZshUi
ちゃんと計算量に比例してるじゃないか
0654デフォルトの名無しさん2015/11/21(土) 16:11:57.73ID:GdR6w5S8
車輪を再発明すんな
std::permutation使え
0655デフォルトの名無しさん2015/11/21(土) 16:18:10.69ID:sVK4zYvW
>>654
そんな便利なものがあったのですか、、、
algorithmの存在は知っていたのですが、データ構造を覚えてる段階だったのでまだ触れていませんでした、、、
0656デフォルトの名無しさん2015/11/21(土) 16:53:35.71ID:2FFj0oRp
>>655
39行目と42行目のcoutへの出力を削ったらどのくらいの時間になる?
どうも単にcoutが重いだけに見えるんだけど。

手元の環境で試したら(非Windowsだけど)、
そのまま, n=7 ==> Time : 0.009858
2つcoutを削った物, n=7 ==> Time : 0.000465
と20倍近く速くなったけど。
0657デフォルトの名無しさん2015/11/21(土) 17:32:42.75ID:sVK4zYvW
>>656
何かしらの出力をしたいのです
実機では
cout と fout で foutの方が早かったので、そちらを使っています。
0658デフォルトの名無しさん2015/11/21(土) 17:57:03.03ID:2FFj0oRp
>>657
>>648読んだ?
一度に出力すりゃいいじゃんって言ったんだけど。

https://ideone.com/2dfghh
0659デフォルトの名無しさん2015/11/21(土) 22:37:41.73ID:LN6XBRmt
redirectしたら速いんじゃね。
consoleの速度に影響されているだけだろう。
0660uy ◆Qawu9.2l1E 2015/11/22(日) 01:44:24.74ID:+n9aAbt6
>>652
https://ideone.com/wDp0Du
06616212015/11/22(日) 04:38:14.98ID:X/fYYmto
>>639
なんか間接的に俺が馬鹿にされてるみたいだから>>632に答えるけど
>>623で同じ結果になると>>625で既に返答済み
>>632の人はこれで理解できた?もっと分かりやすく言った方がいいか?
0662デフォルトの名無しさん2015/11/22(日) 07:13:37.54ID:XdXJy7qN
まさに
>会話できた気になっていただけ
0663デフォルトの名無しさん2015/11/22(日) 07:54:06.34ID:+Vn4cJWj
会話の相手はエスパー....周りはすごい奴だらけなんだろうな
0664デフォルトの名無しさん2015/11/22(日) 08:06:30.80ID:XdXJy7qN
オブジェクトを少なくとも12個生成したのに
コンストラクターが1回しか呼ばれない異能のコンパイラーのようだ
0665デフォルトの名無しさん2015/11/22(日) 08:53:35.95ID:ZD+TX9lw
trivialなコンストラクタが呼ばれてるのに気付かず騒ぐアフォとかか?
0666デフォルトの名無しさん2015/11/22(日) 11:04:36.72ID:/1Ux32Jq
↑trivialの意味も知らずに使ってみたかった大学生
06676212015/11/22(日) 14:43:58.95ID:22+yRhdX
久々にこのスレ来たとか会話とか連呼するアホばっかになってんだな…
0668uy ◆Qawu9.2l1E 2015/11/22(日) 14:49:46.81ID:hFpqZnLD
学生9割のスレで何言ってるん
0669デフォルトの名無しさん2015/11/22(日) 16:35:51.18ID:vYPMz+tE
ほんとバカばっかでまともな奴見たことがないよね
0670デフォルトの名無しさん2015/11/22(日) 22:21:43.51ID:bqva/aW3
************** JIT デバッグ **************
Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、
またはコンピューター (machine.config) の構成ファイルの jitDebugging
値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを有効にしてコンパイルされなければ
なりません。

というのが出てきてアプリが起動できません。
解決法教えてください
0671デフォルトの名無しさん2015/11/22(日) 22:31:34.54ID:ZTXK4DbK
_scprintfのC++標準版はどの関数ですか
0672デフォルトの名無しさん2015/11/22(日) 22:39:51.97ID:DXehIZQK
snprintfじゃねーの?

http://stackoverflow.com/questions/16351523/vscwprintf-on-mac-os-x-linux
みたいにvsnprintfにva_startして投げてもいいけど。
0673デフォルトの名無しさん2015/11/22(日) 22:42:20.20ID:Y+QuE8W5
>>670
その起動しないソフトのスレかサポートにでも聞いてくれ
0674デフォルトの名無しさん2015/11/23(月) 02:15:24.62ID:X7nA4OxA
クラス内関数の引数で配列受け取ったらsizeof(配列)/sizeof(配列[0])しても長さが2しかないンゴ
20バイトあるはずンゴおかしいンゴ
0675デフォルトの名無しさん2015/11/23(月) 02:22:04.94ID:kEUHEwN+
>>674
vector使え
0676デフォルトの名無しさん2015/11/23(月) 02:23:05.17ID:b98i53Mh
>>674
関数の引数に配列は渡せないよ
渡せるのはポインタ
0677デフォルトの名無しさん2015/11/23(月) 05:41:04.46ID:sX9R0Aqt
C++11以降はinsertとpush_backの代わりにemplaceとemplace_backを使えという話を聞きます
無駄なオブジェクトのコピーと破棄がないからというのが理由らしいですが、そもそも
insertとpush_backをそのようにすればよかったんじゃないでしょうか?
わざわざ新しい関数を作ったということは、何かそうする意味があったということでしょうか?
0678デフォルトの名無しさん2015/11/23(月) 10:14:47.25ID:KuAQlUq5
>>672
これのワイド文字列版はどれですか
0679デフォルトの名無しさん2015/11/23(月) 10:19:28.05ID:OK+rBFmG
>>676
言語の欠陥だよな。配列のポインタを渡すのと、配列を渡すのが同じ動作になるなんて。
0680デフォルトの名無しさん2015/11/23(月) 11:11:28.26ID:sPPVeBSO
>>679
??

配列は先頭とサイズのセットで特定されるんだから、必ずその2つを渡す必要がある
生配列だろうが、vectorだろうが同じこと
それが明示的に見えるかどうかの違いしかない
0681デフォルトの名無しさん2015/11/23(月) 11:43:54.74ID:hCdJkAL3
少なくとも関数の引数の配列宣言がポインターになるのは糞としか言いようがない
0682デフォルトの名無しさん2015/11/23(月) 11:51:50.68ID:X7nA4OxA
ありがとナス!
後学のためになぜクラス内関数に配列のポインタを渡しても配列の正確なサイズが測れないか教えてほしいンゴ
0683デフォルトの名無しさん2015/11/23(月) 11:59:26.75ID:HCtl1Hii
void f(先頭要素へのポインター)
{
}

どうやって測るつもりだお前は
測りたければC使え
0684デフォルトの名無しさん2015/11/23(月) 11:59:52.19ID:nxfGVCVi
クラス内関数にかぎらず関数の話だと思うけど
sizeofの不思議な仕様だよな、配列のサイズが測れるのが
0685デフォルトの名無しさん2015/11/23(月) 12:04:25.19ID:5/8mbdQh
sizeofは関数じゃないので
0686デフォルトの名無しさん2015/11/23(月) 12:09:36.01ID:Fj1Djrod
>>682
ポインタ変数も配列もデータとしては同じ
つまり"あるオブジェクトのアドレス"としての情報量しかない
配列ではその"あるオブジェクト"が配列の先頭オブジェクトであるというだけ
配列として確保した場所では、確保したサイズが静的にわかるから
sizeof()で配列全体のサイズを取れるが
一度関数に先頭アドレスが引数として渡されたら、渡された側では
"あるオブジェクトのアドレス"という情報量しかないから
"その先に何個オブジェクトが並んでいるか"なんて知りようがない
知るためには、
- その引数に渡す配列の大きさを静的に決めておく
- サイズも一緒に渡す
- 終端データを決めておく
といったことが必要
0687デフォルトの名無しさん2015/11/23(月) 12:19:44.80ID:+Ddm9172
でも、配列の名前を参照すると右辺値ポインタ的な何かになるって仕様のおかげで
mallocなんかで確保したポインタを配列のように扱えるってのが自然に行えるので
まーまー良く考えられていると思うよ
アセンブリの感覚に近い
0688デフォルトの名無しさん2015/11/23(月) 12:21:28.56ID:X7nA4OxA
ありがとナス!
引数に配列長も渡して解決したンゴ。
テンプレートはまだ触らないんンゴ。黒魔術って聞いたことあるンゴ
0689デフォルトの名無しさん2015/11/23(月) 12:27:06.06ID:X7nA4OxA
vectorがテンプレートだと勘違いしたンゴ
忘れてクレメンス
0690デフォルトの名無しさん2015/11/23(月) 13:29:00.02ID:rbzy+nqq
配列への参照を渡すことはでき、その場合は長さ(要素数)もわかるよ。
0691デフォルトの名無しさん2015/11/23(月) 13:34:48.41ID:kEUHEwN+
>>683
C…?
0692デフォルトの名無しさん2015/11/23(月) 13:40:38.54ID:NLqUjyrO
そもそも配列は普通に関数の引数として渡せるだろう。
0693デフォルトの名無しさん2015/11/23(月) 15:03:32.38ID:1SvbKstr
>>677
C++11より前は可変長引数テンプレートが使えなかったのでemplace系は出来なかった
0694デフォルトの名無しさん2015/11/23(月) 15:14:57.57ID:BLfdTv5g
そこら辺りはコンパイラが最適してたな
アンパサンド参照渡しで問題ないし
暗黙の型変換起こるのはプログラム書いているやつがヘタクソってだけのことだし
0695デフォルトの名無しさん2015/11/23(月) 17:58:02.11ID:UY1pSnQK
>>683
void f(const char* s)
{
 size_t len = strlen(s);
 printf("%Iu\n", len);    // "%Iu"はVC固有
}

あるいは先頭が文字数の文字列(確かPascalのやつとか、BSTR型)だとか…

とか逝ってみるテスト
0696デフォルトの名無しさん2015/11/23(月) 18:03:59.62ID:5aEjJ0S2
Visual C++なら%zuだろ
0697デフォルトの名無しさん2015/11/23(月) 19:26:36.28ID:UY1pSnQK
>>696
いやそれが!
ttps://msdn.microsoft.com/library/tcxf1dw6.aspx
> I、I32、および I64 の長さの修飾子のプレフィックスは Microsoft 拡張機能であり、ANSI 互換姓がありません。
>hh、j、z、および t の長さのプレフィックスはサポートされていません。
0698デフォルトの名無しさん2015/11/23(月) 20:02:04.55ID:adyi0o7H
>>688
ンゴンゴ言ってんじゃねーよ。

>>690と>>692のいう通りだ。
テンプレートを使え。
0699デフォルトの名無しさん2015/11/23(月) 20:28:50.58ID:9bEmVQ8p
>>697
そっち(vcruntime140.dll)じゃなくてUniversal CRTの方は直ってるはず
普通にprintf("%zu", sizeof(double))してみ
0700デフォルトの名無しさん2015/11/24(火) 05:12:52.37ID:R3jHI5aT
>>699
レス�dクス、貴重な情報あり〜
とはいえ
>Universal CRT
    | (インストールマンドクセ…           
    |  ('A`)    
   / ̄ノ( ヘヘ ̄ ̄

ウインドーズアップデートで勝手に入るらしいのを待つ、
0701デフォルトの名無しさん2015/11/24(火) 10:59:13.49ID:PNMHyUFz
Fortranは配列渡すとサイズも分かるから便利ではあったな
Cは言語やランタイムが暗黙の処理をするのを極力排除する方針だから
今の仕様になってんだろうね
0702デフォルトの名無しさん2015/11/24(火) 12:18:15.20ID:1SleeXaD
低レベルの処理は配列サイズは固定の場合が多いし、OS書くためのアセンブラの代替が目的だから。
0703デフォルトの名無しさん2015/11/24(火) 13:00:44.07ID:PNMHyUFz
配列がFortranと同じ仕様だったとしてもOSは書けるでしょ
0704デフォルトの名無しさん2015/11/24(火) 13:07:11.79ID:1SleeXaD
省けるサイズ渡しの処理コストを最下層のOSに負担させるの?
昔のCPUの非力さ考えたら、やっぱり当時の判断としてないね。
0705デフォルトの名無しさん2015/11/24(火) 13:14:51.19ID:2IyJeQ15
何言ってるんだ?Cには値渡ししかないんだから、今の仕様は当然だろ
0706デフォルトの名無しさん2015/11/24(火) 14:13:11.85ID:VjysyORC
揚げ足を取るようだが、ポインタ渡しを値渡しのポインタ版でしかないというなら、
参照もポインタもなんでもかんでも、値渡しになってしまうやで
0707デフォルトの名無しさん2015/11/24(火) 14:15:42.81ID:qZ9OT4oo
お前らFortranの仕様を知らんのか?
配列は単にポインタ+サイズが渡されるだけだぞ
(自前でサイズの変数を用意したりする手間が省けるってだけだ)
丸ごと配列が渡されると勘違いしてないか?
0708デフォルトの名無しさん2015/11/24(火) 14:20:35.37ID:SGPcTC2U
だからもう生配列なんか使わずにstd::vectorかstd::arrayを使えと
0709デフォルトの名無しさん2015/11/24(火) 14:30:26.02ID:qZ9OT4oo
あとFortranはコンソール出力も言語仕様に含まれてたから、Cだとprintfが
実行時にフォーマット文字列を解釈するところをコンパイル時に解釈して
多分最適なバイナリを出力してた (変数の不一致もコンパイル時に分かる)
だから昔の非力なPCでもコンソール出力が爆速だった
大量の数値を出力する時はその差が馬鹿にならなかった
今はどうでもいい話だが
0710デフォルトの名無しさん2015/11/24(火) 15:20:54.87ID:VjysyORC
>>708
vectorだろうと配列だろうと同じこと
結局先頭の場所とサイズを渡してる
0711デフォルトの名無しさん2015/11/24(火) 15:28:16.37ID:SGPcTC2U
>>710
だから生配列を使う場合はサイズを自前で渡す必要あるでしょ
テンプレート使えばその手間を軽減できるとしても
多次元配列になると面倒なことになる
その点vectorやarrayなら標準的なサイズ取得手段が用意されているということ
0712デフォルトの名無しさん2015/11/24(火) 19:02:02.62ID:DVbUiEch
>>709
コンソール出力でプログラムがボトルネックになる環境なんて聞いたことない
そもそも昔の FORTRAN の話であれば出力はラインプリンタか IBM ゴルフボールタイプライターなのでいかに非力なマイコンですら追いつかないとかあり得んし
0713デフォルトの名無しさん2015/11/24(火) 19:41:21.83ID:C+mqbgnu
ラインプリンタはかなり速いよ?
昔ほど相対的に印字の方が速かったわけだよ
0714デフォルトの名無しさん2015/11/24(火) 20:03:56.87ID:qZ9OT4oo
>>712
286か386とかの頃だぞ
聞いた事ないってそりゃ聞いた事ないだけだろ
インターネットも普及してない頃だし
0715デフォルトの名無しさん2015/11/24(火) 20:07:21.11ID:qZ9OT4oo
>>712
あとボトルネックになるなんて一言も書いてないのに曲解にもほどがある
大量の数値を出力する時に気になるぐらい差がつくって言えば分かるの?
0716デフォルトの名無しさん2015/11/24(火) 20:39:03.96ID:SWzWjpEY
>>713
汎用機に繋がる高速ラインプリンタでも 1,500行/分程度
1,500行/分×132文字/行 = 198,000文字/分 = 3,300文字/秒
1文字1バイトとして、約300μs に1文字なので初期の 8bit マイコンだと DMA がないとちょい苦しいぐらい
まあ、数千万クラスのラインプリンタにマイコン繋ぐ奴がいるとは思えないが
0717デフォルトの名無しさん2015/11/24(火) 20:42:59.31ID:OSTSPIeY
>>377
Cは知らんがC++ではハーブサッターが提案してるようだぞ
P0144
0718デフォルトの名無しさん2015/11/24(火) 20:43:59.67ID:SWzWjpEY
>>714-715
286/386 の時代なら printf のフォーマット文字の解釈なんてたいしてかからん
数値から文字列への変換は FORTRAN でも必要だから、違いがあるとしたら各々の出カルーチンのできとかの問題だろ
0719デフォルトの名無しさん2015/11/24(火) 20:46:40.26ID:C+mqbgnu
>>716
1MIPSのマシンで数十のタスクを動かしてると全然間に合わないんだよ
0720デフォルトの名無しさん2015/11/24(火) 20:57:46.96ID:qZ9OT4oo
>>718
とりあえず想像で言うのはいいよ
絶対的な時間を言ってんじゃないよ?フォーマット文字列の解釈と可変長引き数
の処理が必要ないFortranの方が圧倒的に速いに決まってんじゃん
0721デフォルトの名無しさん2015/11/24(火) 21:02:04.27ID:NlhBd7gP
>>720
Qにマジレス、かっこ悪いぞ
コイツはキチガイなので議論するだけ時間の無駄
0722デフォルトの名無しさん2015/11/24(火) 21:22:21.09ID:gTfZY7AW
>>711
テンプレートだとしてもサイズは渡す必要がある
C++での列の抽象化と、実装でどこまでカプセル化するかを区別して話しましょうと言いたかっただけ

俺だって生配列なんか使わずにstd::vector使えよというのは完全に同意だよ
0723デフォルトの名無しさん2015/11/24(火) 21:28:45.00ID:RjS/u5NO
>>722
サイズは渡さなくても受け取った側でわかるでしょ。

それはともかくスコープの短いその場限りの固定長配列なら生配列を使うことはあるな。
0724デフォルトの名無しさん2015/11/24(火) 22:02:30.51ID:SWzWjpEY
>>719
> 数十のタスクを動かしてると全然間に合わないんだよ

そんな後出し条件出されても困る
0725デフォルトの名無しさん2015/11/24(火) 22:05:35.75ID:C+mqbgnu
常識だよ
誰が8bitマイコンにラインプリンタつないでFORTRANで出力するんだっての
0726デフォルトの名無しさん2015/11/24(火) 22:10:51.57ID:SWzWjpEY
>>720
想像じゃないと言うなら、比較したCと FORTRAN の処理系の名前をどうぞ

> フォーマット文字列の解釈と可変長引き数の処理が必要ないFortranの方が圧倒的に速いに決まってんじゃん

普通の頭持ってたらコンソールへの I/O の処理の方が圧倒的に重いことはわかるはず
VRAM に直接出力できるならその限りではないけどそんな処理系見たことないし、そもそもそれって言語仕様の話じゃないしな
0727デフォルトの名無しさん2015/11/24(火) 22:14:03.09ID:C+mqbgnu
頓珍漢もいいとこだな
0728デフォルトの名無しさん2015/11/24(火) 22:19:57.94ID:SWzWjpEY
>>725
何の常識か知らんけど、普通に汎用機に繋ぐ話なら数十ぐらいのタスクでラインプリンタに間に合わないとかあり得ない
汎用機は I/O プロセッサ持ってるし
計算センターとかだとラインプリンタより10倍速いページプリンタですら、システムに8台とか繋いでるのは普通にある
プリンタは用紙搬送と言う物理的動作を伴うからこれ以上の性能向上は難しい
0729デフォルトの名無しさん2015/11/24(火) 22:21:34.92ID:SWzWjpEY
>>727
頓珍漢としかレスできずに悔しいです
って言うのはわかった w
0730デフォルトの名無しさん2015/11/24(火) 22:22:56.59ID:C+mqbgnu
まぁ昔話だからな
いつの間に今の話になってるんだか知らんが
0731デフォルトの名無しさん2015/11/24(火) 22:32:53.29ID:YrcuLR5W
>>730はキチガイコテハンQより知能が低いなんて
もう生きているのも恥ずかしい
0732デフォルトの名無しさん2015/11/24(火) 23:02:23.40ID:SWzWjpEY
どれくらい昔の話をしたいのか知らんが、286/386 辺りの前から汎用機にしろPCにしろ、ラインプリンタに追いつかないシステムなんて見たことないなぁ
過負荷試験とかの特殊な状態とかならわかるが、通常状態でプリンタごときにデータ供給しきれないなんてシステムの設計ミスにしか見えんし
ちなみにページプリンタの話すら 15年前の話だぞ
今の話ってどこから出てきたんだ?
0733デフォルトの名無しさん2015/11/24(火) 23:58:07.41ID:gTfZY7AW
>>723
受け取った側でわかるのは渡してるから
生配列はサイズがコンパイル時に決まるから、テンプレートで処理すると渡さなくても分かるように見えるだけ
0734デフォルトの名無しさん2015/11/25(水) 00:15:50.74ID:Vd1+RMMI
今のページプリンタって、内容的にはシリアルドットプリンタだよな

カン!!って一発の打撃で一行打つのがラインプリンタなら
同様にボッ!!っと一発のキセノンで1ページ打つのがページプリンタだが
たいていのやつはそうなってない
0735デフォルトの名無しさん2015/11/25(水) 00:25:12.77ID:YTudM7kD
>>733
それは屁理屈だ。
0736デフォルトの名無しさん2015/11/25(水) 01:10:12.26ID:Vd1+RMMI
いや情報が与えられるタイミングが翻訳時か実行時かは切実な問題で
屁理屈で片付けめでたしにはならないよ
0737デフォルトの名無しさん2015/11/25(水) 01:18:35.68ID:djITcnYk
どうでもいいけど今時のコンパイラならprintfに渡したフォーマット文字がリテラルなら静的に解析して最適化するよ
例えばclangとかだと型間違えるとコンパイル時にフォーマット文字と型ちげえよって警告出るよね
0738デフォルトの名無しさん2015/11/25(水) 01:26:29.48ID:T3SJIv30
引数にポインタを与えて、その関数内でポインタをdeleteする場合
func(void*p) とfunc(void**p) どっちが良いのでしょうか?
0739デフォルトの名無しさん2015/11/25(水) 01:35:43.20ID:djITcnYk
>>738
そんな関数を作るなが正しいunique_ptrかshared_ptr使え
0740デフォルトの名無しさん2015/11/25(水) 01:41:00.59ID:wwtRzQvg
ニッポンの平均最低月給と人口の都道府県別、市町村別ランキング
求人情報113,957件の平均最低月給196,400円 ♬

あなたの住む街は第何位?平均最低月給はいくら?
http://jobinjapan.jp/area/
0741デフォルトの名無しさん2015/11/25(水) 04:14:25.73ID:bcxVqDWn
このスレでFortranが熱く語られるとはw
大学とか研究室とかだといまだに残ってるんだよねFortran
でも初めてプログラムを学ぶ学生にとっては可哀想
0742デフォルトの名無しさん2015/11/25(水) 04:21:27.10ID:eZQMgmgd
>>560
そのアホな作りをメンテ中
0743デフォルトの名無しさん2015/11/25(水) 04:32:32.11ID:eZQMgmgd
ほとんどの現場で「同じコードを二度書くな」とか「短いコードが読みやすい」という常識が無い
0744デフォルトの名無しさん2015/11/25(水) 06:57:53.15ID:2XtuZnsc
>>741
知ったか爺が暴れてただけでしょ
0745デフォルトの名無しさん2015/11/25(水) 07:10:59.80ID:rt0m4xM1
>>743
意味も理解せず機械的に形を真似る低能の典型的な信仰の一つですね
0746デフォルトの名無しさん2015/11/25(水) 07:11:56.20ID:YbqZzFFd
>>713
メインフレームにもページプリンタ繋がってるぞ。
あの繋がったプリンタ用紙がバサバサ出て来る。
0747デフォルトの名無しさん2015/11/25(水) 08:18:30.69ID:SibVDZBg
>>741
まさか21世紀なのにFORTRAN77をやらされるなんて思わないよな
0748デフォルトの名無しさん2015/11/25(水) 08:23:09.32ID:YbqZzFFd
>>747
再帰スレにはFORTRAN77を信奉して、再帰絶対に禁止と、布教してる爺さんがいる。
0749デフォルトの名無しさん2015/11/25(水) 08:52:28.45ID:A3UqQzxB
>>745
俺もな、現場を見ていると、
「意味なんか考えなくていい。
ぐだぐだ考える前に>>743を実行してくれ」
って思うようになった。
0750デフォルトの名無しさん2015/11/25(水) 09:33:09.03ID:LoKzz2Cb
発展途上国かよ
0751デフォルトの名無しさん2015/11/25(水) 10:10:03.12ID:fCnsK2cL
俺も研究室時代はFortranが全てだった
Fortran2003でコードを書く自分を先進的だと思ったりもしたw

まあ、色々な言語を経験した上でFortranにするならいいんだけど
教員や学生に最低限のプログラミングリテラシーがあったら日本の研究は相当底上げされるんじゃないの?
0752デフォルトの名無しさん2015/11/25(水) 10:36:45.21ID:y0tfJcvP
fortranの話はどうでもいい
0753デフォルトの名無しさん2015/11/25(水) 10:39:15.80ID:s9hTLLjK
ほんと。そもそもfortranを駆逐できなかったのはc++が不完全だったから。
0754デフォルトの名無しさん2015/11/25(水) 11:27:57.90ID:djITcnYk
完全な言語など無いわな
0755デフォルトの名無しさん2015/11/25(水) 11:55:11.62ID:n/g2lh6I
Lisp「ガタッ」
0756デフォルトの名無しさん2015/11/25(水) 12:30:27.72ID:38cA3W2G
class Unko{
public:
int smell;
int amount;
}

Unko* unko = new Unko{ 100 , 1000 };
こうやって初期化できること初めて知ったんだが、
本とかで使ってるの見たこと無いんだけど、使ったことある?
0757デフォルトの名無しさん2015/11/25(水) 12:36:42.45ID:ZxQAt2k5
それは縮小変換を許さない初期化
0758デフォルトの名無しさん2015/11/25(水) 12:36:53.96ID:n/g2lh6I
>>756
あるにはあるけど。

コンストラクタ定義して丸括弧を使うか、
あるいは最低でも
c99拡張なら {.smell=100, .amount=1000}
gnu拡張なら {smell: 100, amount: 1000}
みたいに読みやすくするかな。

最近はnewなんて使わずに全部make_sharedに投げてるし。
0759デフォルトの名無しさん2015/11/25(水) 14:11:09.53ID:UAq2OPe9
>>726
お前は本当に馬鹿だな
絶対的な速度を言ってんじゃないよ?(2度目)
IOが重かろうが差がついたと言ってんだよ
処理系はとっくに忘れたが両方GCCだったはずだ
バージョンは知らん
0760デフォルトの名無しさん2015/11/25(水) 14:15:19.89ID:s9hTLLjK
今も昔もprintf()の実装が糞なのは認める。昔は高速なputs()使えなんてのはよく言われたものだ。
0761デフォルトの名無しさん2015/11/25(水) 15:11:37.21ID:6L0AsNvY
>>760
> 今も昔もprintf()の実装が糞

どの実装がどの実装と比べて
どの点がどういうふうに糞なの?
0762デフォルトの名無しさん2015/11/25(水) 16:38:34.83ID:O+sc6fcj
>>753
君、学生でしょ?
20前後の。
0763デフォルトの名無しさん2015/11/25(水) 16:47:38.57ID:n/g2lh6I
少なくともprintf(vfprintf)のglibc実装は糞だろ。
450行から成る巨大な関数に35個のgoto、入り乱れたマクロ、CHAR_Tとcharがぐちゃぐちゃに混ざり、
-1をポインタ型にキャストして比較!
おまけにインデントまでタブとスペースが混ざってる。

その点putsは良いね。20行に満たない小さな関数でgotoフリー、キャストなんかのきな臭いテクニックも使われておらず
全てのインデントがスペースから成っている。
他に何か言うことある?
0764デフォルトの名無しさん2015/11/25(水) 16:54:37.38ID:Sra0FKsR
http://code.woboq.org/userspace/glibc/stdio-common/vfprintf.c.html
これか
確かに読めといわれても読めんわ
0765デフォルトの名無しさん2015/11/25(水) 17:41:38.10ID:qW/TsJAB
>>763
冗談で言ってるのかどうか計りかねるんだが…
1) 実装と言うわりにソースコード上の表現にしか言及していない
2) 可変長引数でさらにフォーマット文字を扱うものと、そうでないものを比較
3) じゃあどんな素晴らしい実装がほかにありえるのか

そしてそれを批判するお前はどんだけのprintfを実装してみせてくれるのか
0766デフォルトの名無しさん2015/11/25(水) 17:54:57.71ID:7xFqT66+
いやC++のスレッドなんだから、「そこでストリーム出力ですよ。
自作のクラスだってきれいなフォーマットで表示できちゃう」
とprintf()廃止論に持っていくんじゃないかしら。
0767デフォルトの名無しさん2015/11/25(水) 18:13:04.55ID:l+3JfIO+
・仕様に完全に対応し
・バグなく
・メモリも過剰に消費せず
・実行時間も過剰に消費しない
・長く使われて(結果的に)広くテストされている

このレベルまでもなかなか到達できないと思う
その上で、ソースが整理されてるとか
実行時に省メモリだとか高速だとかの話が出来る
0768デフォルトの名無しさん2015/11/25(水) 18:52:05.27ID:n/g2lh6I
>>765
>>760の
> 今も昔もprintf()の実装が糞なのは認める。昔は高速なputs()使えなんてのはよく言われたものだ。
に対する、>>761の
> どの点がどういうふうに糞なの?
に対して冗談交じりの横槍を入れただけなのだけど。
printfとputsをわざわざ比較した理由はそれ。

# 実装しろというなら今度してみるけど、
# printfの現行のISOによる仕様がちょっと複雑なので(8ページにもなる!)
# K&Rのprintfの仕様への対応で勘弁して欲しいね。

>>767
正論だけど
あの8ページくらいになるprintfの仕様書の該当箇所と、400行ちょっとになる関数とを比較して
仕様書通りの動作に確実になるって言える勇気ある?
ひょっとしたらいつものようにGNUの拡張が紛れ込んでるかもしれないんだけど。
0769デフォルトの名無しさん2015/11/25(水) 19:15:21.35ID:q7ajOTDt
>>768
> に対して冗談交じりの横槍を入れただけなのだけど。

先走ってしまって大変申し訳ない
ユーモアのセンスが俺に欠けてたねw

> # 実装しろというなら今度してみるけど、

その苦労を分かる人にそれをお願いなどできません
0770デフォルトの名無しさん2015/11/25(水) 19:22:32.60ID:n/g2lh6I
>>769
こちらこそ微妙なジョークを言ってしまってすまない。
0771デフォルトの名無しさん2015/11/25(水) 19:26:09.15ID:cXbSMUtR
clangのprintfの実装はどんなもん
0772デフォルトの名無しさん2015/11/25(水) 19:53:59.52ID:eZQMgmgd
>>745 みたいな奴、職場にいる。OSは知っているがコーデングは何も知らず恐ろしいまでの難読コード書く奴
0773デフォルトの名無しさん2015/11/25(水) 20:06:08.50ID:38cA3W2G
Microsoftのサンプルコード読んでるうちに長いコードが偉いという考えになった
0774デフォルトの名無しさん2015/11/25(水) 20:14:50.71ID:5w30c50m
>>773
アレは参考にしちゃいかんぞ
0775デフォルトの名無しさん2015/11/25(水) 20:29:39.76ID:s9hTLLjK
>>765
Pascalの実装に決まってるじゃないか。

>>766
それだよそれ、C++の欠点。書式stream。誰が使うねん。
0776デフォルトの名無しさん2015/11/25(水) 20:49:36.95ID:eZQMgmgd
PascalはC++で組むの?
0777デフォルトの名無しさん2015/11/25(水) 21:08:14.63ID:RAN2jGuk
FORTRANだよ
0778デフォルトの名無しさん2015/11/25(水) 21:53:52.49ID:7xcGCsmA
>>759
> IOが重かろうが差がついたと言ってんだよ

100秒と 100.01秒なら、100秒の勝ちって奴ですね
一生ほざいてればいいんじゃね? w
0779デフォルトの名無しさん2015/11/26(木) 00:22:56.72ID:XvZIFf4u
printf()はvfprintf()を使えば書ける
vfprintf()が何でどう書かれているのかは考えたことも無いが
0780デフォルトの名無しさん2015/11/26(木) 07:33:06.27ID:gnba9wz+
>>779
着想は間違っていないが踏み込みが足りない。
vfprintf() は vsprintf() で文字列に整形してから
fputs() を使って出力するのだ。
0781デフォルトの名無しさん2015/11/26(木) 11:42:26.02ID:w6z7subU
>>780
いやいや、fputsを使ったら暗黙の改行が追加されるからそれでは駄目。
vfprintfをvsprintf使って実装するならfputsの代わりにfwriteを使わなきゃ。
0782デフォルトの名無しさん2015/11/26(木) 11:48:07.78ID:cMOPjOrt
fputsは改行追加しないでしょ
0783片山博文MZ ◆T6xkBnTXz7B0 2015/11/26(木) 12:08:03.91ID:0Rc82yPU
それがfputs(stdout, ...)とputsの違い。
リファレンスで確認せよ。
0784デフォルトの名無しさん2015/11/26(木) 12:39:56.96ID:w6z7subU
ごめん、fputsは改行を追加しないとか(単に使わないから)知らんかったわ。
0785デフォルトの名無しさん2015/11/26(木) 12:53:33.04ID:cMOPjOrt
>>783
ファイルポインタは第2引数な
int fputs(const char *S, FILE *FP);
07867802015/11/26(木) 16:24:54.78ID:gnba9wz+
「printf() の実装に vfprintf() を使う」に乗っかって
「ならば vfprintf() の実装には vsprintf() じゃい」と
深く考えもせず書いたネタだった(皆さんお気付きと思うが)。

puts() と fputs() の挙動の違いなんて意識してなかったよ。
ちょっと勉強になった。
0787デフォルトの名無しさん2015/11/26(木) 17:26:28.03ID:GUUXPrkk
木とかグラフを表すコンテナは追加されないの?
0788デフォルトの名無しさん2015/11/26(木) 17:32:56.04ID:xvh9rNnd
結局のところ、vsprintfとvfprintfのコードは共通なの?
0789デフォルトの名無しさん2015/11/26(木) 17:56:34.22ID:w6z7subU
>>788
うん。
glibcではvsprintfはvfprintf使って作られてる。
0790デフォルトの名無しさん2015/11/26(木) 23:33:27.11ID:huY8yWFD
>>789
逆じゃね?
0791デフォルトの名無しさん2015/11/26(木) 23:46:27.20ID:eXAV4Cml
そんな糞関数よりC11のvsnprintf_sをはよ規格に入れるべき
0792デフォルトの名無しさん2015/11/27(金) 00:18:56.84ID:D0U2RhLm
struct と書いたあと、 class にしなきゃならないと判明した時点で class に変える?
それとも class と書いたあと、 struct で十分だと判明した時点で struct に変える?
0793デフォルトの名無しさん2015/11/27(金) 00:22:44.18ID:jQDKzCya
デフォルトがprivateかpublicかの違いだけじゃないの
0794デフォルトの名無しさん2015/11/27(金) 00:24:46.51ID:biLzdC6e
↑何のデフォルトか分からずに言ってるバカ
0795デフォルトの名無しさん2015/11/27(金) 00:38:40.02ID:cxyGwFn6
>>792
>しなきゃならないと判明した時点で class に変える?
しなきゃならないことをしないほど
お前は低能なのか?

>struct で十分だと
classはstructの上位版でないので
「十分」という考え方はおかしい
0796デフォルトの名無しさん2015/11/27(金) 00:52:12.98ID:Bpp9Chxs
>>790
逆だと思うじゃん?
> glibcではvsprintfはvfprintf使って作られてる。
で正しいんだぜ。
http://code.woboq.org/userspace/glibc/libio/iovsprintf.c.html
0797デフォルトの名無しさん2015/11/27(金) 00:54:17.82ID:D0U2RhLm
>>795
>しなきゃならないことをしないほどお前は低能なのか?

「時間のずれ」って概念はわかる?
0798デフォルトの名無しさん2015/11/27(金) 01:08:13.77ID:Bpp9Chxs
classとstructは元々概念からして全くの別物だからな。

まぁ仕様上はデフォルトのmember access controlがprivateかpublicかの違いしか無いけど。
0799デフォルトの名無しさん2015/11/27(金) 01:11:48.13ID:B/NYVAdM
ネーミングセンスないよな。virtualとか日本の誤訳のせいで混乱してるのだけど。
0800デフォルトの名無しさん2015/11/27(金) 01:18:49.43ID:Bpp9Chxs
まぁ某言語のrplaca関数より随分マシだけどな。
0801デフォルトの名無しさん2015/11/27(金) 02:01:45.18ID:mL1+69Nb
>>798
その違いについて、ゲーハーは「誤りであった」と語っているな
0802デフォルトの名無しさん2015/11/27(金) 06:22:22.35ID:soZ3p4k0
>>798
継承を忘れるんじゃない!
0803デフォルトの名無しさん2015/11/27(金) 08:38:40.74ID:Bpp9Chxs
>>802
structも継承出来るよ。
0804デフォルトの名無しさん2015/11/27(金) 08:43:13.48ID:yE5slmiS
>>792
struct でいい場合はstructとしておきたい、というのはわかる。
0805デフォルトの名無しさん2015/11/27(金) 08:44:42.58ID:yE5slmiS
>>803
ベースクラスがデフォルトでprivateかpublicかの違いのことじゃない?
0806デフォルトの名無しさん2015/11/27(金) 08:54:21.94ID:BUdTfJfj
完全C互換の時のみstructにしてる
0807デフォルトの名無しさん2015/11/27(金) 08:55:43.21ID:xVNmanwA
>>796
マジか、知らなかった
0808デフォルトの名無しさん2015/11/27(金) 10:04:54.22ID:cYQ+kigl
全メンバーprivateなクラスなんてほぼ無いんだからデフォルトprivateとか無駄だよな
0809デフォルトの名無しさん2015/11/27(金) 10:10:23.44ID:jQDKzCya
で、結局お前は何が言いたかったん?>>794
0810デフォルトの名無しさん2015/11/27(金) 10:15:20.65ID:lqAStIIQ
>>808
カプセル化って知ってる?
原則private例外的にpublicと、その逆は別
0811デフォルトの名無しさん2015/11/27(金) 10:33:48.43ID:cYQ+kigl
>>810
全メンバーprivateなクラス書いたことある?
一つでもpublicがあったらpublicってかかなきゃいけないよね?
逆にprivateなメンバーがないクラスなんてざらにあるよね?
此処まで言わなきゃわからない?
0812デフォルトの名無しさん2015/11/27(金) 10:40:52.95ID:jQDKzCya
基本private、公開したいものだけpublicて方針の方がいいと思うよ
0813デフォルトの名無しさん2015/11/27(金) 10:48:05.99ID:BUdTfJfj
publicにしたいなら明示的に書かないとダメってのが安全ってもんだ
そこで楽をしたいわけじゃないしな
0814デフォルトの名無しさん2015/11/27(金) 10:59:50.87ID:yE5slmiS
>>811
一応賛成しておこう。
カプセル化は大切だが、privateメンバを持つことが目的ではないし、無いに越したことはないからな。
0815デフォルトの名無しさん2015/11/27(金) 11:00:17.17ID:yE5slmiS
>>812
基本的public
0816デフォルトの名無しさん2015/11/27(金) 11:17:52.15ID:cYQ+kigl
一度publicって書いたらそれ以降publicになるC++の仕様でデフォルトprivateにしようが、考えなしのやつは一番上にpublicって書いて終わり、どうせ一度は書かなきゃいけないんだからな。
そういう奴に少しでも考えさせるならJavaやC#みたいに一つ一つ書かせないと意味がない。

それに最初にpublicなメンバー(そのクラスのinterface)を考えるだろ、そのための内部実装で必要になったらprivateなメンバー書くpublicはほぼ必須だがprivateは必須じゃない。
0817デフォルトの名無しさん2015/11/27(金) 11:23:14.28ID:lqAStIIQ
>>811
ええ…
privateがないクラスなんてほとんど書かないし、
privateしかないクラスも結構普通に書くが…
てか実装クラスは普通全部privateじゃねーの?
0818デフォルトの名無しさん2015/11/27(金) 11:24:55.94ID:lqAStIIQ
あ、実装クラスでもコンストラクタはpublicにするか
0819デフォルトの名無しさん2015/11/27(金) 11:32:42.69ID:cYQ+kigl
お次の方どうぞー
0820デフォルトの名無しさん2015/11/27(金) 11:42:48.07ID:cYQ+kigl
次の方って言っちゃったけど言及するとなんでもかんでもpublicメンバー全部virtualなベースクラス作ってそれを派生して実装作ってベースの参照を使うようにして実装の隠蔽(キリッ)とか言ってる人に見えるね
0821デフォルトの名無しさん2015/11/27(金) 11:43:12.07ID:Je5SN0dZ
>>819
お前だろwww
0822デフォルトの名無しさん2015/11/27(金) 11:47:28.87ID:cYQ+kigl
>>821
メンバー全部privateなクラスを書く人ですか?
0823デフォルトの名無しさん2015/11/27(金) 11:50:20.23ID:H/eLoV2h
なんかID:cYQ+kiglみたいなプロマネが入ってきてプロジェクトが死にましたみたいなWeb小説なかったっけ?
面白かった記憶があって、また読みたいんだが、どうやって検索すればいいかわからん
0824デフォルトの名無しさん2015/11/27(金) 11:56:45.43ID:cYQ+kigl
>>823
staticおじさんのことならそれでググれば出てくると思うよ。

オブジェクト指向が無意味だなんて一言も言ってないんだが、理解出来ないのかする気がないのかまともな反論がないから何処が通じてないのか解らないよ
0825デフォルトの名無しさん2015/11/27(金) 12:01:45.27ID:fmEy0pN3
構造体の初期化をHTML風に書こうとして

#define <UNKO> new Unko{
#define </UNKO> }
class Unko{
public:
}

Unko* unko = <UNKO >

</UNKO>

こうやったんだけど、全角使わないでHTML風に書ける?
0826デフォルトの名無しさん2015/11/27(金) 12:07:53.99ID:H/eLoV2h
>>824
辿ったら見つかった、ありがとう
てか、モデルが実在したの知らなかった

横から見ててあなたは実装とインターフェースを分離することを否定してるように見えるよ
しかもC++ではpublicメンバーをvirtualになんかしないでしょ
インターフェースクラスはNVIで書くのが普通なんじゃない
0827デフォルトの名無しさん2015/11/27(金) 12:10:35.03ID:BmEzTRfI
メンバ全部privateなら外から何のメソッドも呼べないじゃん
0828デフォルトの名無しさん2015/11/27(金) 12:22:51.34ID:wCyF/5aJ
> 逆にprivateなメンバーがないクラスなんてざらにあるよね?

素直にカルチャーショック?だわw
privateが無いクラスとか一回も書いたこと無いわ俺
0829デフォルトの名無しさん2015/11/27(金) 12:31:16.93ID:yE5slmiS
>>828
マジで?!
俺は極力structにしているが、一度すべてをpublicにしたクラスを作ってみては?
もちろんカプセル化は保つんやで。
0830デフォルトの名無しさん2015/11/27(金) 12:33:49.86ID:H/eLoV2h
>>829
カプセル化とはなんだったのか
0831デフォルトの名無しさん2015/11/27(金) 12:34:05.81ID:5aaazbOS
>>826
どのあたりが否定してるように読めましたか?具体的に教えて貰えると有り難いですが
全てpublicになんて言ってるわけじゃないのは解るよね?

本当に思いつかないやつも居るみたいだからめんどくせえお前らの為にpublicしか書かない例挙げてやるよ
std::runtime_error(もしくは類似クラス)をエラー種別毎に例外分けれるように毎に派生させる場合
0832デフォルトの名無しさん2015/11/27(金) 12:34:55.03ID:TF2ho38j
すべてpublicでかつカプセル化を保つコードというのが想像できないのだが
カプセル化のイメージが違うんだろうけど、具体的にどんなコードになるの?
0833デフォルトの名無しさん2015/11/27(金) 12:39:08.56ID:5aaazbOS
>>832
クラス内のprivateで定義したクラスとかcppで定義したクラス(所謂pimpl)とか
は全部publicでもカプセル化保てるよな?
0834デフォルトの名無しさん2015/11/27(金) 12:42:02.77ID:H/eLoV2h
>>833
pimplはもともと#define private publicから逃げるためのものなんだから、その例は適してないでしょ
0835デフォルトの名無しさん2015/11/27(金) 12:42:42.97ID:yE5slmiS
>>832
カプセル化とは役割とか責務といった単位で適切にプログラムが分割されていることを示す。
その役割のなかに「状態を保持する」というのが含まれていれば確かにそれはprivateにすべきだろう。
だが適切に責務が分解されていれば、そんなたくさんのクラスに状態を持たせる羽目にはならないと考えているがどうか?
0836デフォルトの名無しさん2015/11/27(金) 12:43:17.45ID:BmEzTRfI
確かにファイル単位のカプセル化で十分な場合も有るわな
0837デフォルトの名無しさん2015/11/27(金) 12:43:25.01ID:TF2ho38j
コンストラクタでpimplをnewし、デストラクタでpimplをdeleteするとして
publicにしたら外部からdeleteされる危険性は?
0838デフォルトの名無しさん2015/11/27(金) 12:44:05.57ID:yE5slmiS
あと、ひとつのクラスにいろんなことやらせない、ってのもあるな。同じことかも知れんが。
0839デフォルトの名無しさん2015/11/27(金) 12:44:06.51ID:B/NYVAdM
privateだろうとソースの中身は隠蔽されず、仕様はPGが確認可能で、
仮にすべてpublicでもclassで構造化さえすれば誤った使い方などまずされない。

仕様はよく分らないけど、publicだから適当に変更してみようなんてPGがもしいるとしたら、
どんなにオブジェクト指向で書いてもバグだらけになるものだ。
0840デフォルトの名無しさん2015/11/27(金) 12:44:16.49ID:5aaazbOS
>>834
じゃあ何の例を挙げてるの?
>>837
そっちはprivate使えばええやん?誰も禁止してないぞ?
0841デフォルトの名無しさん2015/11/27(金) 12:44:42.38ID:H/eLoV2h
>>835
それはモジュール化
カプセル化とは別の話
0842デフォルトの名無しさん2015/11/27(金) 12:45:37.60ID:yE5slmiS
>>841
独立した話ではない。
0843デフォルトの名無しさん2015/11/27(金) 12:45:59.44ID:BmEzTRfI
外部に公開するクラスはカプセル化するんだろうよ
内部で使うクラスはカプセル化しなくても良い場合も有るってことでしょう
cppファイル内で定義していて内部で使っていて外部に公開しないものとか
0844デフォルトの名無しさん2015/11/27(金) 12:47:16.40ID:yE5slmiS
>>835で「示す」と表現したのは確かにまずかった。「結び付いている」とでもしておけば良かった。
0845デフォルトの名無しさん2015/11/27(金) 12:47:18.73ID:cLgBtIY2
privateにするのって使われないためでしょ
使われちゃうと変更がしにくくなる

カプセル化と単一責任原則混同してるやつとかもいるし魔境か
0846デフォルトの名無しさん2015/11/27(金) 12:47:52.95ID:B/NYVAdM
カプセル化、モジュール化は構造化プログラミングの延長。CやVBでDLL化してもモジュール化、カプセル化したのと効果は同じだ。
0847デフォルトの名無しさん2015/11/27(金) 13:04:01.68ID:bqhj4B2t
>>832
つgtk
0848デフォルトの名無しさん2015/11/27(金) 13:10:18.27ID:5aaazbOS
俺は最初からpublicしか書かない事も多い+privateしか書かないことなんてほぼ無いんだからデフォルトpublicでいいじゃん?ってだけなんだが、
で何か否定な人が多いからpublicなメンバーしか書かないクラスの例を挙げたんだけど、一体何処へ発展させようとしてるんだ
これまでデフォルトがprivateである利点を誰も挙げてないよね?
メンバーをprivateにする理由じゃないぞ?
(c++の指定方法で)デフォルトがprivateである利点だぞ?
0849デフォルトの名無しさん2015/11/27(金) 13:12:30.98ID:yE5slmiS
>>845
単一責任原則を進めるとカプセル化も向上する、と言っている。同一視しているのではなく、そのような関連があると主張している。
読めばわかることだ。
0850デフォルトの名無しさん2015/11/27(金) 13:12:54.30ID:iguHMbMo
書き忘れたときにprivateのほうがいいからだろ
とりあえずpublicにしろとか正気か
0851デフォルトの名無しさん2015/11/27(金) 13:20:17.00ID:jQDKzCya
デフォルトpublicがいいならstruct使えばいいだけやん
C++のポリシーにケチつけたところで仕方ないんでないの
0852デフォルトの名無しさん2015/11/27(金) 14:12:31.06ID:z4U9lx1Y
書き忘れたとき、ってのはさすがに
書き忘れんなよ!って思うけどw
多数派のためのサービスというか
言語としての方針だろうね

Rust: デフォがimmutableでmut付けるとmutable
C++など: デフォがmutableでconst付けるとimmutable
0853デフォルトの名無しさん2015/11/27(金) 14:32:05.11ID:jQDKzCya
mutableはC++ではキーワードだからその書き方はちょっと微妙
0854デフォルトの名無しさん2015/11/27(金) 14:34:20.94ID:yE5slmiS
>>852
>C++など: デフォがmutableでconst付けるとimmutable

それはインスタンス生成したときのそのインスタンスの話?
メンバ関数のことじゃないよね。
0855デフォルトの名無しさん2015/11/27(金) 18:46:28.24ID:W14KsSJ2
struct a { /* const */ int b; } const c;
c.b = 1; //mutableなら通るんだがw
0856デフォルトの名無しさん2015/11/27(金) 19:37:00.74ID:8/X8Q1kn
>>853
> mutableはC++ではキーワードだから

ドゥフフw
そんなもんがあるとは夢にも思いませんでした
お前ら混乱させてごめんなw
0857デフォルトの名無しさん2015/11/27(金) 20:19:01.07ID:HYprTEnv
昔はprivateにアクセスする可搬性のある方法が無かったけど
数年前に誰かがテンプレート使った技を発明してからアクセスし放題になった
privateなんか無駄だから嫌ならpimplしとけ
0858デフォルトの名無しさん2015/11/27(金) 21:10:31.45ID:fmEy0pN3
どういう技?
0859デフォルトの名無しさん2015/11/27(金) 21:15:28.12ID:5aaazbOS
昔同じ事宣うやついた気がするけど全然アクセスし放題じゃねえなあと思った記憶がうっすらと
どっちにしろ心底どうでもいいけど
0860デフォルトの名無しさん2015/11/27(金) 21:23:44.44ID:tedP7Lps
http://cpp.aquariuscode.com/legal-private-access

こういうやつか
0861デフォルトの名無しさん2015/11/27(金) 22:00:13.63ID:fmEy0pN3
なにそれ
利点がわからん
0862デフォルトの名無しさん2015/11/27(金) 22:24:49.26ID:m7rZTJ7h
printfとstd::coutってprintfのが汎用性高くない?
でも、綺麗なプログラム書く人はstdで出力してるんだよね。なぜ?
0863デフォルトの名無しさん2015/11/27(金) 22:25:53.25ID:YUPaOys9
googleの社員はstream禁止されていたらしい
0864デフォルトの名無しさん2015/11/27(金) 22:27:28.86ID:e7/qHuAp
>>860
それじゃないだろ
>>860みたいなインチキ技に終止符を打った完全版のはず
初めて見たときはC++のクソさに衝撃受けた
0865デフォルトの名無しさん2015/11/27(金) 22:51:58.56ID:ZcxS6DTK
>>862
お前の目が糞だから糞コードがきれいに見えてるだけ
でも行くのは眼科じゃなくて精神だぞ
0866デフォルトの名無しさん2015/11/27(金) 23:28:55.57ID:xVNmanwA
>>851
賛成
ってか、実際俺は使い分けてるわ
比較的高機能なものはclass、ファンクタレベルの小さいものはstructって感じ
0867デフォルトの名無しさん2015/11/28(土) 00:06:16.35ID:W/xTcAqm
>>866
イイネ

俺もTMPでメンバがtypedef(using)だけの時なんかは struct
いわゆるオブジェクト指向的なやつだと class
0868デフォルトの名無しさん2015/11/28(土) 00:53:07.74ID:f8SBho2z
structを作った時はこれはstructだからpublicなメンバ変数のみにしよう!と考える。

だけどコンストラクタで初期化したいし、ToString()とかアルゴリズム用のファンクタとかやっぱ欲しい。

であれよこれよと拡張しているうちに、うん、これはclassだな、ってなる
0869デフォルトの名無しさん2015/11/28(土) 01:37:13.21ID:WnPFZ4IQ
>>860
面白かった
thx
0870デフォルトの名無しさん2015/11/28(土) 01:40:32.92ID:l6i0EIJ3
>>709
コンパイル時に決まるIOストリームを嫌う人が多い謎
0871デフォルトの名無しさん2015/11/28(土) 02:01:24.09ID:W/xTcAqm
メンバ変数持ったらclassでしょ
0872デフォルトの名無しさん2015/11/28(土) 02:23:39.02ID:wnz9/ADF
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1448404407/-13
0873デフォルトの名無しさん2015/11/28(土) 03:14:03.21ID:a7Onrmik
やっぱclassに比べてstructと呼称した方がより低抽象度・具象的なイメージがある故に、メモリレイアウトを詳細に指定する用途では気分でstructにする、
あるいは、複数のオブジェクトを集約しとくだけの入れ物が欲しいときもstructにする
(これは全メンバpublicでただ集めただけのコードになる。カプセル化は個々のメンバ単位で実現
後者の書き方は、手続きとセットにして初めて意味を成すような、独立したクラスとは言いがたいデータの集まりを表すのにもうってつけ、

な希ガス、
0874デフォルトの名無しさん2015/11/28(土) 08:47:26.75ID:s4cXb24H
privateとか使わないので常にstruct使ってる
本気で外部から隠したい場合ってどうせPimplにするからstructのが楽だし
0875デフォルトの名無しさん2015/11/28(土) 11:22:07.96ID:nQUlWFmj
てか、メンバの特殊化っててきないよね
0876デフォルトの名無しさん2015/11/28(土) 17:54:12.03ID:s4cXb24H
>>875
できるよ
https://ideone.com/kl9lFE
0877デフォルトの名無しさん2015/11/28(土) 17:56:02.46ID:6Lrpyhjo
このバカの言ってることはそういうのとじゃない
0878デフォルトの名無しさん2015/11/28(土) 17:58:50.04ID:s4cXb24H
すまない、よくわからないので説明してほしい
0879デフォルトの名無しさん2015/11/28(土) 18:10:35.72ID:nQUlWFmj
ごめん、部分特殊化がだめなだけだった
0880デフォルトの名無しさん2015/11/28(土) 18:28:03.34ID:s4cXb24H
function templateの部分特殊化は1yでも無理だね
なんで未だにできないんだろ
クラステンプレートで実装できるから不要って判断か?
0881デフォルトの名無しさん2015/11/28(土) 19:12:48.35ID:pohBt4lh
そりゃtemplate classと違って同じ関数にいくらでもtemplate含めてオーバーロード出来るからだろう。
どれに対する特殊化か指定するのがややこしすぎるし、adl含めてどれが呼ばれるのかも今以上にカオスになる。
0882デフォルトの名無しさん2015/11/28(土) 21:01:07.59ID:dohK3Eb1
部分特殊化なんていう作業が必要なc++って腐っているだろ。自動でやれるようにしろよ。できない理由が有るのか?
0883デフォルトの名無しさん2015/11/28(土) 21:42:10.21ID:MBn8Lywe
自動でできない所をわざわざ部分特殊化しているのだが
0884デフォルトの名無しさん2015/11/28(土) 22:59:11.76ID:W/xTcAqm
おいおい楽しい部分を自動化してどうすんだよ
0885デフォルトの名無しさん2015/11/28(土) 23:51:16.21ID:pohBt4lh
部分特殊化と同じことが自動でできるとかそんな超技術があるなら、あらゆるプログラムがなにも指示せずとも自動で出来上がることになるからプログラマもプログラミング言語も不要になるな。
0886デフォルトの名無しさん2015/11/29(日) 00:49:27.53ID:tikXtbZT
>>880
スコットメイヤーですら理由がよくわからんと言っていたような
S.T.Lavavej氏は同時検討の時間が足りなかったと言っていたような
0887デフォルトの名無しさん2015/11/29(日) 01:16:22.95ID:KmrpGp6z
>>881
既にテンプレート含めたuser-defined conversionとかも発動条件がカオスだからなあ
逆に言えばこれ以上増えたところで今更な気もw
0888デフォルトの名無しさん2015/11/29(日) 01:31:12.27ID:KmrpGp6z
>>881
調べてみたがfunction templateはオーバーロードされないね

>>886
知識不足で規格でそうなってるとしか言えない事はあるけど
メイヤー先生すらわからないのかよ
0889デフォルトの名無しさん2015/11/29(日) 01:40:17.88ID:7XGZYDJa
関数テンプレートが部分特殊化できたら
true_typeのタグディスパッチみたいな糞コードが少しマトモになるな
template<typename T> auto f(T t) {
 return f_impl<is_xxx_v<T>>( t );
}
0890デフォルトの名無しさん2015/11/29(日) 02:17:04.66ID:KmrpGp6z
SFINAEのコードが綺麗になるなあ
でもconstexprが変態になりそう

>>888 捕捉 一般の関数との間のオーバーロードです
0891デフォルトの名無しさん2015/11/29(日) 16:22:25.42ID:KrqWIN7R
>>888 function templateはオーバーロードされない?

どういう意味だ?
0892デフォルトの名無しさん2015/11/29(日) 20:47:38.92ID:pijv15rJ
バカのたわごとにいちいち反応するだけ無駄
0893デフォルトの名無しさん2015/11/30(月) 01:16:38.33ID:5zESIF5z
>>891
ごめんなさい、勘違いしてました
ADLとの兼ね合いは曖昧になるのでエラーになると思ったんですが
テンプレートと一般関数だと必ず関数が優先されるので起こらないんですね
全く逆の事言ってしまいました
0894デフォルトの名無しさん2015/12/01(火) 16:51:29.05ID:utXyFQyI
>>886
なんだ、何か深遠な理由があるのかと思ったらw
初学者は文法や規約を学ぶときその意義を自分なりに咀嚼するもんだけど
こういうとこで無駄に悩むのは哀れだな
0895デフォルトの名無しさん2015/12/01(火) 21:18:59.66ID:3itGlQru
コンストラクタの中で、thisを使っちゃだめなの?
0896デフォルトの名無しさん2015/12/01(火) 21:20:18.16ID:eT3ZeD+F
>>895
仮想関数を使えないだけ。


...だっけ?
0897デフォルトの名無しさん2015/12/01(火) 23:35:25.39ID:s1rcgCDh
メンバ初期化子の中でthisを使えないだけなんじゃ…
0898デフォルトの名無しさん2015/12/01(火) 23:57:28.13ID:dJ602Izb
純粋仮想関数を使うのがダメなだけ
0899デフォルトの名無しさん2015/12/02(水) 00:35:35.05ID:0XpBrEKR
コンストラクタの中でthisを何に使うん?
0900デフォルトの名無しさん2015/12/02(水) 00:47:04.28ID:qI5sGkUB
thisポインタに代入するとメモリ割り当てを自力で行え(命令
あとコンストラクタの引数の名前が思いがけずメンバの名前と一致してしまったときとか
0901デフォルトの名無しさん2015/12/02(水) 00:49:43.48ID:zaOCqs+2
普通に使うだろ
lock_guard(T& lk):lk_(lk)
{
lk_.lock();//this->が省略されてるだけ
}
0902デフォルトの名無しさん2015/12/02(水) 01:41:02.91ID:bhBQTEux
class C {
public: C(int n) {this->n = n;}
private: int n;
};
0903デフォルトの名無しさん2015/12/02(水) 01:57:56.53ID:zaOCqs+2
>>902
その例だと初期化子リストつかえという話になるから良くない
0904デフォルトの名無しさん2015/12/02(水) 02:16:20.18ID:dpb/NTdw
言いたいことは分かるからいいじゃん。
0905デフォルトの名無しさん2015/12/02(水) 03:04:20.24ID:KW5mtzU/
初期化子リストなら : n(n)でいけるしな
0906デフォルトの名無しさん2015/12/02(水) 09:13:21.89ID:BlTQmdzi
みんなありがとう
コンストラクタの中ではthisは使っちゃいけないんだな
使わないようにするわ
0907デフォルトの名無しさん2015/12/02(水) 10:09:28.84ID:hYuIR41h
なんでそうなる
必要性が薄いだけで別に使っていいんだぞ
0908デフォルトの名無しさん2015/12/02(水) 16:44:36.73ID:BlTQmdzi
>>907
なんか静的エラーチェックにかけたらダメだったよ
0909デフォルトの名無しさん2015/12/02(水) 17:54:06.75ID:SG5bn8pD
>>908
どんな静的チェック掛けてるか知らんけど、何事にも基本と例外があるのよ
0910デフォルトの名無しさん2015/12/02(水) 19:37:52.50ID:zThpLiMk
>>908
静的エラーチェックってlintとかのことだろ?
それは与えられたポリシーに従っていないコードを弾くためのツールだぞ。
0911デフォルトの名無しさん2015/12/02(水) 20:20:21.26ID:OrMGyZIC
lintってw
0912デフォルトの名無しさん2015/12/02(水) 20:29:37.40ID:jBVkagxP
なんでlintに草生えるの?
0913デフォルトの名無しさん2015/12/02(水) 20:30:57.08ID:5Y1e+QK6
CFront誕生から11/27で30年やそうや
ttp://cpplover.blogspot.jp/2015/11/c30cfront.html

ぽまいらは30年前どんなプログラム言語で何のプログラムを書いていましたか
0914デフォルトの名無しさん2015/12/02(水) 20:30:59.28ID:zaOCqs+2
静的解析つーたらこべりてぃとかPSV-Studioじゃねえの?
0915デフォルトの名無しさん2015/12/02(水) 20:32:10.56ID:zaOCqs+2
節子それPVS-Studioや
0916デフォルトの名無しさん2015/12/02(水) 20:32:34.80ID:5Y1e+QK6
>>912
lintは関数プロトタイプとか引数の宣言がK&Rの頃のやつなので…
0917デフォルトの名無しさん2015/12/02(水) 20:33:50.61ID:5Y1e+QK6
なんと奇遇な!
>>913の記事はCFrontをPVS-Studioでソフトウェア的に裁判にかける話
0918デフォルトの名無しさん2015/12/02(水) 21:35:13.94ID:hYuIR41h
lintも立派な静的解析なのに
-Weffc++も知らなそうだ
0919デフォルトの名無しさん2015/12/02(水) 22:33:42.15ID:5Y1e+QK6
実際知らんが
糖衣構文まみれの実用プログラミング言語の静的解析とかぜってー泥臭い判定ロジックの塊になるに違いないと確信するから
タダでそんなの作ったりテストしたがるプログラマは少数だと思うから
この場合は個人的にはどっちかというとOSSよりプロプラエタリのやつを選ぶ
希ガス
0920デフォルトの名無しさん2015/12/03(木) 07:19:25.74ID:zCQ/Nhg2
>>918
lint も(当時としては)立派な静的解析だけど、今時コンパイラのチェックで十分じゃね?
って話だろ
それ以上を求めるなら、Coverity なり CodeSonar なりを入れればいいかと
0921デフォルトの名無しさん2015/12/03(木) 09:34:06.90ID:7lfAnJct
今時ANSICのがlintとかそれこそ何時の話だよ
lintとは今やコード文法の解析全般をさす言葉だよ
そのlintの機能を内包しているソフトを出して自慢気に語り出すのはちょっと
0922デフォルトの名無しさん2015/12/03(木) 10:15:32.81ID:vntsHvc0
無理矢理感丸出し
誰が今時lintとか言うんだよ
0923デフォルトの名無しさん2015/12/03(木) 10:29:34.66ID:G8vTqAy3
lintツールはもはや一般名詞だろ。検索してみろよ。
0924デフォルトの名無しさん2015/12/03(木) 10:44:09.75ID:vntsHvc0
アホ丸出し
0925デフォルトの名無しさん2015/12/03(木) 10:50:55.75ID:6lknT5KC
>>924
自分の無知をさらけ出して恥を上塗りしなくてもいいのよ?
ちゃんとググった?
0926デフォルトの名無しさん2015/12/03(木) 11:03:23.68ID:4JqwU0dP
lingual test
0927デフォルトの名無しさん2015/12/03(木) 11:04:38.13ID:SjWoAKws
昔HTML-lintが流行った時期があったなぁ
でも10年以上前の出来事の気がする
0928デフォルトの名無しさん2015/12/03(木) 11:38:48.44ID:cYXsvyZR
一般名詞でlintと言ったらうちの周りだと具体的にはcpplint.pyになるかなぁ。
clangの-Weverythingは使うとして
0929デフォルトの名無しさん2015/12/03(木) 11:53:27.80ID:9QpDoKsV
lintとは、主にC言語のソースコードに対し、コンパイラより詳細かつ厳密なチェックを行うプログラムである。
0930デフォルトの名無しさん2015/12/03(木) 11:56:38.08ID:9QpDoKsV
Another HTML-lintはHTML(XHTML)の文法チェックを行うソフトウェアである。作者は石野恵一郎。Perl5で作成されている。公開は1997年。
0931デフォルトの名無しさん2015/12/03(木) 11:57:18.99ID:9QpDoKsV
ごっちゃにしちゃいかんよ
0932デフォルトの名無しさん2015/12/03(木) 12:02:23.41ID:4rUKwdGH
イベントが発生するとラムダをコールバックするような仕組みを実現したいです
登録はstd::functionのリストにラムダを突っ込めば簡単に出来ます
しかし、キャプチャされているオブジェクトが死ぬとき、登録を削除しなければなりません
登録削除はどうしたらよいですか?
0933デフォルトの名無しさん2015/12/03(木) 12:11:17.06ID:sEruxHcf
Vectorが置いてたHTML Lintは一時期使ってたっけな
0934デフォルトの名無しさん2015/12/03(木) 12:14:54.87ID:9ozwOaJ6
>>932
どうするもこうするも「キャプチャされているオブジェクトが死ぬとき、登録を削除」すればいいんじゃね
0935片山博文MZ ◆T6xkBnTXz7B0 2015/12/03(木) 12:18:45.51ID:4JqwU0dP
リストがstd::listかstd::vectorかどうかで対処が異なる。
削除はデストラクターで。リファレンス見ろよ。
0936デフォルトの名無しさん2015/12/03(木) 12:21:48.73ID:f0dL0w0J
登録されてるファンクタが先に死ぬことはないって決まっているの?
0937デフォルトの名無しさん2015/12/03(木) 12:23:21.36ID:Fq2nS4CH
>>921
>>923
coverityとかをlintって言う奴居ないだろ
covrityのページ見てみlintって文字出てきたか?
coverityでググってみ?
お前の思うほど一般名詞として使われていないから気を付けな
0938デフォルトの名無しさん2015/12/03(木) 12:28:16.53ID:4rUKwdGH
リストの中に複数あるイベントコールバック用の関数オブジェクトの中から
どうやって自分を参照している削除対象の物だけを見つけ出したらよいんですか?
どの関数オブジェクトが何をキャプチャしているか、後から調べる方法は無いですよね

登録時に関数オブジェクトをこっそり別に保存しておいて
削除するときは保存しておいた関数オブジェクトとリスト内の関数オブジェクトを比較して
自分が登録した関数オブジェクトを探すんですかね

しかしstd::functionに突っ込んだラムダ同士を==で比較すると
どういう比較のされ方をしますか?
同じソースコードから生成されたラムダでも、キャプチャの中身が違っていたら
==で比較したときに別物扱いになりますか?
0939デフォルトの名無しさん2015/12/03(木) 12:34:09.39ID:sEruxHcf
listに直接functionを突っ込まず、マーカーかなにかと一緒に入れておけば
0940デフォルトの名無しさん2015/12/03(木) 12:34:49.55ID:4rUKwdGH
それとも自身のポインタ(this)と、登録したい関数オブジェクトを
std::pairでペアにして登録して
削除するときはthisを頼りに探すんですか?
0941片山博文MZ ◆T6xkBnTXz7B0 2015/12/03(木) 12:37:28.49ID:4JqwU0dP
>>938
std::listを使ってんの? 順序に意味があるの?
関数オブジェクトの比較をテンプレート引数に指定すれば?
0942デフォルトの名無しさん2015/12/03(木) 12:41:14.42ID:38PDYmvi
>>937
うちだとcoverity版のlintとかつい言っちゃう
というかピコピコとかファミコンとかと同じ用法で
リントにかけろって言っちゃう
0943デフォルトの名無しさん2015/12/03(木) 12:45:28.62ID:zCQ/Nhg2
>>925
一般名詞になったと言うページの URL 書いてみろよ w
そもそも lint って言いだした >>910 がツールだって言ってるのにアホすぎでしょ
0944デフォルトの名無しさん2015/12/03(木) 16:08:58.02ID:HBCwEi9c
Boost.Signals2だとconnectionオブジェクトで切断したりweak_ptrで自動的に切断したりしてるね
このあたりは案外設計が難しい
0945デフォルトの名無しさん2015/12/03(木) 16:36:39.69ID:mJh8lY8m
>>943
バカに触れないで
うつるから
0946デフォルトの名無しさん2015/12/03(木) 16:53:20.76ID:7lfAnJct
出てくるのがHTML-Lintがやっとってどういう事だよ
hlintとかjslintとかpylintとかまだまだありますよ?

https://github.com/search?q=lint
十分一般名詞だよ
否定したところで恥かくのは自分だぞ
0947デフォルトの名無しさん2015/12/03(木) 16:57:52.90ID:mJh8lY8m
ころころID変えながら涙目で弁解w
0948デフォルトの名無しさん2015/12/03(木) 16:59:37.76ID:7lfAnJct
あーあ関係ないこと言い出してきたよ
lintがCの文法チェッカを指すなら
このgithubにあるlint達はみんなCのチェッカなんですかねえ?
自分が何言ってんのかちょっとは考えたら?
0949デフォルトの名無しさん2015/12/03(木) 17:02:01.08ID:vntsHvc0
お前がな
0950デフォルトの名無しさん2015/12/03(木) 17:05:23.56ID:7lfAnJct
IDコロコロ変えてるなんて発言が出るのは
自分がそうやってるからだろ?
それこそ馬鹿としか言いようがないね
0951デフォルトの名無しさん2015/12/03(木) 17:24:04.23ID:vntsHvc0
お前がな
0952デフォルトの名無しさん2015/12/03(木) 19:55:43.38ID:zCQ/Nhg2
>>948
> lintがCの文法チェッカを指すなら

お前以外の誰もそんなことは言ってないけど?
単に各言語用の lint って言うツールがあるだけのことだろ
そのページで例えば gdb で検索したら色々な環境用の gdb がヒットするにけど、それ見て gdb は一般名詞だー
とか言っちゃうのかよ w
0953デフォルトの名無しさん2015/12/03(木) 20:06:18.77ID:XbhyavhQ
>>948が何を言いたかったのかも、どこで齟齬が生まれたのかも今わかったから、とりあえず落ち着け。
そして少なくとも俺はだいたい察したからそこまででレスバトルはやめとけ。
0954デフォルトの名無しさん2015/12/03(木) 20:47:51.03ID:SIn5hbzt
また来たンゴ!
先日はありがとナス

なぜC++は黒魔術と呼ばれるのですか?
0955デフォルトの名無しさん2015/12/03(木) 21:02:40.72ID:7JN8BUI+
C並にメモリにやばいアクセスが出来て
その上C以上に覚えなきゃいけないことが多いからかな
0956デフォルトの名無しさん2015/12/03(木) 21:10:51.07ID:WjbZJ8W6
テンプレートによるメタプログラミングが難解で魔術のように見えるから
0957デフォルトの名無しさん2015/12/03(木) 21:13:12.19ID:W6SHvClG
黒魔術部分ってテンプレート酷使系を揶揄するのが発祥じゃなかったっけ。
ふつーに使う分にはなんも黒くないよ
深入りし過ぎず身の丈に合わせて使えばいいんよ
C++11以降はむしろ手軽に使えるよ

深入りが楽しいのも事実
今時ならconstexprあたりから術式の深みにはまるが良い
0958デフォルトの名無しさん2015/12/03(木) 21:23:47.71ID:qdrKfbrZ
template<typename T> void hoge(){}
はヘッダにかけるのに
void hage(){}
はヘッダに書くとエラーでます。何故ですか
0959デフォルトの名無しさん2015/12/03(木) 21:28:42.30ID:SIn5hbzt
ありがとナス!
javaで息抜きしてくるンゴ
0960デフォルトの名無しさん2015/12/03(木) 21:33:58.72ID:7JN8BUI+
>>958
テンプレートは実際に型をはめた時に実体化されるから
0961デフォルトの名無しさん2015/12/03(木) 21:43:59.05ID:X7HD53YV
>>960
想像でものを言うな低能
0962デフォルトの名無しさん2015/12/03(木) 22:04:47.16ID:QauuBag/
>>958
下記は実体を記述しているからダッメ
ヘッダにするならinilineかstatic必須
でないとヘッダをインクルードするたびに
実体の複製が大量生成されてリンケージの
段階でコンフリクトが大量発生する
0963デフォルトの名無しさん2015/12/03(木) 22:08:35.38ID:X7HD53YV
>>962
まるでテンプレートやinlineだと実体の量産が無いような物言いだな
0964デフォルトの名無しさん2015/12/03(木) 22:09:31.99ID:OfqEsdYX
任意のディレクトリ内にある複数のcsvファイルのファイル名をCStringの配列に格納する方法を教えてください。
0965デフォルトの名無しさん2015/12/03(木) 22:11:32.47ID:T6cOKf23
また炎上学習法ですか
0966デフォルトの名無しさん2015/12/03(木) 22:15:49.85ID:X7HD53YV
>>964
まずCStringの定義を説明しろ低能
0967デフォルトの名無しさん2015/12/03(木) 22:16:18.73ID:gNtJcgPL
>>958
それコンパイラーのバグだよ
0968デフォルトの名無しさん2015/12/03(木) 22:17:36.98ID:Fq2nS4CH
>>958
template関数はinlineキーワードを付けたときと同じ状態になります。
0969片山博文MZ ◆T6xkBnTXz7B0 2015/12/03(木) 22:18:03.95ID:4JqwU0dP
>>964
csvファイルは拡張子が.csvである。
ディレクトリー(フォルダー)の中の項目は、Windowsでは
FindFirstFile/FindNextFileで、LinuxのようなPOSIX環境ではopendir/readdirで列挙できる。
csvファイルのみを抽出したい場合は、「*.csv」というワイルドカードパターンを使う。
0970デフォルトの名無しさん2015/12/03(木) 22:20:43.14ID:4nUxrQps
csvファイルの拡張子が.csvだと
いつから>>969は錯覚していた?
0971片山博文MZ ◆T6xkBnTXz7B0 2015/12/03(木) 22:28:52.79ID:4JqwU0dP
補足と修正。
拡張子が.csvではないcsvファイルを想定する場合については、
ファイルの中身をチェックするしかない。その場合は非効率な処理となる。
csvファイルには方言が多く、例えばエクセルのcsvは複数行のテキストを一つのフィールドに記述できる。
0972デフォルトの名無しさん2015/12/03(木) 23:14:00.82ID:OcXjfpNR
>>965
これ好き
0973デフォルトの名無しさん2015/12/03(木) 23:17:26.41ID:LRrF0HN+
C++で質問です。

メニュー一覧から「Hoge Fuga」を検索してそのWM_COMMAND値を返す方法
を探しています。

よろしくお願いします。
0974デフォルトの名無しさん2015/12/04(金) 00:12:56.11ID:KK6LKRIE
>>972
ちゃんとできる奴がスレにいるならその学習法は良いが
>>964や>>973は高度で出来る奴いないからやる価値はない
0975デフォルトの名無しさん2015/12/04(金) 00:16:41.56ID:K0bZWv/B
高度
0976デフォルトの名無しさん2015/12/04(金) 00:46:00.64ID:H0SRHl0K
>>932
カメだが、
コールバックされる側Aはstd::functionのstd::shared_ptrを持っておく。
イベント発生側Bはstd::functionのstd::weak_ptrのリストを持っておく。
Aのshared_ptrをBのweak_ptrのリストに登録する。
イベントが発生したらweak_ptrが有効か見て判断すればできないかな?
0977デフォルトの名無しさん2015/12/04(金) 01:56:40.84ID:qWhz4QUx
あっれーテンプレート関数やクラスを実体化したやつは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つある系のエラーになった
ような希ガス、
0978デフォルトの名無しさん2015/12/04(金) 02:19:45.74ID:ezzwHQH9
>>958
テンプレート(やクラスやインライン関数など)の定義は、実用上ヘッダに書いて複数の翻訳単位で
定義しないといけないので、定義の重複を認めている。
(字句的に同一であることを含めていくつかの常識的な制約はある。)

そういった特例に含まれないものの定義をヘッダに書くと複数の翻訳単位に定義が含まれ、
定義が重複することになる。 ODR(One Definition Rule) 違反ってやつで、結果は未定義。
一般的な実装ではリンクエラーとして検出される。


この特例に含まれるという点ではテンプレートとinline関数は同様だけど、関数テンプレートが
自動的にinlineとみなされるわけじゃない。

ODR はプログラム全体に「定義」がいくつ含まれるか、という話。
「実体」とか言ってるとテンプレートインスタンスとごっちゃになったりするのでやめといたほうがいい。
0979デフォルトの名無しさん2015/12/04(金) 07:53:55.32ID:lXdK5bEE
CSVの文法って真面目に凝りだすと面倒だよな……>>971みたいに「1セルが複数行ある」パターンもあるし
0980デフォルトの名無しさん2015/12/04(金) 08:35:38.61ID:w/Hp0b+s
CSVの話をする際にRFC 4180の名前も出せないレベルだから面倒に感じるんだろう
0981デフォルトの名無しさん2015/12/04(金) 11:26:43.26ID:W/x9yQ78
static inline void hoge()
inline static void hoge()
どっちが主流?
あるいは(ビルドは通るけど)本来はどちらかが文法的には間違いだったりする?
0982デフォルトの名無しさん2015/12/04(金) 11:35:00.30ID:v4H8WRK+
static void iniline hage() がスタンダード
0983デフォルトの名無しさん2015/12/04(金) 11:37:34.61ID:v4H8WRK+
static void inline hage() だスタンダード的に
inline などのモードは、型と手続き名の間に入れるのがハゲの鉄則
0984デフォルトの名無しさん2015/12/04(金) 11:46:52.73ID:1FHuCnKY
static voidはdecl-specifier-seq、
baka()はinit-declarator-list
specifierの一種であるinlineを追加するんなら
decl-specifier-seqの後ろに追加するのが良いだろう。
つまりvoid static inlineだ。
*constやstruct X finalの様にC++は修飾を右に書く文法だからな。
0985デフォルトの名無しさん2015/12/04(金) 14:08:30.99ID:YEfoDPnk
>>796
いちいち関数オブジェクトをA側で保持しておくのは面倒なんで
B側で関数オブジェクトとAのポインタをstd::pairで保持しておいて
削除するときはAのポインタをキーにする方がシンプルで簡単かも
0986デフォルトの名無しさん2015/12/04(金) 17:08:00.24ID:H94Wo3u0
質問
C++ Win32 コンソールアプリケーションにて
自身のウィンドウを最小化させるにはどうしたらいいですか?
0987デフォルトの名無しさん2015/12/04(金) 18:58:24.09ID:YEfoDPnk
GetConsoleWindow
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms683175%28v=vs.85%29.aspx

これが使えるんじゃないかな、しらんけど
ただし、XP以上じゃないとダメだよ
0988デフォルトの名無しさん2015/12/04(金) 19:46:31.79ID:4rTjiz/h
雪
0989デフォルトの名無しさん2015/12/04(金) 20:18:19.17ID:KK6LKRIE
ウィンドウ 最小化 Win32 でぐぐったら
http://d.hatena.ne.jp/s-kita/20121220/1356014299
が出てきた。
ShowWindowのC++バージョンがあればいいんだよね
0990デフォルトの名無しさん2015/12/04(金) 20:49:29.84ID:7W1HEY29
>>980
Excel がそれに従ってるとでも?
0991デフォルトの名無しさん2015/12/04(金) 21:00:52.06ID:H94Wo3u0
>>987
ありがとうございました
0992デフォルトの名無しさん2015/12/04(金) 21:59:39.04ID:rgdHsALa
>>990
RFCの方が後付けなんでExcelの方が従ってるわけではないのは当然だけど、
準拠しない部分があるってこと?
0993デフォルトの名無しさん2015/12/04(金) 23:19:56.54ID:qWhz4QUx
>>978
レス�dクス勉強になた、

それはそうとして皆さん!
ttp://www.emit.jp/prog/prog_opt0.html
↑クラスのメンバの直接利用をdisられてるんですが
パフォーマンス(ネタ)言語たるC++に何か対策は無いんですか;

メンバをいったんポインタか参照に置き換えればrestrict修飾子が使えるけど
もっと一発でハイパホーマンスにできるやつご存知ないですか??
0994デフォルトの名無しさん2015/12/04(金) 23:49:12.83ID:8OSUTWwz
>>993
std::fill_n(m_pBuffer, m_nSize, n) でいいんじゃないかな。
https://goo.gl/Lbt2gK
0995デフォルトの名無しさん2015/12/05(土) 00:14:21.98ID:+8tnJCl8
次スレの季節

C++相談室 part121
http://peace.2ch.net/test/read.cgi/tech/1449240881/
0996デフォルトの名無しさん2015/12/05(土) 01:03:42.55ID:28a5J014
>>992
従ってる
Qに触れるな
0997デフォルトの名無しさん2015/12/05(土) 03:16:50.47ID:NRX1k+Is
>>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をレジスタ割り当てさせっぱなしにする)方法は無いですかいのう…
0998デフォルトの名無しさん2015/12/05(土) 03:56:29.05ID:J/NXgEYT
うめ
0999デフォルトの名無しさん2015/12/05(土) 06:45:38.80ID:zpovgyFs
>>996
フィールド内改行が<CR> <LF>ではなく環境依存
RFCには完全に準拠していない
1000デフォルトの名無しさん2015/12/05(土) 07:24:15.82ID:A2giUrci
>>999
ここまで頭が悪いと生きているのも辛いだろうな
RFC 4180読み直せよ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。