2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part101

1 :デフォルトの名無しさん:2013/04/06(土) 16:03:15.86
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part99(実質part100)
http://toro.2ch.net/test/read.cgi/tech/1361435828/

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

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

2 :デフォルトの名無しさん:2013/04/06(土) 17:29:10.77
>>1
なんで誰もスレ立てなかったの?馬鹿なの?

3 :デフォルトの名無しさん:2013/04/06(土) 18:37:00.54
立てようとしたら、
修行が足りなくてできんかった。

4 :デフォルトの名無しさん:2013/04/06(土) 18:39:46.85
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京極大学霊長類研究所

5 :デフォルトの名無しさん:2013/04/06(土) 18:40:08.98
立てようとすら思わなかったぜ

6 :デフォルトの名無しさん:2013/04/06(土) 18:45:00.27
そういえばチンパンジーのアイって今年の10月で37歳だと。

7 :デフォルトの名無しさん:2013/04/06(土) 18:58:02.46
なんと、俺より年上だったか

8 :デフォルトの名無しさん:2013/04/06(土) 19:39:30.02
int a[] = { ... };
int b[] = { ... };

aとbの要素が完全に一致するSTLのアルゴリズム教えてください
配列の長さが異なる場合もあります

9 :デフォルトの名無しさん:2013/04/06(土) 19:53:20.27
all_ofかなと一瞬思ったが違うか

10 :デフォルトの名無しさん:2013/04/06(土) 19:58:55.58
end(a) - begin(a) == end(b) - begin(b) && equal(begin(a), end(a), begin(b))

11 :デフォルトの名無しさん:2013/04/06(土) 20:09:50.73
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

12 :デフォルトの名無しさん:2013/04/06(土) 20:11:55.35
>>8
std::equal()じゃだめなん

13 :デフォルトの名無しさん:2013/04/06(土) 20:18:40.00
>>12
esualだと長さが一致してないとダメなのでそこを一気にやってくれる方法が知りたかったです

14 :デフォルトの名無しさん:2013/04/06(土) 21:08:27.04
確かにこういう場合分けが必要だしなあ

int main()
{
int a[] = {1, 10, 3, 5, 6, 5, 2, 9};
int b[] = {1, 10, 3, 5, 6, 5, 2};

int len_a = sizeof(a) / sizeof(a[0]);
int len_b = sizeof(b) / sizeof(b[0]);

bool eqb = (len_a == len_b) ? std::equal(a, a + len_a, b) : false;

std::cout << "a[]とb[]は" << ((eqb) ? "等しい" : "等しくない") << std::endl;
}

15 :デフォルトの名無しさん:2013/04/06(土) 21:44:23.12
>>13
コンテナだと要素数を事前に知れるけど、配列はそうは行かないじゃん
文字列のように'\0'終端文字列ならいいけど、そうでないなら自作するしか

16 :デフォルトの名無しさん:2013/04/06(土) 21:47:09.27
>>14
同じ型に決まってるだろうから
要素数の確認は sizeof(a) == sizeof(b) で十分では。

17 :デフォルトの名無しさん:2013/04/06(土) 22:03:49.61
>>16
それでもいいけどtemplateにしてstd::equalにガワかぶせようとしたんだ
コンテナも同じ型で同じコンテナならoperator==で比較出来るので便利なんだが

18 :デフォルトの名無しさん:2013/04/06(土) 22:34:53.87
同じものがほしいだけなら優先する方のサイズ分だけコピーすればいいだけ何じゃ?
余った部分は0うめ?
最初の例が気になるところなんだけど、これ本物もsizeofしても平気なの?

19 :デフォルトの名無しさん:2013/04/06(土) 22:48:11.19
コンテナはsizeofはC++11からdata()なら行けるんでは
ただしvectorだけだな

STLのようにアルゴリズムを汎用化したければIterator traitsによって
データの長さを取得する方法を場合分けするか、関数の多重定義をするか、
しかしどうして長さの違う物を比較しようと思ったの?絶対一致するはずがないのに

20 :デフォルトの名無しさん:2013/04/06(土) 22:57:04.96
>>19
長さが一致する場合もあるからです

21 :デフォルトの名無しさん:2013/04/06(土) 23:39:03.76
STLのstd::equalは比較対象のInputIteratorの長さが十分である事を確認して
呼び出さないと鼻から悪魔だからなあ

ラッパーを作るしかないね

22 :デフォルトの名無しさん:2013/04/07(日) 00:22:42.67
長さとmemcmpにわけろ

23 :デフォルトの名無しさん:2013/04/07(日) 00:24:56.76
こんな漢字。
(sizeof(a)==sizeof(b)) && (memcmp(a,b,sizeof(a))==0)

24 :デフォルトの名無しさん:2013/04/07(日) 01:05:44.31
http://ideone.com/AcLs5d

要するにこういう事っしょ

25 :デフォルトの名無しさん:2013/04/07(日) 03:42:14.16
>>24
関係ない所で気になったんだけど、
どうしてsize_tにstd::が付いてないのに
コンパイル通るの?

26 :デフォルトの名無しさん:2013/04/07(日) 03:59:56.31
C++1yではイテレータ4つ取るバージョンのequalも入るとか何とか

27 :デフォルトの名無しさん:2013/04/07(日) 10:15:18.34
>>25
Cのはstd::なくても通るよ

28 :デフォルトの名無しさん:2013/04/07(日) 10:32:11.89
>>26
それって二項関数を取るバージョンでしょ?
それはC++03からある(正確にはC++98から)
今C++11の規格票を見たけど2つのbeginとendを取るバージョンはなかった

29 :デフォルトの名無しさん:2013/04/07(日) 10:32:37.11
>>26
と思ったらC++1yか
まああってもなくてもいいや

30 :デフォルトの名無しさん:2013/04/07(日) 10:44:59.12
>>27
マクロ以外はstd名前空間に入ると
思うのだが、ソースきぼん

31 :デフォルトの名無しさん:2013/04/07(日) 10:56:50.37
name.h の形式だとグローバル名前空間にも定義される
cname の形式だとグローバル名前空間にも定義されるかもしれない

17.6.1.1 Library contents
All library entities except macros, operator new and operator delete are defined within the namespace std
or namespaces nested within namespace std. 172
172) The C standard library headers (Annex D.5) also define names within the global namespace,
while the C++ headers for C library facilities (17.6.1.2) may also define names within the global namespace.

32 :デフォルトの名無しさん:2013/04/07(日) 11:00:44.23
C/C++できる男の人ってかっこいい。
JavaとかC#なんて軟弱者の言語だわ。

33 :デフォルトの名無しさん:2013/04/07(日) 11:10:16.21
>>31
そもそもsize_tの為のヘッダがinclude
されてないし、cnameも使ってないから
コンパイル通るかは処理系依存だよね?

34 :デフォルトの名無しさん:2013/04/07(日) 11:10:54.85
<iterator>のヘッダ初めて覗いてみたけど、組み込み型は全部テンプレートが特殊化
でズラズラ並べて定義されてるのね
少しワロタ

ところで構造体の配列とかはどういう扱いになるんだろう?

35 :デフォルトの名無しさん:2013/04/07(日) 11:12:26.24
>>33
まーな

36 :デフォルトの名無しさん:2013/04/07(日) 11:33:08.60
>>32
照れるじゃねーか

37 :デフォルトの名無しさん:2013/04/07(日) 11:33:45.37
        ,,__,,
       /     `、
      /       ヽ
     / ●    ● |
    /l  ''''' し  '''''' |
   /  l   __.   |   
   l  /ヽ_ ` --' _ノ
   \       ̄  ヽ∩
    ⌒l        l三 |
      |        ヽ.__|

38 :デフォルトの名無しさん:2013/04/07(日) 11:36:25.58
>>36
JAVA信者の煽りに反応するなよ
C++はな、マスターするためには
まず禿げなきゃいけないんだぜ

39 :デフォルトの名無しさん:2013/04/07(日) 11:39:40.97
あ、だから照ってるのか、すまん

40 :デフォルトの名無しさん:2013/04/07(日) 11:49:09.98
なにその一人ボケ突っ込み

41 :デフォルトの名無しさん:2013/04/07(日) 12:00:24.31
>>38-39
おまい、おもろいなw

42 :デフォルトの名無しさん:2013/04/07(日) 13:50:02.20
C++を学ぶのに一番おすすめのサイトはどこですか?

Cは分かるという前提で。オブジェクト指向はまったくわかりません。

43 :デフォルトの名無しさん:2013/04/07(日) 13:51:32.82
C++をバリバリつかうお仕事って何がありますか
SEで入社したんですが組み込みでC使ってるらしいのは把握しました

44 :デフォルトの名無しさん:2013/04/07(日) 13:56:35.59
C++よりCのほうが難易度が高い。
Cが使いこなせるなら特にC++をやる必要はない。
パフォーマンスもC++の方が落ちる。テンプレートなど使用しているせい。
大規模、大人数で開発するとき、パフォーマンスを犠牲にしても保守性を上げるためC++にすることはある。
シビアな速度、メモリ管理が必要ならCかアセンブラ。

45 :デフォルトの名無しさん:2013/04/07(日) 13:58:12.34
どこを立て読み?

46 :デフォルトの名無しさん:2013/04/07(日) 14:00:43.08
C++は子供のおもちゃ
Cは職人が命を預けられる道具

47 :デフォルトの名無しさん:2013/04/07(日) 14:07:05.34
>>44
何かいろんな観点をごっちゃにしたデカイ釣り針だな

48 :デフォルトの名無しさん:2013/04/07(日) 14:07:06.74
C++は老人のオナニー
Cは老人の残した糞

49 :デフォルトの名無しさん:2013/04/07(日) 14:08:36.39
Dは新進気鋭の若手

50 :デフォルトの名無しさん:2013/04/07(日) 14:11:28.69
パフォーマンスと言うのが、実行速度という意味なら、テンプレートでパフォーマンス悪化は起こらない

51 :デフォルトの名無しさん:2013/04/07(日) 14:12:03.13
Dこそが至極
すべての言語は最終的にDに集約される

52 :デフォルトの名無しさん:2013/04/07(日) 14:12:56.65
>>50
所詮マクロですもんね
バイナリサイズがでかくなるだけ

53 :デフォルトの名無しさん:2013/04/07(日) 14:16:35.26
バイナリサイズがでかくなるということはキャッシュ効率が悪くなり遅くなるということ

54 :デフォルトの名無しさん:2013/04/07(日) 14:17:10.30
C++では性能劣化しないというのが理念だが、それはコンパイラの実装次第であって
現実として、CをC++で完全に置き換える状況にはなっていない。

55 :デフォルトの名無しさん:2013/04/07(日) 14:17:15.41
>>52
それもほとんどの場合は違うと思うよ。
コンパイル速度が悪化する程度だよ。

56 :デフォルトの名無しさん:2013/04/07(日) 14:19:26.11
>>53
それは本質がわかってない
テンプレートでバイナリが肥大化するなら、C でも同程度に大きくなる

57 :デフォルトの名無しさん:2013/04/07(日) 14:43:10.42
超上級者の書いたcが、サイズも小さく性能も高いという点なら同意するけど、
テンプレートというかメタプログラムのいいところは、コンパイルの時点である程度の処理が解決されているので
キャッシュヒットは悪くなったとしても、先読みの有効性が高くなる点なんじゃないだろうか。
限界性能とか意識したことないけど。。。

58 :デフォルトの名無しさん:2013/04/07(日) 14:47:46.94
>>56
型毎に処理を作るという事を行わなければそうはならないが(qsortみたいに)、
今度は型毎に処理が最適化されないので遅くなるという罠
同じ事をしようと思った場合、Cは基本的にC++より遅いか同等

59 :デフォルトの名無しさん:2013/04/07(日) 14:51:39.22
fftw(OCamlで生成されたCコードによる最速FFTライブラリ)等を見てると、
テンプレートで頑張ってメタプログラミングするより
コード生成に適した言語でCコードを生成したほうが筋が良さそう

60 :デフォルトの名無しさん:2013/04/07(日) 14:54:04.28
そこまで速度にこだわるなら
Fortran使った方が

61 :デフォルトの名無しさん:2013/04/07(日) 14:54:16.73
テンプレートから実体化した関数と、Cで作った関数に違いはないよ。
テンプレートは型パラメータ分の実体化を伴うから、バイナリが肥大化しやすいと言われてる。
でも、それはCでも変わらないよね。
型違いのコードクローンを作るか、マクロ関数化するしかないんだから。

62 :デフォルトの名無しさん:2013/04/07(日) 14:56:24.17
キャッシュを考えないと遅くて動かないプログラムってどんなのがあるの?ゲームとか?

63 :デフォルトの名無しさん:2013/04/07(日) 14:56:42.48
>>58
その通り。

64 :デフォルトの名無しさん:2013/04/07(日) 14:56:57.58
普通コードのキャッシュよりデータのキャッシュの方が重要
コードサイズなんて大したもんじゃない

65 :デフォルトの名無しさん:2013/04/07(日) 15:00:19.01
そりゃ完全にC with templateとして割り切ったら
Cと同等以上の速度になるんだけど、
実際は標準C++ライブラリを使うなら例外も使うし、
例外を使うならスマポ使いたいし……ってなって
結局はCより肥大化して遅くなってしまう

66 :デフォルトの名無しさん:2013/04/07(日) 15:01:44.50
>>65
あほか
そんなのは選択したお前の勝手で、言語の優劣とは関係無い

67 :デフォルトの名無しさん:2013/04/07(日) 15:02:07.72
最近の例外は正常フローだと逆に早くなるが

68 :デフォルトの名無しさん:2013/04/07(日) 15:02:38.67
>>56
さすがにそれはないんじゃ?
テンプレートの生成するコードハンパないし。
顕著なのはiostreamか?includeしただけでひどいことに
コンテナ系も同じ型であったとしてもやっぱ別々になるし。。。
グローバルにtypedefしたら改善する?
それとも大量のincludeがいけないのだろうか。

69 :デフォルトの名無しさん:2013/04/07(日) 15:03:00.12
>>65
いやいや
例外を使わない方がエラー処理が肥大化するんだぞ
スマポも全く肥大化しないどころか、
デストラクタのないCはエラー処理が冗長になりがち

70 :デフォルトの名無しさん:2013/04/07(日) 15:03:28.88
ゴミみたいな機能でも
なんでも揃ってれば素晴らしいという観点でいえば
C++は素晴らしいね

71 :デフォルトの名無しさん:2013/04/07(日) 15:06:28.05
CとC++のどちらか性能上かはコンパイラの実装次第となるが。
基本的には、徹底してソースコードを調整した場合、性能はアセンブラ > C言語 > C++の順だろ。

72 :デフォルトの名無しさん:2013/04/07(日) 15:08:01.88
C++が遅いとか妄想で語ってるだけ
基本的にC++のが速い

73 :デフォルトの名無しさん:2013/04/07(日) 15:08:49.03
と妄想で語るのでした。まる。

まあトイプログラムならC++の方が速いよwww

74 :デフォルトの名無しさん:2013/04/07(日) 15:09:24.00
一年後出来上がったソフトを比較した結果
C++>C言語>アセンブラの順の速さで動くのだった

75 :デフォルトの名無しさん:2013/04/07(日) 15:14:37.42
Cの方が速いとすると
それはどこかで安全性を犠牲にしてるだけ
場合によってはセキュリティホールを放置してたり

76 :デフォルトの名無しさん:2013/04/07(日) 15:14:53.26
実行速度も消費メモリも(コードの行数すらも)C++の完敗ですね

http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=gcc&lang2=gpp

77 :デフォルトの名無しさん:2013/04/07(日) 15:15:38.86
CもC++もそのコンパイラは、アセンブラ(=機械語)に翻訳するわけで、チューニングされたアセンブラに敵うわけはない。

78 :デフォルトの名無しさん:2013/04/07(日) 15:16:20.68
CとC++で速度差があるとかいってるやつは単なるアホ

79 :デフォルトの名無しさん:2013/04/07(日) 15:18:52.91
>>68
じゃあさ、同じものをCで作ってごらんよ。
テンプレートだから大きいのではなくて、機能そのものが大きいんだよ。
つまり、それはCとC++の違いではなくて、関数レベルの機能差なだけ。

80 :デフォルトの名無しさん:2013/04/07(日) 15:20:26.85
iostreamは擁護できない

81 :デフォルトの名無しさん:2013/04/07(日) 15:21:56.06
速度差はあるのは当然。
いまのC++コンパイラは、Cへのトランスレータではなく、一気にアセンブラ・機械語まで持って行く。
性能はどの程度、コンパイラがチューニングされているかに依存するが、
STLの実装などを見れば汎用性維持のための無駄が多く、同様の処理を直にCで書いたほうが速くなるだろう事は想像がつく。

82 :デフォルトの名無しさん:2013/04/07(日) 15:22:08.44
>>76
"完"敗?
n-bodyとかは遅い方が勝ってるってこと?

83 :デフォルトの名無しさん:2013/04/07(日) 15:28:53.93
C++ to C

C++ → Cfront releases → Release 3.0.3
http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_3.0.3/


Lightweight C++
Lightweight C++は C++に似たプログラミング言語であり、人間が読んで理解できる Cコードに直接変換します。
関数オーバーロード、メンバ関数、継承、ポリモルフィズム(仮想関数)、多重継承、仮想継承、純粋仮想関数、コンストラクタ/デストラクタ、new/delete、単純テンプレートをサポートしています。
http://sourceforge.jp/projects/freshmeat_lwc/

84 :デフォルトの名無しさん:2013/04/07(日) 15:30:40.95
必要もなくクラスやストリーム使ってるソースでCと比較とか
ベンチマークやってるのなんてこんなのばっかり

85 :デフォルトの名無しさん:2013/04/07(日) 15:33:22.04
とりあえずI/Oを含んでるベンチマークは信用しない

86 :デフォルトの名無しさん:2013/04/07(日) 15:33:29.86
必要なく使っているソースで差がでるのだったら必要があって使っているソースでも差があるのではなかろうか?

87 :デフォルトの名無しさん:2013/04/07(日) 15:34:58.00
必要があればC側にも似たようなコードが増える

88 :デフォルトの名無しさん:2013/04/07(日) 15:35:26.03
文句があるならコード改良して送りつければよろし

89 :デフォルトの名無しさん:2013/04/07(日) 15:39:04.64
そんなめんどくさいことするヒマなんてないし

90 :デフォルトの名無しさん:2013/04/07(日) 15:39:19.14
>>76
うわー、思った以上に差がある。
なーんだがっかり。

91 :デフォルトの名無しさん:2013/04/07(日) 15:47:45.37
こうやってCに固執する奴が増えれば増えるほど俺の相対的な戦力が上がるんだからむしろ歓迎

92 :デフォルトの名無しさん:2013/04/07(日) 15:51:08.33
C++使いがクソみたいな言語仕様やライブラリと格闘している間に、
C使いは適当な高級言語とFFIを駆使して
快適にプログラミングしていくのであった……

93 :デフォルトの名無しさん:2013/04/07(日) 15:58:16.62
FFIって言ってみたかったんですね
わかります

94 :デフォルトの名無しさん:2013/04/07(日) 16:04:25.63
・なんだかんだ言ってCもC++も高級言語なので、高度に最適化されたアセンブラには勝てない
・しかし、コンパイラの性能は年々向上してるし、第一人間の能力的にソフト丸ごとアセンブラで書くのはまず不可能
・Cに比べてC++の方がライブラリは充実しているので「書きやすい」が、その分複雑になっているので「難しい」とも言える
・「どちらが速いか」「どちらが小さいか」なんてのは条件によってバラバラなのでなんとも言えない
 (C++の方がライブラリを無駄に多くincludeしやすいが、その分Cよりは安全な処理ができる、等)

とりあえずこんなとこか

95 : ◆QZaw55cn4c :2013/04/07(日) 16:10:12.89
>>94
ライブラリをinlucdeする??

96 :デフォルトの名無しさん:2013/04/07(日) 16:21:47.66
>>95
/usr/includeの中身全部読んでから出直せ

97 :デフォルトの名無しさん:2013/04/07(日) 16:22:13.83
boostも使った事ねーのか

98 :デフォルトの名無しさん:2013/04/07(日) 16:26:43.66
これは恥ずかしい。

99 :デフォルトの名無しさん:2013/04/07(日) 16:29:29.05
>>79
使ってないコードはリンカが取り除くから機能がでかいからといってincludeしてちょっと使うぐらいじゃコードサイズはでかくなっちゃいけない
でも現実にでかくなっているということは機能がでかいんじゃなくてテンプレートがクソだからだ

100 :デフォルトの名無しさん:2013/04/07(日) 16:33:13.34
早いけど先に地鎮祭しとくのでテンプラよろしく

STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

101 :デフォルトの名無しさん:2013/04/07(日) 16:47:46.85
>>97
厳密にはboostにしても、「インクルードするだけのライブラリ」ではない、それを踏まえた上でのくだらない突っ込みでは?

>>96
リンカって知ってる?

102 :デフォルトの名無しさん:2013/04/07(日) 16:49:07.73
「インクルードするだけのライブラリ」でないのはごく一部だけだろ
大部分は「インクルードするだけのライブラリ」

103 :デフォルトの名無しさん:2013/04/07(日) 16:55:54.33
>>101
これは恥ずかしい。

104 :デフォルトの名無しさん:2013/04/07(日) 17:09:53.68
>>83
何これ面白い
早速落として使ってみよう

105 :デフォルトの名無しさん:2013/04/07(日) 17:10:24.57
また老害Qが湧いてるのか

106 :デフォルトの名無しさん:2013/04/07(日) 17:12:26.13
JAVAでゲームが書かれる時代に何くだらん議論してんだよ

107 :デフォルトの名無しさん:2013/04/07(日) 17:51:31.80
一番くだらないのが来ました

108 :デフォルトの名無しさん:2013/04/07(日) 19:38:30.96
C++でガリガリと大きなプログラムを書けることに優越感を感じます。

109 :デフォルトの名無しさん:2013/04/07(日) 19:42:23.64
言語を選べる職場なの?

110 :デフォルトの名無しさん:2013/04/07(日) 19:48:16.97
アルゴリズム検証やプロトタイピングが主なので。

111 :デフォルトの名無しさん:2013/04/07(日) 19:51:46.90
>>110
それ何て研究室?一般企業ではあり得ないよなあ

112 :デフォルトの名無しさん:2013/04/07(日) 19:52:59.06
>>104
CfrontはC++処理系の元祖

113 :110:2013/04/07(日) 19:53:09.24
>>111
あれ?そうスか?
普通の電機メーカーです。

114 :デフォルトの名無しさん:2013/04/07(日) 19:55:58.24
すげえメーカーだなあ
組み込みにC++?

115 :デフォルトの名無しさん:2013/04/07(日) 19:56:29.20
>>112
C++の表面に出て来ない裏方を見てみたい好奇心で

116 :110:2013/04/07(日) 19:59:44.30
>>114
あ、いや、C/C++で検証したアルゴリズムをFPGAで実装。
めんどい。

117 :デフォルトの名無しさん:2013/04/07(日) 20:00:14.26
言ってる事がどんどん変わってるなwww

118 :デフォルトの名無しさん:2013/04/07(日) 20:00:26.55
底辺社畜さんには同情を禁じ得ないけど
それも自分が選んだ道だから
頑張って!

119 :デフォルトの名無しさん:2013/04/07(日) 20:10:08.81
選びたくて選んだんじゃない
ほかにできる仕事がなかったんだ

120 :デフォルトの名無しさん:2013/04/07(日) 20:12:24.16
えー、でもプログラムの仕事、楽しいじゃん。
これ以外は考えられないよ。

121 :デフォルトの名無しさん:2013/04/07(日) 20:16:34.77
それはお前が若いからだ

122 :デフォルトの名無しさん:2013/04/07(日) 20:16:55.05
コード書くのは好きだからいいんやけどね
書類作ったり営業したりがもう最悪
ニートになりたい

123 :デフォルトの名無しさん:2013/04/07(日) 20:22:50.29
土方だとつまんないかもだね。
自分で自分の仕事を決められる立場にある人間が、自分で決めて遂行するなら、おもしろそうだな。

124 :デフォルトの名無しさん:2013/04/07(日) 20:25:46.54
>>122
自分も書類書くの面倒!!
アジャイルプログラミングだ、と(心の中で)言い訳してコードばっかり書いてるw

125 :デフォルトの名無しさん:2013/04/07(日) 20:26:08.41
大企業の社員さんには出来ない主張も、俺みたいな外部の業者には平気で出来て
それが結構通るから面白い
そんなわけで大概言語は自分で選べてる

126 :デフォルトの名無しさん:2013/04/07(日) 20:26:38.35
>>123
こんなことできるよ!ってプログラム動かして上の人とか営業さんに見せると喜んでくれるから楽しいよ。

127 :デフォルトの名無しさん:2013/04/07(日) 20:29:16.95
>>126
おおー、珍しく前向きな意見だね。

128 :デフォルトの名無しさん:2013/04/07(日) 20:31:28.86
>>127
珍しくw

まー、多くの現場では押し付け的にあれやれこれやれ早くやれで大変だよね・・・。
それも大事だけど、もっとやる気出るようなリーダーシップというか人間性がない人が多いような気がするよ・・・。
悲しいことにね・・・。

129 :デフォルトの名無しさん:2013/04/07(日) 20:32:03.97
実際は「こんなことーー(1時間経過)ーー出来るよ!」だからな
一瞬で出来ないと営業に出かけてしまう

130 :デフォルトの名無しさん:2013/04/07(日) 20:33:04.86
>>129
ワロタw

131 :デフォルトの名無しさん:2013/04/07(日) 20:59:10.83
なぜ客の前でデモすると突然バグるのか

132 :デフォルトの名無しさん:2013/04/07(日) 20:59:40.09
>>131
法則みたいなもんだw

133 :デフォルトの名無しさん:2013/04/07(日) 21:00:26.79
そりゃお前、同僚がバグしこんでんだよ。嫌われてんだろうな

134 :デフォルトの名無しさん:2013/04/07(日) 21:48:02.03
>>131
どう考えてもマーフ(ryだな

135 :デフォルトの名無しさん:2013/04/07(日) 21:57:10.42
[参考] ベンチマーク - FOR-NEXT10億回ループ ver1.04 page 1/2

(表1)ベンチマークテスト結果(数字が小さいほど速い)

                        MASM32 Visual  Visual  Visual  Java   Dark   AGK   Basic4GL 99BASIC
                              Basic  C++   C#   Script  BASIC
----------------------------------------------------------------------------------------------------
PC(CeleronD2.66GHz)[sec]       0.7828  2.445  2.821   3.973   7.772  20.853  65.423  285.703  1532.0
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MASM32を1とする相対倍率        1.0   3.123  3.604   5.076   9.928  26.638   83.575  364.975  1957.0
----------------------------------------------------------------------------------------------------
Nexus7(Tegra3)1.3GHz[sec].       -----   -----  -----  -----  36.480 -----   320.18   -----   -----
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MASM32を1とする相対倍率.       -----   -----  -----  -----  46.601 -----   409.01   -----   -----
----------------------------------------------------------------------------------------------------
iPhone4S(Cortex-A9)800MHz[sec]  -----   -----  -----  -----  36.521 -----   (※注)  -----   -----
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MASM32を1とする相対倍率        -----   -----  -----  -----  46.654 -----   (※注)  -----   -----
----------------------------------------------------------------------------------------------------
(※注)iPhone版AGKターゲットエミュレーターはビデオストリームのため除外。

136 :デフォルトの名無しさん:2013/04/07(日) 21:57:49.08
[参考] ベンチマーク - FOR-NEXT10億回ループ ver1.04 page 2/E

(表2)ランキング表(数字が小さいほど速い)

                    開発環境     タイム  MASM32を1とする
                              [sec]      相対倍率
-----------------------------------------------------------------
PC(CeleronD2.66GHz).      MASM32.     0.7828         1.0
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PC(CeleronD2.66GHz).      Visual Basic.   2.445          3.123
PC(CeleronD2.66GHz).      Visual C++    2.821          3.604
PC(CeleronD2.66GHz).      Visual C#      3.973       5.076
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PC(CeleronD2.66GHz).      JavaScript    7.772         9.928
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PC(CeleronD2.66GHz).      DarkBASIC   20.853         26.638
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nexus7(Tegra3)1.3GHz      JavaScript.   36.48         46.601
iPhone4S(Cortex-A9)800MHz JavaScript.   36.521         46.654
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PC(CeleronD2.66GHz).      AGK       65.423         83.575
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PC(CeleronD2.66GHz).      Basic4GL.   285.703       364.975
Nexus7(Tegra3)1.3GHz      AGK.      320.187       409.01
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PC(CeleronD2.66GHz).      99BASIC.   1532.0         1957.0
-----------------------------------------------------------------

137 :デフォルトの名無しさん:2013/04/07(日) 22:21:37.70
>>135-136
これいつ測ったベンチなんだよ……比較対象がBASICって……
単なる空for文なら最適化で消されかねないから何か書いたんだろうけどそれは一体何……
そもそもソースが提示されていない時点で再テストすらできない……

138 :デフォルトの名無しさん:2013/04/07(日) 22:43:42.73
典型的なベンチマーク厨

139 :デフォルトの名無しさん:2013/04/07(日) 22:49:13.92
[参考] ベンチマーク - FOR-NEXT10億回ループ(CeleronD2.66GHz)

Visual C++ - 2.821秒(ループ回数を100倍にしてタイムを100で割った数字)

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]) {
 int j,k;
 printf("START\n");
 for(k=0; k<100; k++) { for(j=0; j<1000000000; j++) {} }
 printf("END\n");
 return 0;
}

140 :デフォルトの名無しさん:2013/04/07(日) 22:55:16.07
あ、ソース等見つけた。ここが元ネタか……
http://kohada.2ch.net/test/read.cgi/pcnews/1365242417

でもループだけって……せめて行列計算とかさせろよと

141 :デフォルトの名無しさん:2013/04/07(日) 23:27:47.29
俺の環境では
 C++ 259ms
 C# 2748ms
 VB 3817ms

auto v = 0ULL;
auto st = std::chrono::system_clock::now();
for ( auto i = 0; i < N; i++ ) {
 for ( auto j = 0LL; j < 1000000000LL; j++ ) {
  v += j;
 }
}
auto et = std::chrono::system_clock::now();

142 :デフォルトの名無しさん:2013/04/07(日) 23:29:31.35
>>141
やっぱC++はすげぇぜ・・・。
スーパーサイヤ人だな。

143 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/07(日) 23:30:47.19
>>141
ベンチマークで余計な最適化やると意味ないよw

144 :141:2013/04/07(日) 23:35:30.56
>>143
最適化外したら意味ないでしょ。
最初、debug=3秒、release=0秒になったから
仕方なくv+=jを加えてvの結果を出力
するようにしたらこうなった。
vの計算結果が表示されてるからループは
してる筈。

145 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/07(日) 23:37:44.94
>>144
Nって何の数字だ?

適当に書いてもちゃんと見てるぞw

146 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/07(日) 23:41:03.05
autoも怪しいなw

147 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/07(日) 23:50:46.07
[参考] ベンチマーク - FOR-NEXT10億回ループ(CeleronD2.66GHz)

MASM32 - 0.7828秒(ループ回数を100倍にしてタイムを100で割った数字)

      fn     MsgboxI,hWin,"START",ustr$(eax),MB_OK,500
      MOV  EBX,100
SELF2: MOV  ECX,1000000000
SELF:   LOOP SELF
      DEC  EBX
      JNZ   SELF2
      fn     MsgboxI,hWin,"END",ustr$(eax),MB_OK,500
- - - - - - - - -

フツーにこれより速くなるコトはないからなw

ネタは挙がってんだぜ?w”

148 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/07(日) 23:51:40.27
ALIGN 16ぐらい付けても変わらないとは思うけどなw

149 :141:2013/04/08(月) 00:05:49.31
>>147 はいはい。Visual C++ 2012, Core-i7 3632QM 2.2GHz
#include <cstdio>
#include <chrono>
static const int N = 10;
int main() {
auto v = 0ULL;
auto st = std::chrono::system_clock::now();
for ( auto i = 0; i < N; i++ ) {
for ( auto j = 0LL; j < 1000000000LL; j++ ) {
v += j;
}
}
auto et = std::chrono::system_clock::now();

std::printf("%llu\n", v);
std::printf("%.1fms, %.1f ms\n",
std::chrono::duration_cast<std::chrono::milliseconds>(et - st).count() * 1.0,
std::chrono::duration_cast<std::chrono::milliseconds>(et - st).count() * 1.0 / N);
std::getchar();
}

Nが一桁間違えてたけど
平均取るための回数だから大目に見てね。
そちらより時間が短いのは実行環境の違いであって、
同一環境でアセンブラよりC++が速いなんて言わないよ。
ただベンチは64ビットでやろうよ。

150 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 00:11:19.33
>>149
Nが整数ってのは怪しいなw
floatで取れw

3632QMって…あ、聞いちゃ不味かったかw

151 :デフォルトの名無しさん:2013/04/08(月) 00:13:45.65
ワッキーちゃん芝刈り機の出番

152 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 00:16:57.09
3632QMってPassMarkで7000、CeleronD2.66GHz(260)の27倍か。

つまり… C++ 259ms → *27 = 6.993秒w

PC(CeleronD2.66GHz).      Visual C++    2.821          3.604

…何やってんだかw

153 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 00:17:56.23
こういう時は計算の速い俺の方が有利だからなw

154 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 00:21:19.12
CPUメーター付けてないと内部動作見えてないかもな…。

155 :デフォルトの名無しさん:2013/04/08(月) 00:42:34.85
>>152
あいやーだな

156 :デフォルトの名無しさん:2013/04/08(月) 00:56:27.85
>計算の速い俺の方が有利だからなw
ワロタ
一定の条件下での言語比較なのに
俺の方が有利とか何だよw

157 :デフォルトの名無しさん:2013/04/08(月) 01:34:21.28
>>147>>139と等価な処理じゃないから正しい比較になってないよ(>>147は減算して0との比較)
この流れは処理結果が同じなら異なるロジック・アルゴリズムで比較してもいいというものではないよね

158 :デフォルトの名無しさん:2013/04/08(月) 01:51:31.09
今ホットなベンチ
・びす太で実行
・今時セレロンD
・まさかの空ループ ←ポイント
・最適化は無しで

159 :95:2013/04/08(月) 03:21:41.12
普通なことを普通に書いても‥‥
とか、具体的に
行列計算で普通にfor() を使って書いても‥‥
とか何か目的、いやデモしたい、デモして皆に見せびらかしたい理由とかあるよね、普通。そこんとこはっきりさせてよ、なぜ言語別でデモするのかさぁ
CPUを新しいのがいいね最低でも砂橋とかネハでもいいけどさ

変なのつれて来てごめんね

160 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 05:21:52.56
>>155-158
まず1回でまとめて書く癖を付けようw
ムダだから(笑)

>(>>147は減算して0との比較)

よく気が付いた、感動したw

>今ホットなベンチ
>・びす太で実行
>・今時セレロンD
>・まさかの空ループ ←ポイント
>・最適化は無しで

誰かさんの安物3632QM(←まずありえないw)には負ける(アハ♪”

161 :デフォルトの名無しさん:2013/04/08(月) 05:35:29.82
また痛いのが常駐してるな…

162 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 05:38:59.23
んー、DarkBASICよりVC++の方が速いと言う結果だから仕方ないな。

ここに常駐してVC++を学習してやろう(笑)

# 俺がちゃんと吟味してやる(ゲラゲラ

163 :デフォルトの名無しさん:2013/04/08(月) 06:53:51.73
>>160 >>162
>>159

164 :デフォルトの名無しさん:2013/04/08(月) 07:41:01.52
コンソーレのキチガイは巣に帰れよ

165 :デフォルトの名無しさん:2013/04/08(月) 07:56:34.74
マをしてるとこういう精神状態になることもしばしばあるだろう

166 :デフォルトの名無しさん:2013/04/08(月) 08:13:05.55
ねーよ
一緒にしてくれるな

167 : ◆QZaw55cn4c :2013/04/08(月) 08:28:28.42
>>162
>ここに常駐してVC++を学習してやろう(笑)
君にC++を理解できるかな
成果を期待しているよ

168 :デフォルトの名無しさん:2013/04/08(月) 18:01:40.60
> ライブラリをinlucdeする??
とか言ってるクソ野郎のいう事じゃないな。

169 :デフォルトの名無しさん:2013/04/09(火) 00:06:56.08
CPUメーターがどうのとか言ってたり、別のベンチマークの結果を使って実行時間に掛け算してたりしてて、
なんじゃこりゃ、って思ってたんだが、単なる基地外か。まじめに考えて損した。

170 :デフォルトの名無しさん:2013/04/09(火) 08:34:27.67
他人の作ったCプログラム(C++ではない)を適当なnamespaceに閉じ込める簡単な方法ないでしょうか

namespace foo
{
#include "foo.c"
}

だけで大丈夫なんでしょうか

171 :デフォルトの名無しさん:2013/04/09(火) 11:51:53.45
>>170
それでコンパイルとリンクが通ればok
通らなければ諦める

172 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 22:38:35.28
なるほどな、スコープ(”::”)ってグローバル変数なんだな。

始めからそう書けば分かりやすいw

173 :デフォルトの名無しさん:2013/04/09(火) 22:40:08.76
>>172
プッ、そんなことも知らないのかwww

174 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 22:44:13.38
>>173
たぶん概念は知ってるけど専門用語が違うからC++のマニュアルを見てもサッパリ分からんw

おまえみたいにまったく知らない方が覚えやすいかもな(笑)

175 :デフォルトの名無しさん:2013/04/09(火) 22:45:58.40
C++でなくてCに出来る関数は別ファイルにしてCとして分割コンパイルした方が速くなるのだろうか

hoge.c
hoge.cpp

に分けるか
全部

hoge.cpp

のファイルにまとめてC++としてコンパイルするか?

176 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 22:50:16.24
>>175
CにあってC++にないものと言えば?

177 :デフォルトの名無しさん:2013/04/09(火) 23:24:27.14
>>175
名前空間くらい使おうぜ

178 :デフォルトの名無しさん:2013/04/09(火) 23:26:58.28
>>176
restrictポインター
複素数三角関数

179 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 23:54:41.21
>>178
restrictポインターって用途が思い浮かばないけど、マルチタスク処理で使えそうだな。
他のタスクで使ってる変数領域をロックする場合とか。

複素数はマニア以外使わないと思う。

180 :デフォルトの名無しさん:2013/04/09(火) 23:57:20.02
179 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

181 :デフォルトの名無しさん:2013/04/10(水) 00:27:45.79
複素数なんてごく日常的に使ってるんだが
なんなの?このバカ

182 :デフォルトの名無しさん:2013/04/10(水) 00:31:13.89
複素数三角関数なんて
指数関数と三角関数の組み合わせで
簡単に実装できるがな

183 :デフォルトの名無しさん:2013/04/10(水) 00:38:31.32
>>182
それはアセンブラあればcは要らない
ぐらいのアホな発言

184 :デフォルトの名無しさん:2013/04/10(水) 00:43:52.05
簡単に実装できる2、3個の関数の有無なんて誤差の範囲だよ

指数関数と言うか、双曲線関数だったっけか

185 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 00:48:38.73
逃げ切れそうにないなw

186 :デフォルトの名無しさん:2013/04/10(水) 00:55:19.46
まったくだ。
変数とgoto有れば構造体も関数も要らない。
アセンブラ最強。

187 :デフォルトの名無しさん:2013/04/10(水) 01:38:42.96
Web系であんまりC++触る機会なかったんだけど
勉強がてらnodeかブラウザのコード読みたいと思ってるんだが何がいいだろう
モダンな実装という噂の v8, nodeのコアのlivuvあたりを考えてたんだが重すぎる気がする

コードベース少なくて参考になるのって言ったらどれがお勧めですか
3000行より短いぐらいがいい

188 :デフォルトの名無しさん:2013/04/10(水) 01:41:31.52
3000行以下とか読んだうちにはいんねーよ

189 :デフォルトの名無しさん:2013/04/10(水) 02:41:50.68
boost読めば

190 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 06:50:15.17
>>187
我流でやった方がいいよ。

つーか、俺は今からそうするけどw

会社で決められたコーディングとかインデントスタイル(笑)とか指定されてる場合は会社の言うとおりにしておく。

191 :デフォルトの名無しさん:2013/04/10(水) 09:34:27.25
>>190
あ、それ同意。
所詮会社ごときで本気を出す必要はない。

192 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 09:38:54.35
>>191
サラリーマンは変わったヤツが多いからなw

アセンブラでインデント付けろとか言う会社は早く辞めたほうがいい(笑)

193 :デフォルトの名無しさん:2013/04/10(水) 09:43:52.27
>>192
>アセンブラでインデント付けろとか

そいつ有名な某氏だろw

194 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 09:47:12.78
>>193
どこにでもいそうな変わり者レベルってなところかw

あとFORループ外してコピー&ペーストで1024個並べるヤツとか…w”
(フツーにマクロで書けよw)

195 :デフォルトの名無しさん:2013/04/10(水) 09:49:02.90
>>194
こういうのは?

仕様が60fpsなのに最適化できないから30fpsに仕様変更するとか。

196 :デフォルトの名無しさん:2013/04/10(水) 09:54:44.43
stlに複素数あるけど
あれってsin cosできないの?

197 :デフォルトの名無しさん:2013/04/10(水) 10:59:20.72
>>196
C++11の規格準拠ならオーバーロードされてるはずだが(26.4.8)別の話なのかな?

198 :デフォルトの名無しさん:2013/04/10(水) 14:39:07.51
C++98のころからあったような

199 :デフォルトの名無しさん:2013/04/10(水) 14:42:53.33
http://www.cplusplus.com/reference/complex/

200 :デフォルトの名無しさん:2013/04/10(水) 14:47:56.66
http://en.cppreference.com/w/cpp/numeric/complex

201 :デフォルトの名無しさん:2013/04/10(水) 15:45:52.68
なにげにC99は数学関数充実させてるな
FPUでネイティブサポートされてないから自作しても大して変わらんけど

202 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 17:02:34.15
>>195
いわゆる ” 糞ゲー ” の典型的なパターンだなw

ムダな背景外してでも60fpsにすべきだろうな。

まあ、30fpsとか言い始めた時点で億単位のプロジェクトは赤字確定。
(結構頭がアレなヤツ多いからなw)

203 :デフォルトの名無しさん:2013/04/10(水) 17:16:54.07
ワロタ

204 :デフォルトの名無しさん:2013/04/10(水) 17:17:30.67
>>202
自己紹介乙
というか無職だったなお前

205 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 17:33:46.72
>>204
別におまえに向けて書いたつもりじゃあないんだけどな…あ、思い当たるフシがあるんだろうな(ゲラゲラ

206 :デフォルトの名無しさん:2013/04/10(水) 19:13:47.89
コンソーレは質問スレならデカい顔が出来る!って判断したのかw邪魔だから死ねよw

207 :デフォルトの名無しさん:2013/04/10(水) 19:15:30.97
キチガイ糞コテに構うなよ

208 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 19:21:58.88
おまえらみたいなザコキャラはどうでもいいからw

209 :デフォルトの名無しさん:2013/04/10(水) 20:04:07.60
よおキチガイニート
病室から抜け出すなよ(笑)

210 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 20:08:13.32
>>209
外の世界にいるのが俺で、中にいるのがおまえだよw

長いコトいるとそっちが外の世界になるんだろうけどさ(ゲラゲラ

211 :デフォルトの名無しさん:2013/04/10(水) 20:34:02.72
つ[鏡]
ったく一日中どこから書いてんだよ
スマホからってのはなしで

212 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 22:20:11.48
架空のキャラに大人気だなw

213 :デフォルトの名無しさん:2013/04/10(水) 22:36:12.25
ここもゴミコテの隔離スレになったか

214 :デフォルトの名無しさん:2013/04/10(水) 22:57:26.49
またスレが一つ死んだ
逝こうここもじき腐海に沈む‥‥‥

215 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 22:57:36.45
まずゴミスレを自覚しようなw

216 :デフォルトの名無しさん:2013/04/10(水) 23:07:45.78
透明あぼーんしとけよ
いないのと同じになるから

217 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 23:44:00.96
アハアハ〜♪”

218 :デフォルトの名無しさん:2013/04/10(水) 23:48:46.37
あぼーんしたらすっきりした
ゴミは視界に入れないに限る

219 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 23:49:36.56
弱虫w

220 :デフォルトの名無しさん:2013/04/11(木) 00:13:02.85
YouTubeみたいな動画共有サイトを作りたいと思っているのだが、
まず、どんなことから勉強すれば良いのかすら分からない。
なので、YouTubeみたいな動画共有サイトを作るためには、
どんなことを勉強しないと駄目なのかを全て教えてください。

221 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/11(木) 00:58:29.00
レベル落ちたなw

222 :デフォルトの名無しさん:2013/04/11(木) 01:02:06.98
>>220
ffmpegの使い方とWeb用の開発言語だな。PHPとかHTML5とか。C++で特に何も書かなくても作れると思うよ。

223 :デフォルトの名無しさん:2013/04/11(木) 01:02:30.78
こいつはいくつマルチするんだろう・・・

224 :デフォルトの名無しさん:2013/04/11(木) 01:15:42.75
>>222
ハードとソフトとネットワークの高度な知識はいるだろ。
YouTubeはメチャクチャ負荷が高い。
それをいかに低減させていくかが重要課題。

225 :デフォルトの名無しさん:2013/04/11(木) 02:05:42.58
>>224
YouTube並のサイトを作るって話なの?>>220の質問レベルからして、身内向けに動画をアップしたら勝手にエンコしてブラウザで見れるサイトを作りたい、とか
そういうレベルかと勝手に思っちゃった。
動画の取り扱いは、キリないよね。色々工夫しないと難しい問題ばっかり。

226 :デフォルトの名無しさん:2013/04/11(木) 02:07:51.81
コイツが動画サイト作れるようになるころには数百MBの動画くらいなら画像のように送れるようになってるよw

227 :デフォルトの名無しさん:2013/04/11(木) 13:14:13.66
>>225
YouTubeを(プライベート設定で)使えよ。

228 :デフォルトの名無しさん:2013/04/11(木) 15:39:01.95
>>227
それ自分に言われてもなあ…

229 :デフォルトの名無しさん:2013/04/11(木) 22:05:35.16
>全て教えてください
こんなこと言う奴が本気で訊いてる訳なし

230 :デフォルトの名無しさん:2013/04/11(木) 22:13:08.05
ネタにマジレスする必要ないでしょ
だいたいスレ違い、というか板違いだし

「金払って業者に作ってもらえアホ」位の返事がちょうどよろしいかと

231 :デフォルトの名無しさん:2013/04/11(木) 22:30:25.78
まぁプログラムだけの問題じゃないからなぁ

232 :デフォルトの名無しさん:2013/04/11(木) 22:35:04.07
基地害御用達の糞スレ

233 :デフォルトの名無しさん:2013/04/11(木) 23:03:43.78
C++erはキチガイ

234 :デフォルトの名無しさん:2013/04/11(木) 23:04:58.09
c++自体が基地外オナニー言語。

235 :デフォルトの名無しさん:2013/04/11(木) 23:10:44.18
褒め言葉だからそれ

236 :デフォルトの名無しさん:2013/04/12(金) 05:30:13.98
>>220
真面目に答えよう。初歩の初歩としてWebサーバー構築とは、どういうものかが判らないと無理だ。
そして、Webで調べずにここで聞いてる時点で君が、その目的を達成できることはないだろうと想像できる。

237 :デフォルトの名無しさん:2013/04/12(金) 08:09:45.75
>Webで調べずにここで聞いてる時点で君が、その目的を達成できることはないだろう
まさに的確な指摘だな。

ここで聞いてても答えが出てくるわけないもんな。素人しかいないから。

238 :デフォルトの名無しさん:2013/04/12(金) 10:19:18.90
windef.hで#define maxとかホント死んでくれ・・・

239 :デフォルトの名無しさん:2013/04/12(金) 21:11:34.40
まぁでも自分が死んじゃったほうがずっと早いよ

240 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/04/12(金) 21:27:46.06
#include <windows.h>
#undef max
#undef min

241 :デフォルトの名無しさん:2013/04/12(金) 21:46:30.10
>>240 ← 嘘つきなので初心者はまずこいつをNG設定しましょう

242 :デフォルトの名無しさん:2013/04/12(金) 21:48:32.39
#if 初心者
#undef >>240
#endif

243 :デフォルトの名無しさん:2013/04/12(金) 22:11:27.96
>>240
結局そうした
他にいいやり方があったら教えてくれ頼む

244 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/04/12(金) 23:18:43.92
#include <windows.h>
...
#include "unmaxmin.h"
...ここでSTLのmax/minを使う...
#include "maxmin.h"
...ここでWin32のmax/minを使う...

"maxmin.h"と"unmaxmin.h"の中身は自分で考えよう

245 :デフォルトの名無しさん:2013/04/12(金) 23:29:16.30
>>243
#define NOMINMAX
とか

246 :デフォルトの名無しさん:2013/04/12(金) 23:33:42.47
とかじゃなくてmin/maxがdefineされてない弊害を消す効力もあるかも(将来なるかも)しれないわけだから
NOMINMAXしか選択肢は無いよ

247 :デフォルトの名無しさん:2013/04/12(金) 23:46:05.59
そもそもなんでmin/maxがマクロで定義されてるんだろうな。
template使うとか考えなかったんだろうか。

248 :デフォルトの名無しさん:2013/04/12(金) 23:51:40.01
うるさい黙れ!

249 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/12(金) 23:52:58.06
【社会】 「ら抜き言葉を使う人は、知的レベル低い。採用しない」「ら抜きの方が、可能か受け身かすぐ判るのに」…面接の現場で★4
http://uni.2ch.net/test/read.cgi/newsplus/1365717932/l50

・「R25」の調べによると、面接経験豊富な30〜40代の上司世代がイラつく「若者言葉」で最も多かったのは「見れた」
 「食べれた」などの「ら抜き言葉」だったそうだ。「ものすごく幼稚な印象を受ける」「いちいち気になって、話の内容が
 頭に入ってこない」など、かなり厳しい意見も出ているが、果たしてそんなにいけないことなのか。

 社会人2年目の女性Aさんは、あるメーカーの面接で「ら抜き言葉」を注意されたことを、いまだに強く根に持っている。
 学生時代にトヨタの本を読み、海外旅行で「3現主義」の重要性を感じたという話をしたときのことだ。
 彼女は仕事への意気込みについて、「もし入社できたら、海外の生産現場に行かせていただきたい。そうしたら現場を回って、
 見れるものは何でも見てきたいと思います!」と伝えたそうだ。すると面接担当者から、こう冷ややかに返されたという。

 「君さ、それを言うなら“見られるものは”だよね。海外の前に日本語勉強したら?」
(以下省略)
 http://news.livedoor.com/article/detail/7581420/

 一方で、「ら抜き言葉」は人材をフィルタリングする上で、それなりに役に立つという考えを持つ人もいる。あるITベンチャー
 企業の人事担当者は、言葉遣いから「学生時代にどの程度の知的レベルの集団にいたか」を推測する材料にしているという。
 「他人と会話をしていれば、普通は『ら抜き言葉』に違和感を抱いて修正できるはず。それができていないということは、
 その程度のレベルの集団に属していたという判断をしてしまいます。コミュニケーション能力にも関わりますし、ハイレベルな
 プログラマーを除けば採用に当たって考慮に入れざるを得ません」

 学歴だけでなく、日常的に知的水準の高い集団に属している人は意欲も高く、自分の頭でものごとを考える習慣が
 あるという。言葉遣いひとつでそこまで見透かされることを考えると、やはり油断はできないのかもしれない。(以上)
- - - - - - - - - - -

見れたぁー? 作れたぁー? アハアハ〜♪”

250 :デフォルトの名無しさん:2013/04/13(土) 00:04:39.46
>>249
作れたはら抜きじゃない

251 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/13(土) 00:05:34.64
ギャハハ!!wwwww”

252 :デフォルトの名無しさん:2013/04/13(土) 00:11:24.91
糞ニートが発狂している↑

253 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/13(土) 00:15:44.87
見れたぁー?w”

254 :デフォルトの名無しさん:2013/04/13(土) 00:19:57.86
発狂カキコ

255 :デフォルトの名無しさん:2013/04/13(土) 00:22:55.91
番号飛びまくってるけどまた奴が来てるのか

256 :デフォルトの名無しさん:2013/04/13(土) 00:33:48.54
やっぱりC++erはキチガイだな

257 :デフォルトの名無しさん:2013/04/13(土) 02:23:03.54
んなこたー、逸般的常識

258 :デフォルトの名無しさん:2013/04/13(土) 02:54:18.47
>>243
int max = std::numeric_limits<int>::max(); // エラー
int max = (std::numeric_limits<int>::max)(); // OK

259 :デフォルトの名無しさん:2013/04/13(土) 06:10:50.96
C++ができる以前からあるからな
しょうがない

260 :─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/13(土) 08:39:22.34
>>258
自作自演楽しい?w”

261 :デフォルトの名無しさん:2013/04/13(土) 11:45:00.50
>>260
ああ、最高さ!

262 :デフォルトの名無しさん:2013/04/13(土) 11:46:00.66
自作自演と他人の不幸は蜜の味。

263 :デフォルトの名無しさん:2013/04/13(土) 11:52:00.73
>>262
そう思うのは朝鮮人だけ

264 :デフォルトの名無しさん:2013/04/13(土) 12:16:11.11
【IT】 「C言語やJavaを使う人は採用しない」「AGKやDarkBASICの方が生産効率が高い」就職活動
http://kohada.2ch.net/test/read.cgi/pcnews/1365242417/139-141

コンソール研究所は13日、C言語やJavaを使う学生を採用しない方針を固めた。

これは昨今のソフトウェア開発現場において社内研修期間を嫌う企業や官公庁の意向を取り入れたもので、
「 卒業=即戦力 」 が求められる新時代への突入を明確にしたものである。

たいていの面接官は ” 学生時代にどんな部活に所属していましたか? ” などと聞くが、それは時代遅れと
なったようだ。

また、C言語やJavaのスキルを問うものに対しても、「 実務経験がなければ意味がない 」 と言う現場の声も
反映した。

コンソール研究所の開発現場から一人の声を拾ってみた。
(以下ソース参照)

265 :デフォルトの名無しさん:2013/04/13(土) 13:41:13.51
>>264
これの元ネタってなに?

266 :デフォルトの名無しさん:2013/04/13(土) 14:29:13.12
妄想です

267 :デフォルトの名無しさん:2013/04/13(土) 15:28:53.26
このスレ馬鹿しかいないの?

268 :デフォルトの名無しさん:2013/04/13(土) 15:43:31.72
IDないからね。

269 :デフォルトの名無しさん:2013/04/13(土) 19:51:10.68
こんな状態でも未だに質問しようと思うとかね
そんな判断力じゃプログラムもいつまで経っても上達しないはずだわ

270 :デフォルトの名無しさん:2013/04/13(土) 22:53:12.38
あれ?番号飛んでる?
何があった?

271 :デフォルトの名無しさん:2013/04/13(土) 22:54:22.71
>>263
>そう思うのは朝鮮人だけ

北朝鮮ミサイルによる国難の時に
地震なんかで騒いでるのは朝鮮人だけ

272 :デフォルトの名無しさん:2013/04/13(土) 23:10:39.16
15時から19時の間のレスが消えた感じ?
土曜の夕方にしてはレス少なくないか

273 :デフォルトの名無しさん:2013/04/13(土) 23:44:00.02
>>272
感想はブログに書いてろks

274 :デフォルトの名無しさん:2013/04/14(日) 00:49:59.28
じゃあさ。
仲直りの印として、電車の中でUFO焼きそばを食うOFFでもしないか?

275 :デフォルトの名無しさん:2013/04/14(日) 11:04:21.96
昨日の夕方の10レスぐらい削除されてるのに
>>263
だけ残ってるの何でなんだろな

276 :デフォルトの名無しさん:2013/04/14(日) 13:31:16.09
>>275
運営が削除依頼してる奴の奴隷に成り下がったからだよ
運営には今やもう削除するしないの判断力はないよ

277 :デフォルトの名無しさん:2013/04/14(日) 13:32:29.73
>>275
専用ブラウザー?

278 :デフォルトの名無しさん:2013/04/14(日) 13:34:09.32
どうせ専用ブラウザーのNG設定の正規表現を書き間違えたバカのたわごと

279 :デフォルトの名無しさん:2013/04/14(日) 18:02:05.94
あれ?ミサイルまだ?

280 :デフォルトの名無しさん:2013/04/16(火) 05:05:19.94
嫌韓さんは朝鮮戦争を願ってる人が多いようだ
朝鮮といえば大阪
大阪は朝鮮と結びつきが強い
大阪といえば大阪都構想
なぜ大阪府が大阪都になりたがってるか
それは財政破綻を先送りできるから
「都」は公債発行の限度が高くなっている
大阪府のままだともうすぐ破産扱い
大阪都になればしばらく大丈夫
借金の限度額を上げるために名前を変えようとしている
浅ましいでしょう大阪って
そんな大阪に我々日本人ができることといえば
大阪都構想に反対すること

281 :デフォルトの名無しさん:2013/04/17(水) 23:48:24.17
boostエラーでる

282 :デフォルトの名無しさん:2013/04/17(水) 23:48:54.08
boostのインストールしたと
思ったんだが
どうやら失敗したみたいです

283 :デフォルトの名無しさん:2013/04/17(水) 23:52:11.67
MinGWに
boostのインストールしたと
思ったんだが
何故か失敗してるぞ

284 :デフォルトの名無しさん:2013/04/18(木) 02:50:54.68
>>283
coLinuxだとどうだ?

285 :デフォルトの名無しさん:2013/04/18(木) 03:25:19.63
>>284
使ったことないです

286 :デフォルトの名無しさん:2013/04/18(木) 03:36:56.80
MinGWはいろんなフリーウェアの対応が悪いっつーか
ゲテモノ?

287 :デフォルトの名無しさん:2013/04/18(木) 12:53:30.31
boostくらいなら入ったような記憶が
といっても4年ぐらい前の記憶なので今だとどうだろう…(試してない

288 :デフォルトの名無しさん:2013/04/18(木) 14:51:39.29
まずコマンドが
正しいのかわからない

bjam.exe -sTOOLS=mingw --toolset=gcc --stagedir="配置ディレクトリ\boost_1_53_0"
--without-python --without-mpi --build-type=complete variant=debug,release
link=static threading=multi runtime-link=static release debug stage -j4

289 :デフォルトの名無しさん:2013/04/18(木) 14:52:27.17
これで合ってますか?
コマンドが間違ってるのかも

これでboost のDLLが出来るらしいんだが
実行しても出来ていないし・・・

290 :デフォルトの名無しさん:2013/04/18(木) 15:17:11.49
ちなみに bjam.exe は正規サイトから
ダウンロードしてきました。

291 :デフォルトの名無しさん:2013/04/18(木) 15:18:11.13
>>289
そして、dllが出来ていないので
当然ながら、boostのライブラリを使おうとしてもコンパイルエラーになります

292 :デフォルトの名無しさん:2013/04/18(木) 15:18:56.77
vc++2008は
何だかうまくいったんだけど
あれは最初からboostが入ってるのかな?

293 :デフォルトの名無しさん:2013/04/18(木) 16:18:06.26
うんこ

294 :デフォルトの名無しさん:2013/04/18(木) 17:56:22.21
rel_ops 爆発しろ! bool 決め打ちしやがって

295 :デフォルトの名無しさん:2013/04/18(木) 18:22:18.39
>>288,289
link=staticでは静的ライブラリのビルドでdllはできないだろ

296 :デフォルトの名無しさん:2013/04/18(木) 18:29:13.84
>>295
そうなの?

コマンドが間違ってるって
ことですか

297 :デフォルトの名無しさん:2013/04/18(木) 18:36:42.19
オプション指定の意味も解らずビルドしようとしてるのか・・・

298 :デフォルトの名無しさん:2013/04/18(木) 19:36:26.11
少しは自分で調べろ

299 :デフォルトの名無しさん:2013/04/18(木) 21:16:52.78
>>297
ゆとり・へたれ時代はググってコピペ出来れば良い。意味なんて知らなくて良い
プログラムだってコピペで作る

300 :デフォルトの名無しさん:2013/04/18(木) 21:18:46.30
よくコピペでプログラム作るって聞くけど
どんな単純なアプリならコピペで作れるんだよ

301 :デフォルトの名無しさん:2013/04/18(木) 21:20:06.18
cの基本だけわかってたら8割方コピペでそれ繋ぐだけで作れるって意味でしょ

302 :デフォルトの名無しさん:2013/04/18(木) 21:27:46.99
wchar_t str[ 256 ];
swprintf( str, 256, L"%f", m_pObj->GetFloatVal() );
DrawText( str );

こんな感じのコードをもっとエレガントに書けないでしょうか?
256といった適当なサイズのリテラルを書くことなく、
3行も使わずに、ラムダ式みたいに関数の引数内で直接文字列に変換しちゃうような、
そんな書き方はできないのでしょうか?

303 :デフォルトの名無しさん:2013/04/18(木) 21:36:12.31
本気で質問してるならエラーが出てるのか、出てるならどんなエラーかくらい説明しろよ。

304 :デフォルトの名無しさん:2013/04/18(木) 21:38:00.76
ごめん。303 は >288 辺りへのレス

305 :デフォルトの名無しさん:2013/04/18(木) 21:40:39.95
302は涙目だなw

306 :デフォルトの名無しさん:2013/04/18(木) 21:42:42.46
>>302
そう言う関数作ればいいんじゃね?

307 :デフォルトの名無しさん:2013/04/18(木) 21:54:18.46
頭悪そうな奴だな
大学いってなさそう

308 :302:2013/04/18(木) 22:00:17.24
>>306
そうします。
あざーした!!

309 :デフォルトの名無しさん:2013/04/18(木) 22:01:10.94
stringクラスになんでsprintfが無いんだよ

310 :デフォルトの名無しさん:2013/04/18(木) 22:03:09.22
stream 押しだからじゃね?

311 :デフォルトの名無しさん:2013/04/18(木) 22:27:21.52
ググってもよく分からなかったので質問させて下さい。

0,以上1未満の実数な一様乱数を<random>を使って発生させようとしているのですが、
秒未満の単位で変動する値で乱数を初期化してmt19937()を使う方法が分かりません。
乱数を使う位置は、main関数以外の自作関数です。再帰的に呼び出すので、
「その関数の先頭に初期化用関数を置く」ようなことはしたくないです。
また、一回その関数を呼び出してから処理が完了するのに1秒未満ということはザラなので、
time(NULL)を使う、といった手段も取れません。
解決法をご教示願います。

312 :デフォルトの名無しさん:2013/04/18(木) 22:33:08.20
>>311
ハードにもよるけどx86ならrdtsc使えばいいんじゃね

313 :デフォルトの名無しさん:2013/04/18(木) 22:38:45.83
std::random_device使えば

314 :デフォルトの名無しさん:2013/04/18(木) 22:41:38.32
まあ本当に毎回ランダムな値で初期化する必要あんのかよって気はするけどな

315 :デフォルトの名無しさん:2013/04/18(木) 22:44:13.45
再起させるんならついでに渡せばいいよね
グローバルにおいてもいいと思うし

316 :デフォルトの名無しさん:2013/04/18(木) 22:49:06.44
>>302
std::to_wstring() でいいんじゃね?

317 :302:2013/04/18(木) 23:08:18.09
>>316
うおー!神!!
できました!!
う〜ん、なんてエレガント♪
STLマンセ〜。

318 :デフォルトの名無しさん:2013/04/18(木) 23:31:35.84
>>311
そんなに頻繁に初期化しなおしてたら一様性が崩れそうだ
初期化は一回だけのがいいんじゃね

319 :デフォルトの名無しさん:2013/04/18(木) 23:32:39.14
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

#define LENGTH 1
#define SAMPLING_RATE 16000
#define NUMSAMPLES (LENGTH * SAMPLING_RATE)
int main(){
int i,t,sig,s;
int freq,amp;
double phase[SAMPLING_RATE];
signed short int x[NUMSAMPLES];
freq = 1000;
amp = 1024;
FILE *fp;
fp=fopen("white.raw","wb");
for(i=1;i<SAMPLING_RATE;i++){
phase[i] = rand(); }
for(t=1;t<NUMSAMPLES;t++){
for(s=1;s<8000;s++){
sig+=sin(2*M_PI*s*((double)t/NUMSAMPLES)+phase[s]); }
x[t]=sig;
fwrite(&amp;amp;x[t],sizeof(x[t]),1,fp); }
return 0; }
これでホワイトノイズが出来る予定なんですがプツッって音だけになってしまいます。
ここが違うという指摘があればお願いします。

320 :デフォルトの名無しさん:2013/04/18(木) 23:44:15.27
何で1から回してんの?

321 :デフォルトの名無しさん:2013/04/18(木) 23:52:27.88
>>320

iとsは0からでよかったですね
tは指定があったんで

322 :デフォルトの名無しさん:2013/04/19(金) 00:38:51.99
>>319
妄想で答えるけど、人間に聞こえる音になってないんじゃない
とりあえず確実に人間が聞こえる正弦波(1KHz)とかでプログラム組んだら

323 :デフォルトの名無しさん:2013/04/19(金) 00:50:45.85
>>319
sigがintだからsinの結果を加算しても0にしかならない

324 :デフォルトの名無しさん:2013/04/19(金) 00:54:15.98
int freq,ampを何に使う予定だった
>>323
sinの前にampが抜けている。freqはどこだろ

325 :デフォルトの名無しさん:2013/04/19(金) 01:28:04.97
>>322
すまねえ
俺の頭では理解できなかったぜ・・・

>>323
とりあえずこれを参考に頑張ってみます

>>324
freq,ampはこれとはまた別のやつで使うんで今回は放置でいいらしいっす

326 :デフォルトの名無しさん:2013/04/19(金) 01:32:38.12
なにひとつC++じゃないからスレ違いじゃないの

327 :デフォルトの名無しさん:2013/04/19(金) 02:02:25.35
>>326

書き込んだときにスレ違いに気づいたがもう手遅れだったぜ・・・

>>319
は解決しやしたんでこれにて撤収します
ありがとうございました

328 :デフォルトの名無しさん:2013/04/19(金) 04:53:09.17
>>312-318
std::random_deviceで、無事解決しました。
指摘通り、グローバル領域で1回初期化を掛けてから使用しています。

329 :デフォルトの名無しさん:2013/04/21(日) 15:49:04.57
C++において char* と int* のサイズが同じである保証はないし違っていても規格上問題ない
ここまではわかる
じゃあ不完全型はどうなるの
つまり

struct A;
struct B { A* ptr; };

はどう扱われるのか教えて

330 :デフォルトの名無しさん:2013/04/21(日) 16:01:15.70
型によってポインタの値が異なる事はあるらしいけど、
サイズも異なることがあるんだっけ?

メンバポインタは異なる事があるけど

331 :デフォルトの名無しさん:2013/04/21(日) 16:35:45.05
「char*, int*のサイズ」って、sizeof(int*) のことなの?それとも sizeof(int) のことなの?
前者なら sizeof(int*) == sizeof(char*) は保証されている、というか前提なのでは?これが違うというアーキや違ったとしたときの具体的な実装が皆目思いつかないのだが?

332 :デフォルトの名無しさん:2013/04/21(日) 17:03:06.77
ポインタサイズが一定である事 (値型に影響されないと言う事) は、前方参照の前提になるものなので、恐らく保証されていると思う。
でも、言われてみると、文書では見たこと無いな。
会社に行ったら規格書しらべてみるかな。

333 :デフォルトの名無しさん:2013/04/21(日) 17:12:29.31
http://www.kouno.jp/home/c_faq/c5.html#17
まあこれはCだけど

334 :デフォルトの名無しさん:2013/04/21(日) 17:17:03.73
メンバ関数ポインタのサイズは実際違う事があるのは確認した事がある
GCCだと確か変わらなかったけど、
VC++だと仮想継承するかどうかで変わってた

普通のポインタは不完全型のポインタを考えると
同じでないと流石にダメな気がするが、
規格でどうかと言われると出てこない

nearポインタ、farポインタに関しては規格外だし、
near/farがあるとしてもfarの有無で判別するものであって
型で判別するものではないし

335 :デフォルトの名無しさん:2013/04/21(日) 17:19:59.87
>>333
そうなると構造体へのポインタ型に関しては
void*と同じ内部構造で扱うみたいな規格があるのかな

336 :デフォルトの名無しさん:2013/04/21(日) 17:36:28.94
operator new が void* 返しじゃマズいとなると厄介だぞ

337 :デフォルトの名無しさん:2013/04/21(日) 17:37:59.40
(関数ポインタ、メンバポインタ以外の)どのポインタ型も
void*との相互変換ができるというのが規格にあったはず

338 :デフォルトの名無しさん:2013/04/21(日) 19:53:39.66
int*とchar*のサイズは違うかも試練が
struct系のポインターは全部void*と
同じサイズだろ。

339 :デフォルトの名無しさん:2013/04/21(日) 20:06:49.88
>>329
C++の場合(C++03 3.9.2 p4)
> Objects of cv-qualified (3.9.3) or cv-unqualified type void* (pointer to void),
> can be used to point to objects of unknown type.
> A void* shall be able to hold any object pointer.
> A cv-qualified or cv-unquali-fied (3.9.3) void* shall have the same representation
> and alignment requirements as a cv-qualified or cv-unqualified char*.
とあるから実質こうでなければならず
sizeof(char*) == sizeof(void*) >= sizeof(object *)

そこから考えると不完全型へのポインタのサイズはありえる最大サイズにあわせて
sizeof(void*) == sizeof(incomplete type*)

つまりvoid*(==char*)の大きさと同じになる

340 :デフォルトの名無しさん:2013/04/21(日) 20:13:44.38
// A.cpp
struct T;
void foo(T**);
void bar(T*);

T* foobar() {
 T* p;
 foo(&p);
 bar(p);
 return p;
}

// B.cpp
struct T {
 int a;
};
void foo(T**) { ... }
void bar(T*) { ... }

これが動かないといけないので
完全型かどうかでポインタサイズが変わったらまずい

構造体やクラスへのポインタサイズは一律でないと

341 :デフォルトの名無しさん:2013/04/21(日) 20:21:51.79
メモリポインタなら同じサイズなのでは

342 :デフォルトの名無しさん:2013/04/21(日) 20:48:22.13
二つの系列 codeとdataについて
sizeof(char *) == sizeof(int *) == ... etc
sizeof(void (*)()) == sizeof(char(*)()) == sizeof(int(*)()) == ... etc

そして sizeof(int *) != sizeof(void(*)())
を意識しておればいいみたいだね。
さて sizeof(void *) はどっちに属するのか?

343 :デフォルトの名無しさん:2013/04/21(日) 21:16:22.68
ポインタそのものとポインタが指すオブジェクトを混同してないか?

344 :デフォルトの名無しさん:2013/04/21(日) 22:00:51.80
>>343
それがポインタが指すオブジェクトによって、そのポインタ自体のサイズが変わるのでは?という問題、
あるいはポインタ同士の互換性を、どこまで考慮しておけばいいのか、という問題がもちあがっているんです。
多分起源は far/near だとは思いますが。

345 :デフォルトの名無しさん:2013/04/21(日) 22:41:18.28
C FAQを見る限り、far/nearは関係ないと思う
>>340を考えると構造体やクラスへのポインタのサイズは一律でないとマズいと思うが、
規格にその旨は書かれているのだろうか

346 :デフォルトの名無しさん:2013/04/22(月) 00:33:56.51
x32とx86-64アーキテクチャの違いみたいなものか。
いや違うか。

347 :デフォルトの名無しさん:2013/04/22(月) 00:37:16.94
メンバへのポインタは通常のポインタと全然意味が違うからな
それ単独では使えず、必ずthisとセットで使わないと意味がない
オフセット値でも入ってんじゃないの
知らないけど

348 :デフォルトの名無しさん:2013/04/22(月) 00:54:25.44
>>347
メンバ変数ポインタは本当にオフセット値が入ってるね
VC++はNULLのビット表現が0になるよう下駄はかせてるけど、
gccはオフセットそのままで、NULLのビット表現が-1になる

349 :デフォルトの名無しさん:2013/04/22(月) 05:19:52.84
x32なんて言い方はしない。

350 :デフォルトの名無しさん:2013/04/22(月) 07:43:41.48
>>349
いや、x32はあるよ
64bit環境で、アドレッシングだけ32bitでやろうよ!っていう変則APIセット

351 :デフォルトの名無しさん:2013/04/22(月) 11:13:47.64
gcc-4.5.3で
template< typename T > class BBB
{
template< typename T > friend class CCC;
};
とやると
error: declaration of ‘class T’
error: shadows template parm ‘class T’
となるので
template< typename T > class BBB
{
template< typename > friend class CCC;
};
とやったら出なくなりました。Tを消すのは規格的にまずいですか?

352 :デフォルトの名無しさん:2013/04/22(月) 11:55:08.47
使わなけりゃいいよ

353 :デフォルトの名無しさん:2013/04/22(月) 12:06:43.18
コンテナ erase()の質問です。
環境:gcc++ 4.4.6 CentOS6

std::list<char> list;
for(auto it=list.begin();it!=list.end();++it)
{
list.erase(it);
}
上記のコードはerase()の段階で
stl_list.h:143 _M_node=NULL になり ++itで落ちます。

コードが複雑になってくると意図せず上記をやってしまいそうなのですが
erase(it)後に++itでsegmentation faultは期待していいのでしょうか?
それとも、何らかのチェックを入れるべきでしょうか?

354 :デフォルトの名無しさん:2013/04/22(月) 12:12:07.36
そんな糞コード書くなアホか

355 :デフォルトの名無しさん:2013/04/22(月) 12:42:26.66
>>353
it=list.erase(it);

慣用句レベルな。
イテレータが無効化される要件は、規格で規定されてるから、ググれば直ぐ情報出てくると思うぞ。

356 :355:2013/04/22(月) 12:47:31.25
あ、そのままループ内で使うなよ。
erase の戻りが何を返すのか調べてくれ。
出先で書いてるので調べられん。
中途半端な情報ですまん。

357 :デフォルトの名無しさん:2013/04/22(月) 12:48:59.62
>>355
それはvc++のみじゃない?
linuxに突っ込まれてる erase()は void型

規約があるのか、探してみる
coredumpとコード読んで理解しようとしていたがギブアップだった

358 :デフォルトの名無しさん:2013/04/22(月) 12:53:44.33
>>356
いやさんくす、規約というのをしらなかった
探してみる

359 :デフォルトの名無しさん:2013/04/22(月) 12:58:54.90
規格だったw

360 :デフォルトの名無しさん:2013/04/22(月) 15:31:24.56
ISO/IEC 14882:2011の23.3.5.4では
iterator erase(const_iterator position);

voidなのは何かの見間違いじゃね?

361 :デフォルトの名無しさん:2013/04/22(月) 16:29:34.07
>>367
g++ならerase()はiteratorを戻すが?

362 :デフォルトの名無しさん:2013/04/22(月) 16:39:37.39
たしかに今確認したら
it = list.erase(it);
でビルドとおった、すまぬ。

363 :デフォルトの名無しさん:2013/04/22(月) 16:44:04.21
ちょっと規約買ってくる

364 :デフォルトの名無しさん:2013/04/22(月) 16:49:13.81
pop_xxxと勘違いしてんじゃね

365 :デフォルトの名無しさん:2013/04/22(月) 18:05:07.32
C++03のmapやsetならvoidだったからその辺の混同だろ

366 :デフォルトの名無しさん:2013/04/22(月) 18:13:05.06
LLVM clang が C++11 に完全対応した今、
C++03 を使う機会はだんだん減っていくといいなぁ

367 :デフォルトの名無しさん:2013/04/22(月) 18:31:38.53
g++ならerase()はiteratorを戻すが

368 :デフォルトの名無しさん:2013/04/22(月) 18:45:17.19
文盲がいるな

369 :デフォルトの名無しさん:2013/04/22(月) 19:03:24.70
ぶ、文盲がいるな

370 :デフォルトの名無しさん:2013/04/22(月) 19:21:38.86
>>367
g++ 4.7.2で確認したけど
g++ -std=c++98 → map<T1,T2>::eraseはvoidを返す
g++ -std=c++03 → map<T1,T2>::eraseはvoidを返す
g++ -std=c++11 → map<T1,T2>::eraseはイテレーターを返す

371 :デフォルトの名無しさん:2013/04/22(月) 21:14:44.50
結局>>329は「ユーザ定義型のポインタはすべて同じサイズだと保証されてるから問題ない」ってことでいいのかね

372 :デフォルトの名無しさん:2013/04/22(月) 21:28:15.35
sizeof(int *) != sizeof(void(*)())
関数のポインタと変数のポインタのサイズが違う場合があるって知らなかったけど
どうしてこうなる?

373 :デフォルトの名無しさん:2013/04/22(月) 22:04:12.36
関数:コード用のROM
変数:RAM
に配置されてROMとRAMでそれぞれ別のアドレス空間とアドレス表現を持つとか普通だから

374 :デフォルトの名無しさん:2013/04/22(月) 22:11:20.77
>>373
どうも
そういうことか。PCだけじゃなく組み込みなんかでもC/C++使うからな

375 :デフォルトの名無しさん:2013/04/22(月) 22:21:23.99
class A { B* b };

A::A() { b = new B(); }

こうやると実行時エラーになるのに
class A { std::shared_ptr<B> b };

A::A() { b= new shared_ptr<B>(); }

だとエラーになりません。
これはやってもいいことがやれているのか
やってはいけないことがやれてるだけなのか教えてください

376 :デフォルトの名無しさん:2013/04/22(月) 22:24:41.97
よくわかってないならソースを省略せずにきくといいよ

377 :デフォルトの名無しさん:2013/04/22(月) 22:26:44.31
コンパイル通る文書けよ

378 :デフォルトの名無しさん:2013/04/22(月) 22:27:28.42
>>375
B の定義が見えてないだけでは?
後者はB のインスタンスを作ってないからコンパイルできているだけのような気が。

379 :デフォルトの名無しさん:2013/04/22(月) 22:29:33.23
>>371
Cでは「pointer to structure typeは皆同じサイズ、それ以外は知らん」となってる。
でもC++ではそもそもオブジェクトポインターはメモリアドレスと規定されているし
Cみたいな記述は見つけられなかった。
ISO/IEC 14882:2011の3.9には「sizeof UNKA* is known」と
例があるしきっと安全だろううん。 ※UNKOは不完全型の配列

380 :デフォルトの名無しさん:2013/04/22(月) 22:57:35.64
UNKOは食ったオブジェクトの最終形だろ

381 :デフォルトの名無しさん:2013/04/22(月) 23:18:14.81
>>329,371
規格上は
 不完全(なあるクラス)型へのポインタの大きさ == (完全なその)クラス型へのポインタの大きさ
は保証されない

>>340の例が動くのは
・A.cppとB.cppを不完全型へのポインタと(完全な)クラス型へのポインタが
 同じ大きさであるように実装された同じコンパイラでコンパイルした場合
・A.cppをコンパイルしたコンパイラでの不完全なTへのポインタの大きさと
 B.cppをコンパイルしたコンパイラでのTへのポインタの大きさがたまたま一致した場合
とかの環境依存の結果でしかない

382 :デフォルトの名無しさん:2013/04/22(月) 23:24:33.21
>不完全(なあるクラス)型へのポインタの大きさ == (完全なその)クラス型へのポインタの大きさ
>は保証されない

いやそれはおかしい

383 :デフォルトの名無しさん:2013/04/22(月) 23:25:21.84
>>381
規格を引用しない限り信用しない

384 :デフォルトの名無しさん:2013/04/22(月) 23:30:29.05
1:struct s;
2:s * ps1;
3:struct s{};
4:s * ps2;

ps1とps2のサイズが違ったらオカルトだぜ。

385 :デフォルトの名無しさん:2013/04/22(月) 23:58:21.15
C++ならそれくらいのことがあったとしても驚かない

386 :デフォルトの名無しさん:2013/04/23(火) 00:33:21.98
自己参照も不完全型と同じ扱いなんだよね?
となると、サイズが違ったらこうなるわけか

struct s {
 s* p;
};

s x;
x.p = &x; // NG

リスト作れねえ

387 :デフォルトの名無しさん:2013/04/23(火) 00:45:48.71
>>386
クラス定義内の前方参照は2回翻訳した時に
最初と同じ意味でなければならないから
途中のs*p;が既にアウチ。
C++的には「未定義だけどチェックはされない」
動くのは偶然ということになる

388 :デフォルトの名無しさん:2013/04/23(火) 00:51:34.98
犬も歩けば未定義に当たるような言語だから流行らない
マシン性能が上がってくると需要がなくなっていくのはどうするの?

389 :デフォルトの名無しさん:2013/04/23(火) 01:03:45.86
C++は随分昔から実用を離れたオナニーだから無問題

390 :デフォルトの名無しさん:2013/04/23(火) 01:49:53.10
>>386
> struct s {
>  s* p; // (1)
> }; // (2)
>
> s x;
> x.p = &x; // NG

少なくともそのケースだけなら例えば(1)の時点で sizeof(s*)==8、(2)以降は sizeof(s*)==4 (s.pは4バイト+padding4バイト)
みたいな扱いになるなら問題にはならないだろ

391 :デフォルトの名無しさん:2013/04/23(火) 02:03:29.22
まず受け入れたいことは根拠無しで信じるくせに受け入れたくないことに対してだけ
否定するために根拠を求めるダブスタ野郎は最低のクズだから誰かそうならとっとと消えてね

>>379がいうことに該当するCの規格の箇所を誰かが示して
C++で規定されてない事はCの規格に従う+不完全な構造体も構造体の内
ということで収めちゃえばいいんじゃないの

392 :デフォルトの名無しさん:2013/04/23(火) 02:37:37.91
>>372
つMS-DOS系メモリモデル/farポインタ、nearポインタ

393 :デフォルトの名無しさん:2013/04/23(火) 06:45:26.19
>>391
ISO/IEC 9899:1999 3.2.5Type 26
『All pointers to structure types shall have the same representation and alignment requirements as each other.
All pointers to union types shall have the same representation and alignment requirements as each other.
Pointers to other types need not have』

394 :デフォルトの名無しさん:2013/04/23(火) 06:46:39.41
UNKOの完全型はまきぐそ

395 :デフォルトの名無しさん:2013/04/23(火) 07:32:50.95
なんでこんなにデタラメを書き込む奴が多いの
不完全型へのポインタが違うサイズなんて
ソース出して見ろよヲラ

396 :デフォルトの名無しさん:2013/04/23(火) 07:37:27.91
>>392
farついてないから両方nearポインタじゃね?

397 : ◆QZaw55cn4c :2013/04/23(火) 08:20:42.17
>>396
採用するメモリモデルによってかわる。
small もでるなら両方 near、large モデルなら両方 far だが、compact モデルや medium? モデルだったら一方が far なら一方は near という風だったはず、huge モデルはよくわからない‥‥

398 :デフォルトの名無しさん:2013/04/23(火) 09:12:56.73
struct s;
s* a = nullptr; //8byte
struct s {};
s b, *c = &b; //4byte
std::swap(a, c); //www

399 :デフォルトの名無しさん:2013/04/23(火) 11:18:39.02
互いに暗黙変換されたりすれば問題ないよね
>>386と同じ話だけど

400 :デフォルトの名無しさん:2013/04/24(水) 00:38:58.46
Wikipediaのコンマ演算子の説明を読みましたが、よく分かりません。教えてください。
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9E%E6%BC%94%E7%AE%97%E5%AD%90
・「未定義動作」の節で、コード内のコメントでは不定と書かれています。「未定義」と「不定」は同じ意味でしょうか。
・i++, i++; がダメなのは理解しましたが、(i, j) = 7; がダメな理由が分かりませんでした。
 「副作用完了点で変数へアクセスしようとしている」と書かれていますが、
 この副作用完了点は具体的にどこなのかと、「変数へアクセス」の変数とはiかjどちらのことか、教えてください。

401 :デフォルトの名無しさん:2013/04/24(水) 01:00:24.42
>>400
「不定」とは「unspecified」の訳で、いくつかの動作パターンが考えられる時にどの
パターンで実行されるかは処理系次第という意味

「未定義」とは「undefined」の訳で、「これを実行したら『鼻から悪魔』、つまり
何が起きるか分かりませんよ、という警告を込めた意味

402 :デフォルトの名無しさん:2013/04/24(水) 01:01:44.94
ひどい内容だな

403 :デフォルトの名無しさん:2013/04/24(水) 01:14:31.37
>>401
副作用完了点は(i, j)のとじカッコの位置
普通ならjが評価されて戻るのだが、カンマ演算子が使われると最後の評価点まで
順に評価されるため、カッコが使われるとカンマ演算子の副作用完了点とぶつかって
どちらを優先すべきかコンパイラには分からない

変数へのアクセスには2種類あり、右辺値と左辺値がある
右辺値は代入不可能、左辺値は代入可能(ただし変更可能の場合に限る)
カンマ演算子もカッコもこの場合は代入可能な左辺値を返すために、おそらく
jに代入されると予想されるが、iの評価した結果をどうするかが分からず、
警告を発するコンパイラがありそうだ

404 :デフォルトの名無しさん:2013/04/24(水) 01:29:24.95
>>403
なにを意味不明なことを言ってんだ

405 :デフォルトの名無しさん:2013/04/24(水) 01:30:49.46
(i, j) = 7;の副作用完了点はセミコロンじゃないのか
代入演算子が最終的に評価されてるぞ

406 :デフォルトの名無しさん:2013/04/24(水) 21:28:09.29
enumで作った定数は
#defineと全く同じですか?

407 :デフォルトの名無しさん:2013/04/24(水) 21:29:19.03
いいえ

408 :デフォルトの名無しさん:2013/04/24(水) 21:49:19.34
>400
いくらなんんでもあんまりだと思ったので記事訂正しといた。

409 :デフォルトの名無しさん:2013/04/25(木) 09:14:58.62
enumで作った定数は
constと同じってことでOK?

410 :デフォルトの名無しさん:2013/04/25(木) 10:21:32.74
&でアドレス取れないとかの違いはあるよ

411 :デフォルトの名無しさん:2013/04/25(木) 12:24:07.79
使い分けとしては
enum: 数値に意味がなくて名前が重要。気の利いたデバッガなら名前を見られる
   後で数値の割当てが変わっても平気
const: 数値自体に意味がある。式で計算に使うような場合

412 :デフォルトの名無しさん:2013/04/25(木) 14:37:01.14
>>411
いい加減なことを言うな

413 :デフォルトの名無しさん:2013/04/25(木) 15:24:06.95
>>412
じゃあ「いい加減じゃない」事を言ってみろカス

414 :デフォルトの名無しさん:2013/04/25(木) 15:46:14.31
>>411
> enum: 数値に意味がなくて名前が重要。

これさぁ。
コンパイラが勝手に値を書き換えても問題なく動作するところだけで使えということ?

415 :デフォルトの名無しさん:2013/04/25(木) 15:53:12.08
勝手には変わらないぞ

416 :デフォルトの名無しさん:2013/04/25(木) 16:53:30.74
型がenumの値を配列の[ ]中に入れるのは無しだよね。

417 :デフォルトの名無しさん:2013/04/25(木) 17:03:06.73
>気の利いたデバッガなら名前を見られる
気の利いたデバッガなら名前→数値を見られる

418 :デフォルトの名無しさん:2013/04/25(木) 17:49:39.46
>>416
スレ間違ってない? ここは C++ だよ
C でさえ [] の中が整数とは限らないし

419 :デフォルトの名無しさん:2013/04/25(木) 17:50:41.51
int number[4.567]

420 :デフォルトの名無しさん:2013/04/25(木) 18:01:30.76
3[number]

421 :デフォルトの名無しさん:2013/04/25(木) 18:45:31.44
#define NUMBER [number]
int NUMBER={0,1,2,3};
return 0 NUMBER;

422 :デフォルトの名無しさん:2013/04/25(木) 18:54:12.09
無理に慣れないことしなくていいよ

423 :デフォルトの名無しさん:2013/04/25(木) 19:15:17.17
>>414
勝手に変わることはないけれど、用途としてはその認識でいい。
デバッガの話はよくわからないけれど、値が意味を持つものにenumを使うべきじゃない。
enumは、名前や順番に意味があるとき使うもの。
値が重要、普遍でなければならない場合は、constやdefineを使うべき。

enumの使い時としては例えば
配列でmapみたいな指定に使ったり、値に依存する処理がカプセル化されているときとか?

逆に使えないのは、エラーコードかな?
同じプログラム内でなら問題にはならないけどログや終了値みたいに外部に公開するようなやつに使うのはまずい。

424 :デフォルトの名無しさん:2013/04/25(木) 19:21:00.85
>>423
都道府県コードにenumを使ってはいけないというわけか

425 :デフォルトの名無しさん:2013/04/25(木) 19:25:54.68
>>423
netinet/in.h に書かれることの多い
IPPROTO_TCP = 6,
のようなenumは、君の家では間違いなんだ?

426 :デフォルトの名無しさん:2013/04/25(木) 19:57:41.24
>>423
勝手に変わらない=確定しているもので
何がまずいんだよ

飛躍の一切ない論理を聞こうか

427 : ◆QZaw55cn4c :2013/04/25(木) 20:01:58.54
>>426
enumerate

428 :デフォルトの名無しさん:2013/04/25(木) 21:42:13.43
定数定義にdefine使う奴は
どうしようもない馬鹿

429 :デフォルトの名無しさん:2013/04/25(木) 21:59:57.61
>>411
圧縮とか画像とかのライブラリな。
あれ結構あるんだよな。
画像等のファイルヘッダーに入れるID情報をenumで列挙してるの。
君んちルールではルール違反でアウトになるよな。
君の会社と一緒に仕事するのは不可能だなあ。

430 :デフォルトの名無しさん:2013/04/25(木) 22:21:11.84
値に意味があるのなら、enumはまずいと思う。
コード体系なんかも値が意味を持つたぐいじゃないだろうか。

enumを使うことの問題点は、定義する位置や直前の値にひきづられて変わりかねない値の不安定さ。
だから、値が意味を持つものには使うべきじゃないという話。

>>425
値に対する処理が、ある意味カプセル化されている部分で値そのものに、意味はないと思うのだけど、どうだろ?
もしも、値に意味がある場所でenumを使っているのだとしたら、本来はconstを使うところだとは思うな。

431 :デフォルトの名無しさん:2013/04/25(木) 22:28:41.63
enumは値を指定できるんだから
値が意味を持つ場合にも使える

型が作られる事も重要

432 :デフォルトの名無しさん:2013/04/25(木) 22:34:39.60
型を軽視するやつはCにでも引きこもってればいいのに

433 :デフォルトの名無しさん:2013/04/25(木) 22:40:11.13
>>430
こんなダメすぎる考え方は見たことないよ
このバカチンがー!

434 :デフォルトの名無しさん:2013/04/25(木) 22:44:46.26
int a = 0x11223344;
char b = *static_cast<char*>( static_cast<void*>(&a) );
char c = *reinterpret_cast<char*>(&a);

bとcって何か違うんですか?

435 :デフォルトの名無しさん:2013/04/25(木) 22:50:17.22
cはコンパイルエラーになる可能性がある

436 :デフォルトの名無しさん:2013/04/25(木) 22:53:46.35
数値に意味があって、その意味にふさわしい名前を付けた方が良いから名前を付ける。
列挙される数値の集合に意味があって、その意味にふさわしい名前を付けた方が良いから名前を付ける。
それがenum。
enum protocol {
tcp = 6,
udp = 17,
};
こうやってやると、TCPという意味のある数値の6に対してtcpという名前を付けられるし、
プロトコルという意味のある集合に対してprotocolという名前を付けられるじゃないか。
そしてprotocolという型まで生まれて、コンパイラはチェックできるようになるじゃないか。
意味があるから意味にふさわしくこれらのことをやるんだよ。

437 :デフォルトの名無しさん:2013/04/25(木) 22:58:10.67
>>434
ほぼ同じ
ただし、int より char の方がアラインメントの要請が厳しいうんこ環境があったら失敗するかもしれない
(普通はないと思われるが)

5.2.10 7 (C++11)
An object pointer can be explicitly converted to an object pointer of a different type.
When a prvalue v of type “pointer to T1” is converted to the type “pointer to cv T2”,
the result is static_cast<cv T2*>(static_cast<cv void*>(v))
if both T1 and T2 are standard-layout types (3.9) and
the alignment requirements of T2 are no stricter than those of T1,
or if either type is void.

438 :デフォルトの名無しさん:2013/04/25(木) 23:00:00.89
ああ、>>437 は reinterpret_cast の話ね

static_cast を重ねた場合は
元の型が分からないので
アラインメントのチェックができなくなる

439 :デフォルトの名無しさん:2013/04/25(木) 23:01:00.02
430.detach();

>>432
そんなあなたに enum-base

440 :デフォルトの名無しさん:2013/04/25(木) 23:26:58.09
constでもenum-base相当のことはできるんだし今はあんまり関係なくね

441 :デフォルトの名無しさん:2013/04/25(木) 23:31:56.28
右辺値でいいところを、わざわざ左辺値にする意味は?

442 :デフォルトの名無しさん:2013/04/25(木) 23:32:52.53
何の話よ

443 :デフォルトの名無しさん:2013/04/25(木) 23:34:53.42
enum vs const

444 :デフォルトの名無しさん:2013/04/25(木) 23:37:46.09
別に左辺値になるからconstを使ってるわけじゃなかろうに

445 :デフォルトの名無しさん:2013/04/25(木) 23:47:45.32
それじゃ答えになってなかろうが
const にするということは左辺値にするということで
その必要性を聞いている

右辺値参照に渡せなくなるという違いまであるんだぞ

446 :デフォルトの名無しさん:2013/04/26(金) 01:29:32.71
派生クラスのデストラクタは仮想関数にすると聞いたのですが
ポインタで生成したときのみですか?

447 :デフォルトの名無しさん:2013/04/26(金) 01:50:28.55
基底や

448 :デフォルトの名無しさん:2013/04/26(金) 01:58:21.00
とりあえず最後のカンマは書くなよ
警告がウザいんだよ

449 :デフォルトの名無しさん:2013/04/26(金) 06:01:23.09
http://codepad.org/acP6RCj8

共変の戻り値についての相談です。
URLのコードにてAとCは継承関係にあるのは明らかなのになぜ「covariantでない」と言われるのでしょうか。

450 :デフォルトの名無しさん:2013/04/26(金) 06:05:28.00
>>433
極論に聞こえるのは型について無視した話をしているからだと思うけど、言ってることのコンセプトは
外部設計等、仕様上定義された値→const
内部設計等、プログラムの都合上定義した値→enum
という話を具体的にしてるだけなんだけどね。

まぁ、値を意味づけ、グループ化するというenumの用途も理解はしている。

451 :デフォルトの名無しさん:2013/04/26(金) 06:33:10.20
俺は普通にenumで定数指定作ってるな
ビットフラグもenumで作ってるし

452 :デフォルトの名無しさん:2013/04/26(金) 06:41:03.23
>>449
ttp://codepad.org/WnQosPYb


453 : ◆QZaw55cn4c :2013/04/26(金) 06:42:49.77
enum を定数指定用途に使用するのを「enum ハック」というくらいだから、一般にあまり誉められたものではないという認識で通っているのでは?
そういう意味では >>430 に賛同するね

454 :デフォルトの名無しさん:2013/04/26(金) 07:08:56.17
>>452
Aにすれば同じ型なのでコンパイル通るのは分かるんです。

template使わなければ派生型を戻リ値にしても問題無いのにどうしてかなーと思いまして。

455 :デフォルトの名無しさん:2013/04/26(金) 07:24:21.86
製品出荷時に取り得る値が全て決まっているなら
数値に意味が有ろうと無かろうと
enumに決まっている。
constは老害
defineは犯罪者

456 :デフォルトの名無しさん:2013/04/26(金) 07:29:38.08
俺はenumを「数値固定定義のグルーピング」という意味合いでしか捉えてないな
値に意味があるか
どうかももちろん重要な場面はあるけどそれより利点の「どのように使われるためにまとめたか」って
部分が重要かねぇ

457 :デフォルトの名無しさん:2013/04/26(金) 07:33:38.18
>>445
const は #define の代わりに C++ で推奨されるようになったもの
元々 enum を使っていたものは C++ でも enum を使う
enum を使わないようなものは const を使う
ただの単発の値や、特定の型を指定したい場合など、ね

この判断に右辺値か左辺値という話は全く出てこない
必要だから左辺値にしているわけではないし、
そもそも意図的に左辺値にしているわけでもない
たまたま左辺値だったというだけ

右辺値にしたいなら右辺値にすればいいだけ
そんなのはどうとでもない

458 :デフォルトの名無しさん:2013/04/26(金) 07:34:10.62
×そんなのはどうとでもない
○そんなのはどうとでもなる

459 :デフォルトの名無しさん:2013/04/26(金) 07:35:28.60
文字列enumするの?

460 :デフォルトの名無しさん:2013/04/26(金) 07:44:39.10
>454
個人的には、共変の戻り値型使うケースとして自分の型のケースしか脳内になかった。

http://ccf.myhome.cx:5000/result/700 Derived* だとどのコンパイラでも通らない
http://ccf.myhome.cx:5000/result/701 B<Derived,Base>* だとどのコンパイラでも通る

規格上これに引っかかるんだと思う(shall be complete at the point of declaration)。

> 14882/2011 10.3p8
>If the return type of D::f differs from the return type of B::f, the class type in the return type of D::f shall
>be complete at the point of declaration of D::f or shall be the class type D.

461 :デフォルトの名無しさん:2013/04/26(金) 08:05:56.57
>>460
なるほど。仕様なら仕方ないですね。別のアプローチ探してみることにします。
ありがとうございました。

462 :デフォルトの名無しさん:2013/04/26(金) 11:05:37.95
>>457
const が #define に取って代わるなんて妄想やめれ
const がなかった頃の #define を const ができてすぐ置き換えるとき、
リンクが必要になっていたのを憶えているか?
左辺値の話はここに含みを置いていたんだよ

標準では INT_MAX みたいな計算に使うマクロは
std::numeric_limits<int>::max() みたいに関数にしていたりもするし

「enum を使わないようなもの」とは整数でない定数のことで
おまえさんの妄想こそ関係ない

>>455-456に賛成
タイプ数が少なく済み(=読むのも早い)、{} でグループを明示できるし
強い型づけには enum-base や enum class まであるのに
こんなにメリットのあるものを感情論で毛嫌いするのはもったいない

463 :446:2013/04/26(金) 11:05:55.48
派生クラスをポインタで生成した場合
元の基底クラスのデストラクタをvirtualにするってことでOK?

464 :デフォルトの名無しさん:2013/04/26(金) 12:04:52.96
基底クラスのポインタで削除する場合は基底クラスのデストラクタをvirtualにする

465 :446:2013/04/26(金) 12:11:58.58
>>464
virtualの機能を使ったら
virtualを使ってる基底クラスのデストラクタをvirtualにするってことでOK?

466 :デフォルトの名無しさん:2013/04/26(金) 12:32:46.46
先物 4700円 逝ったか?
田中、どんだけ変動すると値上げ変更するんだろ

467 :デフォルトの名無しさん:2013/04/26(金) 12:48:04.49
>>465
めんどくさいから、派生させるつもりがあるなら virtual 付けとけ。
逆に、デストラクタに virtual 付いていなければ、派生禁止と考えておけ。

468 :デフォルトの名無しさん:2013/04/26(金) 14:02:12.01
動的削除子付きのスマポ使えばvirtualデストラクタなど要らぬわ

469 :デフォルトの名無しさん:2013/04/26(金) 14:07:29.23
つかアプリレイヤでdeleteなんて一切書くな

470 :446:2013/04/26(金) 15:45:06.87
ちくしょょぉぉぉぉぉぉぉぉぉ
教えてくれよぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉ

471 :デフォルトの名無しさん:2013/04/26(金) 16:09:47.34
enumの一番下に〜_MAXなんてものを定義しても、それに=を付けて別の値にしてしまえば
一番下が最大ではなくなるし、途中で=を使えば上下での大小関係も崩せる。

472 :デフォルトの名無しさん:2013/04/26(金) 17:19:20.28
>>471
わざわざ値が変わるようなことをして、これだからenumは駄目なんだよって
言いたいのか?

473 :デフォルトの名無しさん:2013/04/26(金) 17:19:50.57
>>470
>>467

474 :デフォルトの名無しさん:2013/04/26(金) 17:20:37.62
>>471
そんなことする馬鹿が悪い&>>471が馬鹿

475 :デフォルトの名無しさん:2013/04/26(金) 19:59:03.66
>>445
&&型の目的は「右辺値なのでムーブするチャンス」
って考えだろ。定数をムーブしてどうする。
そこはconst参照使うところ。

476 :デフォルトの名無しさん:2013/04/26(金) 21:39:52.76
>>468
えっ?

477 :デフォルトの名無しさん:2013/04/27(土) 00:02:30.35
>>475
遅かったな
>>462 の前なら少しはマシだったが
今さらそんな枝葉に噛みつくだけ恥の上塗りだ

整数は値で受けるもので、おまえみたいに const 参照するやつは異端
右辺値参照がよほど助け船に見えたようだな

478 :デフォルトの名無しさん:2013/04/27(土) 00:14:58.04
constなんてやめてconstexprにするべきだな

479 :デフォルトの名無しさん:2013/04/27(土) 00:45:43.07
>>462
> const が #define に取って代わるなんて妄想やめれ
> const がなかった頃の #define を const ができてすぐ置き換えるとき、
> リンクが必要になっていたのを憶えているか?
> 左辺値の話はここに含みを置いていたんだよ

いつの話だよ
規格の出来る前の話は知らんが
C++のconstは静的リンケージでヘッダに書ける

> 標準では INT_MAX みたいな計算に使うマクロは
> std::numeric_limits<int>::max() みたいに関数にしていたりもするし

定数にすると浮動小数点型の時に困るから関数になってるだけ
それ以上の意味は無い

> 強い型づけには enum-base や enum class まであるのに

enum class は型付けが強すぎて const 定数の代わりには使えない
enum-base は別に良いのだけど、
型を作る意味が無ければやっぱり enum にする必要は薄い
というか C++11 が使える事前提だよねこれ

480 :デフォルトの名無しさん:2013/04/27(土) 01:11:15.18
>>479
いつの話だよ、をそのままお返ししよう

481 :デフォルトの名無しさん:2013/04/27(土) 02:40:28.40
>>480
いつかと訊かれたらC++は1998年の最初から?
ちなみに静的は内部の誤りだろうきっと。

>enum class は型付けが強すぎて const 定数の代わりには使えない
そりゃenumはサイズを指定するためのものじゃないからね。
当然、使うべきじゃない。

482 :デフォルトの名無しさん:2013/04/27(土) 07:18:15.87
const は定数にしてるだけで、その数字に意味づけする物じゃない。

enum はリストだから単体で使う意味が無いし、わかりにくくなるだけ。

明示的に最適な型宣言をして意味を持った変数名を付けるだけで良い。

483 :デフォルトの名無しさん:2013/04/27(土) 09:07:59.46
>>481
おう、内部リンケージの間違い
指摘ありがとう

484 :デフォルトの名無しさん:2013/04/27(土) 09:58:54.32
>>481
指定できるよアホ

>>482
たとえば int なら int であることが絶対条件になるまで
int と書かないほうが合理的だ

485 :デフォルトの名無しさん:2013/04/27(土) 13:42:55.85
単発の数値はconstで
値のグループはenum
これでよかですか?

486 :デフォルトの名無しさん:2013/04/27(土) 13:45:27.23
まだやってたのか
short <==> const short
long <==> const long
int <==> const int
? <==> enum
迷うのはおかしい

487 :デフォルトの名無しさん:2013/04/27(土) 13:45:36.93
はい

488 :デフォルトの名無しさん:2013/04/27(土) 13:53:03.66
会社なら会社の指示に従え
趣味なら好きなの使っとけ

このスタンスでそうそう困る事は無いし、そのうち経験から使い分けができるようになる

489 :デフォルトの名無しさん:2013/04/27(土) 14:03:29.03
>>486
>int <--> const int
constと非constの対応じゃなくて
constかenumのどちらを使用すべきかの
話だったんだけど
日本語読めない>>486には理解できなかったようだね。

490 :デフォルトの名無しさん:2013/04/27(土) 14:11:48.55
マクロじゃなきゃ何でもいいよ

491 :デフォルトの名無しさん:2013/04/27(土) 14:14:38.53
Androidのライブラリは
final int定義が羅列してあって
どのメソッドがどの値を返すのか書かれて
いなくて発狂しそうになります。

492 :デフォルトの名無しさん:2013/04/27(土) 14:18:44.78
sizeof(enum)っていくら?

493 :デフォルトの名無しさん:2013/04/27(土) 14:19:38.77
>>492
ベースの型のサイズ
何も書かなければintのサイズ

494 :デフォルトの名無しさん:2013/04/27(土) 14:48:28.52
でたらめ言うな
intのサイズが保証されるのはenum baseがintのenumと
emum baseのないenum class/struct (scoped enum)と
Cのenumだけ

enum baseのないenum class/structでないenum (unscoped enum)のサイズは処理系定義
(いくつかの条件はあるけどややこしいので略)

495 :デフォルトの名無しさん:2013/04/27(土) 19:02:50.00
C++のenumをそのままread/writeするプログラムは危険ってわけだな
enum baseがあればいいけど

496 :デフォルトの名無しさん:2013/04/27(土) 21:02:05.35
処理系定義だから、移植性とか考えなければ危険ってわけじゃないだろ

497 :デフォルトの名無しさん:2013/04/27(土) 21:07:10.94
アドレスとってそのままバイナリで書き込むのに
移植性がないのはintだろうとenumどろうと同じだぜ。

498 :デフォルトの名無しさん:2013/04/27(土) 21:24:00.71
enum のアドレスを取ってかw

499 :デフォルトの名無しさん:2013/04/27(土) 21:35:13.88
>>496
enumの内容を変更したらサイズが変わった、
という事もありうる
移植性関係無しに危険

500 :デフォルトの名無しさん:2013/04/27(土) 21:37:33.16
#include <iostream>
enum E { A = 0xFFFFFFFF };
int main() { std::cout << sizeof(E) << std::endl; }

出力 : 4

#include <iostream>
enum E { A = 0xFFFFFFFFFFFFFFFF };
int main() { std::cout << sizeof(E) << std::endl; }

出力 : 8

501 :デフォルトの名無しさん:2013/04/27(土) 21:38:27.65
なるほど・・・enumキモい

502 :デフォルトの名無しさん:2013/04/27(土) 21:43:34.09
そのためのenum baseでもある

バイナリで書き込む場合、C++03まではenumは厳禁
C++11ならenum baseとcstdintで頑張れる

503 :デフォルトの名無しさん:2013/04/27(土) 21:44:58.49
定義変えたらサイズ変わるとか当たり前だろ。
>>499のおつむの方がヤバい。

504 :デフォルトの名無しさん:2013/04/27(土) 21:50:58.43
>>503
お前のプログラムは怖いから保守したくないわ

505 :デフォルトの名無しさん:2013/04/27(土) 21:57:05.42
変数のアドレス取ってバイナリで書き込む
バイトオーダー依存しまくりの
KUSOなプログラムは保守したくないわ

506 :デフォルトの名無しさん:2013/04/27(土) 22:02:11.36
この世に既存のバイナリフォーマットなんて星の数程あるだろw
お前は独自のフォーマットのファイルしか扱わないのか

507 :デフォルトの名無しさん:2013/04/27(土) 22:03:21.65
エンディアン依存くらい普通じゃないの?

508 :デフォルトの名無しさん:2013/04/27(土) 22:05:35.18
ファイルフォーマットの
インディアン固定は問題ないけど、
プログラムがバイトオーダ依存
なのはよくないってことでしょ

509 :デフォルトの名無しさん:2013/04/27(土) 22:06:08.49
つーか、ファイルフォーマットが決まっているのに
バイトオーダーで氏ぬやつって低脳だろ

510 :デフォルトの名無しさん:2013/04/27(土) 22:09:16.09
バイトオーダを気にする必要があるなら
読む時に現在のバイトオーダに応じて変換すればいいだけ
気にする必要がない環境なら気にするだけ時間の無駄

511 :デフォルトの名無しさん:2013/04/27(土) 22:16:13.44
どちらかというと環境に依存して
単体試験が増える方が無駄。
バイトオーダー依存のプログラム書く奴は
大抵は漏れなくintサイズ依存

512 :デフォルトの名無しさん:2013/04/27(土) 22:17:44.80
いや、バイナリで扱おうがテキストで扱おうが
どの環境でも単体試験するのは当然だろ
何を言い出すんだこいつは

513 :デフォルトの名無しさん:2013/04/27(土) 22:25:49.01
インディアン嘘つかない

514 :デフォルトの名無しさん:2013/04/27(土) 22:42:09.19
>>512
だよな

515 :デフォルトの名無しさん:2013/04/27(土) 22:47:47.42
んだんだ

516 :511:2013/04/27(土) 22:48:26.38
>>512
>どの環境でも単体試験するのは当然だろ
んなこたーない。
フォーマット仕様が「2バイト符号無し整数
リトルインディアン」って書かれてたら
unsigned v = a[ofs+0]<<8 |a[ofs+1]
で書いておけばコードは一通り。
わざわざバイトオーダー変換ありと
なしの試験が必用となるコードを
書く方が無駄

517 :511:2013/04/27(土) 22:49:10.39
間違えた。ビッグインディアンね。

518 :デフォルトの名無しさん:2013/04/27(土) 22:50:35.50
エンディアン試験しない

519 :デフォルトの名無しさん:2013/04/27(土) 22:52:00.66
>>516
うわぁ

520 :デフォルトの名無しさん:2013/04/27(土) 22:52:13.34
お前らシリアライズ/デシリアライズライブラリが何のためにあると思ってるんだ

521 :デフォルトの名無しさん:2013/04/27(土) 23:05:15.97
>>518
ワロタw

522 :デフォルトの名無しさん:2013/04/27(土) 23:11:17.51
>>516
いや、試験しろよ
動くよ(多分)じゃ製品にならん
お遊びならいいんだろうが

523 :デフォルトの名無しさん:2013/04/27(土) 23:21:14.18
>>518,>>522
試験しないんじゃなくて
環境非依存の書きかたにすれば
試験項目が減るって話でわ?
>>520のいうとおりライブラリ
を使うのは賛成

524 :デフォルトの名無しさん:2013/04/27(土) 23:28:12.19
バイトオーダが違うような環境の両方に対応させるのなら
両環境で同じ試験を一通りするもんじゃないの

525 :デフォルトの名無しさん:2013/04/28(日) 00:45:58.32
>>524
言語仕様で保証された範囲内で書かれてるんなら
リグレッション試験相当で十分じゃね?
高級言語使ってんだから。

526 :デフォルトの名無しさん:2013/04/28(日) 00:57:47.49
実行されるマシンのアーキテクチャって、だいたい決まってるよな。
エンディアンの変換ロジックをテストしてもエンディアン自体をテストするのはまれじゃないか?

どんな環境でも動くぜ的な趣味で作るようなやつならいざしらず、複数のアーキテクチャに対応するとか、今となっては一般的じゃないな

527 :デフォルトの名無しさん:2013/04/28(日) 01:28:22.22
言語仕様に従って書いていれば
環境依存なんてそうそう無いぜ

自分のコードが処理系依存かどうか
意識するのはあたり前じゃねーの?
多バイトオブジェクトのメモリ
イメージをそのまま保存とか怖すぎる

528 :デフォルトの名無しさん:2013/04/28(日) 01:57:52.39
このソースは環境依存って丸ごとifdefでくくってそれで終了だな
あるかどうか分からない移植を考えていちいち対応するのも馬鹿らしい

529 :デフォルトの名無しさん:2013/04/28(日) 02:02:45.16
いや、試験しろよ
動くよ(多分)じゃ製品にならん
お遊びならいいんだろうが

530 :デフォルトの名無しさん:2013/04/28(日) 02:38:31.70
>>529はバウンダリ試験したあとに
intの値総当たりで試験しないと気が済まな
そうなタイプだな。

言語仕様を知らないから処理系依存しまくりの
ウンココードを量産して
PCメーカーごと、HDD容量ごと、
ディスプレイの解像度ごとに全単体試験を
やり直してるに違いない。

531 :デフォルトの名無しさん:2013/04/28(日) 03:01:26.05
(⊃д⊂)コンバン・・・∩・д・∩ワー

532 :デフォルトの名無しさん:2013/04/28(日) 03:35:27.59
動くよ じゃなくて 後でここを直せば動くよ だろ

533 :デフォルトの名無しさん:2013/04/28(日) 07:52:34.96
>>531
かわいー♪

534 :デフォルトの名無しさん:2013/04/28(日) 07:55:01.97
だるいときの定型コンビネーション
#ifndef
#error

535 :デフォルトの名無しさん:2013/04/28(日) 09:37:24.91
オマエら暇だな。
世間は大型連休だと言うのに
家に引きこもって2ちゃんとオナニーしか
することないんですか?

536 :デフォルトの名無しさん:2013/04/28(日) 09:53:25.42
>>535
  /⌒ヽ ヤル気でない
 く/・ ⌒ヽ  
  | 3 (∪ ̄]
 く、・ (∩ ̄]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

537 :デフォルトの名無しさん:2013/04/28(日) 10:17:14.08
>>536
かわいー♪

538 : ◆QZaw55cn4c :2013/04/28(日) 11:35:18.35
>>505
でも卵の割り方に依存しない書き方って結構難しかった記憶があります。http://toro.2ch.net/test/read.cgi/tech/1313183984/35
両宗教の流儀とも環境を準備したいんですけれどもビッグエンディアンの環境ってなにがあるんでしょう、ぜひとも手元においておきたいものですが。

539 : ◆QZaw55cn4c :2013/04/28(日) 11:41:03.19
>>535
世界一の放射光施設の一般見学に参加しました。ポスターの前でわけわかんなくてうんうんうなっていると、宗教勧誘の人が酔ってきていろいろ教義解説していただけたんですが余計にわけわかんなくなりました‥‥。
世界一ってすごいんだなあ二番じゃだめなんだなあ、て思いました。

結局ポスターセッションだけで結局一日が終わってしまって、結局設備を見る暇がなかった‥‥‥。

540 :デフォルトの名無しさん:2013/04/28(日) 12:30:01.76
ビッグエンディアンで入手しやすそうなのは、旧Macあたりか?
…ミドルエンディアンの機械とかって入手できんのかこれ

541 :デフォルトの名無しさん:2013/04/28(日) 14:00:20.50
Objecttive-Cの質問をしたいんですが、スレチ?
なんか前はスレあったみたいなんだけど、落ちてるみたいで・・。

542 :デフォルトの名無しさん:2013/04/28(日) 14:07:33.71
mac板になかったっけ

543 :デフォルトの名無しさん:2013/04/28(日) 14:48:18.70
>>541
ここでもいいんじゃない?もしかすると質問に答えてくれる人がいるかもしれないし

544 :デフォルトの名無しさん:2013/04/28(日) 15:07:14.84
>>542
見てきましたが今はないぽいですね。
>>543
そうします。

objective-Cを cygwin上でかつ、clangでコンパイルしてる人いませんか?
この時点でかなレアケースだとは思いますが・・・。

545 :デフォルトの名無しさん:2013/04/28(日) 20:12:52.23
C++あるいはVC++なんかで、
代入や計算結果を自動的に範囲制限(いわゆるClip)(min〜max)してくれたり、
あるいは端を超えると裏回ってくれる(いわゆるWrap)(min〜max<-min〜max->min〜max〜)型ってありませんか?
自分で作れるんですが、標準のものがあればそれを使いたいです。

546 :デフォルトの名無しさん:2013/04/28(日) 20:15:19.23
なにそれ

547 :デフォルトの名無しさん:2013/04/28(日) 20:16:05.63
自分で作れ

548 :545:2013/04/28(日) 20:17:28.42
了解ですw

549 :デフォルトの名無しさん:2013/04/28(日) 21:02:33.32
うおおお、そんなのはCじゃねぇ
たとえおてんとうさまがゆるしても
おいらがゆるさねぇ

550 :デフォルトの名無しさん:2013/04/28(日) 22:05:21.13
>>545
> C++あるいはVC++なんかで、
> 代入や計算結果を自動的に範囲制限(いわゆるClip)(min〜max)してくれたり、
> あるいは端を超えると裏回ってくれる(いわゆるWrap)(min〜max<-min〜max->min〜max〜)型ってありませんか?
> 自分で作れるんですが、標準のものがあればそれを使いたいです。
なければテンプレートで作るかな。
閉区間や開区間で判定・クランプするテンプレートとか、
clipはclampとかでたまにやってる。warpもやるかな。

なんかboostとかでありそうだけど。

551 :545:2013/04/28(日) 22:15:07.20
>>550
参考になりやす!
やっぱテンプレートっすよね。

552 :デフォルトの名無しさん:2013/04/29(月) 00:17:29.18
std::listのデータをifstreamとofstreamを使ってバイナリファイルで保存、読込がしたいのですが、たとえば

std::list<hoge> hogeList;
std::ofstream file("test", std::ifstream::binary);
file.write( (char*)&hogeList, sizeof(hogeList) );

とやってもリスト構造の保存はできませんよね、どうすればリスト構造の保存できますか?

553 :デフォルトの名無しさん:2013/04/29(月) 00:24:21.36
シリアライズ

554 :デフォルトの名無しさん:2013/04/29(月) 00:31:24.51
昨今、効率を重視したシリアライズライブラリが数多く登場しています。特に、大量の処理を行う大規模な基盤システム向けに開発されていることが多いようです。
少し探してみるだけでも、次のような事例が見つかります:

BERT(githubで採用:Introducing BERT and BERT-RPC)
Thrift(Facebookが開発:Thrift: Scalable Cross-Language Services Implementation)
Avro(Hadoopで採用されそう)
Protocol Buffers(Googleが開発)
BSON(mongoDBで利用)
MessagePack(kumofs などで利用)
http://d.hatena.ne.jp/viver/20100324/p1

555 :デフォルトの名無しさん:2013/04/29(月) 01:49:56.49
>>553
>>554
ありがとうございます

556 :デフォルトの名無しさん:2013/04/29(月) 05:07:36.94
どれもキワモノ臭が漂うな

557 :デフォルトの名無しさん:2013/04/29(月) 22:54:39.24
>>555
hoge厨は二度と来るな

558 :デフォルトの名無しさん:2013/04/29(月) 22:58:04.47
ほらはよ

559 :デフォルトの名無しさん:2013/04/29(月) 23:00:33.81
>>558
クスリでもやられています?

560 :デフォルトの名無しさん:2013/04/29(月) 23:30:26.49
頭でもやられたかw

561 :デフォルトの名無しさん:2013/04/30(火) 14:34:34.38
struct A
{
 void test(){}
 template<typename T> void test(){}
};

A a;
a.test();
a.test<int>();

この2つのtest()は正しく区別されますか?

562 :デフォルトの名無しさん:2013/04/30(火) 14:37:13.03
まずオマエの環境の結果を書けよボケナス

563 :デフォルトの名無しさん:2013/04/30(火) 14:46:41.84
14.5.2『When both exist, a use of that name and type refers to the non-template member unless an explicit template argument list is supplied』

564 :デフォルトの名無しさん:2013/04/30(火) 14:56:02.54
区別されるかの回答はよ
急いでます

565 :デフォルトの名無しさん:2013/04/30(火) 14:56:19.16
テンプレートでないtestが優先されるっちゅうこっちゃね

566 :デフォルトの名無しさん:2013/04/30(火) 14:59:52.16
へー。だから何?って仕様だな

567 :デフォルトの名無しさん:2013/04/30(火) 15:03:30.74
テンプレートなメンバ関数を型を明示して使う場合、
a.template test<int>(); って書かないとだめなんじゃないの?
非テンプレートな同名のメンバ関数の存在にかかわらず。

568 :デフォルトの名無しさん:2013/04/30(火) 15:06:00.83
アスぺ「まず561の考える正しいの定義を説明してもらおうか
アスぺ「>>567  明示して使うのが前提ならそうだろう

569 :デフォルトの名無しさん:2013/04/30(火) 15:12:39.87
>>567
んなこたーない
test<>()でいけるはず

570 :569:2013/04/30(火) 15:26:33.84
>>567 すまん嘘を書いた。
<>と書けるのは引数から推論できる時だけ
だが明示的なtemplateキーワードは無くていい。

571 :デフォルトの名無しさん:2013/04/30(火) 15:54:06.35
C++は本当にKUSOだな。
上級者でも(むしろ上級者ほど)規格片手にコード
書かなきゃいけない言語はおかしいだろ。
何のためのプログラミング言語だよ

572 :デフォルトの名無しさん:2013/04/30(火) 16:00:50.90
そんなアホコードを書くやつが悪い

573 :デフォルトの名無しさん:2013/04/30(火) 16:01:19.06
>>571
使い捨てのプログラムならそんなことしなくていいし、長期間にわたって正しく動くことが
要求されてるプログラムならどんな言語で書いてもそうなると思うんだけど。

本当にC++のせいなのかい?

574 :デフォルトの名無しさん:2013/04/30(火) 17:12:13.82
規格票を見るのが嫌いな人が、向かない仕事で苦しんでいるのはともかくとして・・・
typename 前置とか private 継承みたいに、マジクソなところは確かにある

しかも C++11 という大改訂のチャンスを逃して残ったのが大量にあるし

575 :デフォルトの名無しさん:2013/04/30(火) 17:15:44.84
private継承の何がマジクソなのかと

576 :デフォルトの名無しさん:2013/04/30(火) 17:39:44.43
コンパイラに怒られるのが嫌だから全メンバを公開しろってことだろ言わせんな恥ずかしい

577 :デフォルトの名無しさん:2013/04/30(火) 17:42:51.13
>>574 お前が提案のチャンスを逃したせいだろ。今さら文句言うなよ。

578 :567:2013/04/30(火) 19:02:09.16
やっぱりtemplate付けないとだめじゃん。
http://d.hatena.ne.jp/faith_and_brave/20080128/1201510970

579 :デフォルトの名無しさん:2013/04/30(火) 19:27:46.46
おまえらよくそんな膨大な仕様が
あたまに入ってるな

580 :デフォルトの名無しさん:2013/04/30(火) 19:35:30.46
そらあ、仕様を読まずに書いて失敗したからな
リーマンショックでやばい時期だったから、必死にもなるわ
C#だけどな

581 :デフォルトの名無しさん:2013/04/30(火) 19:52:00.45
>>578
↓のコメントアウトはずしてエラーメッセージ読んでみ
http://ideone.com/9ogFHt

582 :デフォルトの名無しさん:2013/04/30(火) 20:06:23.83
aの型がテンプレートパラメーターの時は
a.testが何物かわからないのでtemplateが必用。
aの型がわかっているときは要らない、なのかな。
こんなくだらないことでおまえら大先生の意見が分かれるとは
やはりC++はKUSOだな。

583 :デフォルトの名無しさん:2013/04/30(火) 20:12:01.02
規格の該当個所はよ

584 :デフォルトの名無しさん:2013/04/30(火) 20:15:53.53
567はtemplate限定子がどういうものなのか全く分かってない

template限定子はtemplate引数型のtemplateメンバを使う際に付けるもの
template引数型はどんなメンバを持つか分からないから、
とりあえず変数か通常の関数として解釈される
それを曲げてtemplateメンバと解釈させたければtemplate限定子が必要になるし、
型と解釈させたければtypename限定子が必要になる
これ以外のケースでは限定子は使われないし、使えない

入門書にも書いてあるレベルだと思うが

585 :デフォルトの名無しさん:2013/04/30(火) 20:20:21.97
いや入門書はiostreamと
間違いだらけのクラス概説で終わるから

586 :デフォルトの名無しさん:2013/04/30(火) 20:23:27.97
限定子も書いてない入門書なんてポイしなさい! ポイ!

587 :デフォルトの名無しさん:2013/04/30(火) 20:28:09.72
同じキーワードが色々な意味で
使い回されるからこういいった間違いが起こる。
やっぱりC++はウンコだね おウンコ

588 :デフォルトの名無しさん:2013/04/30(火) 20:28:12.68
>>581 コンパイラが未対応なだけだろ
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#468

589 :デフォルトの名無しさん:2013/04/30(火) 20:30:55.03
初心者はまず入門書としてハーブサッターとアンドレイアレクサンドレスクと禿を読みなさい!

590 :デフォルトの名無しさん:2013/04/30(火) 20:33:53.74
ウンコウンコいいながらこのスレに執着してる奴ってどんだけウンコ好きなんだよ

591 :デフォルトの名無しさん:2013/04/30(火) 20:45:34.59
今手元の入門書見たら、typename限定子は書いてたけどtemplate限定子は書いてなかった

592 :デフォルトの名無しさん:2013/04/30(火) 20:47:33.03
おっとーー、ここで規格マニアのアスぺ>>588が登場!
アスぺにはアスペな回答をしてあげよう

誰も付けちゃいけないなんて言ってないよ?

593 :デフォルトの名無しさん:2013/04/30(火) 20:57:50.53
ロベールだと837ページに書いてあった

594 :デフォルトの名無しさん:2013/04/30(火) 20:59:38.21
なんて書いてあるの!

595 :デフォルトの名無しさん:2013/04/30(火) 21:00:58.17
>>594
6つ前のレスくらい嫁よ

596 :デフォルトの名無しさん:2013/04/30(火) 21:07:13.19
>>578
class hoge って...
これで情報はウンコって決定だな

597 :デフォルトの名無しさん:2013/04/30(火) 21:10:29.76
C++がKUSOなのは今に始まったことではないね

ファイル1:
extern int g;//外部リンケージ

ファイル2:
static int g;
extern int g;//内部リンケージ

こんな言語がウンコでないなわけがない

598 :デフォルトの名無しさん:2013/04/30(火) 21:13:02.82
>>597
>C++がKUSO
だからC#なんてのを作ったんだろ

599 :デフォルトの名無しさん:2013/04/30(火) 21:14:28.23
>>592
C++03まではつけてはいけない
>>588が言ってんのはC++11の話

600 :デフォルトの名無しさん:2013/04/30(火) 21:21:01.52
>>599
いや、もともと>>567は書く必用があるかどうかの議論でしょ。
なんで>>588は書いてもいいかどうかになっちゃうのさ

601 :デフォルトの名無しさん:2013/04/30(火) 21:36:28.50
>>600
C++03ではaの型がテンプレート引数なら必須、それ以外は「つけちゃいけない」
C++11では他のケースでも「書いていい」と言ってるのが>>588

602 :デフォルトの名無しさん:2013/04/30(火) 21:36:40.28
>>597
externって…何だっけ?

603 :デフォルトの名無しさん:2013/04/30(火) 21:40:11.63
先生、お時間です

604 :デフォルトの名無しさん:2013/04/30(火) 21:40:40.94
まとめると
C++11では明示的にするために
a.template test<int>(); がOKになった
当然、a.test<int>();もOK
で、C++03(まで?)では明示は駄目だから
a.test<int>(); にしる

こんな感じか

605 :デフォルトの名無しさん:2013/04/30(火) 21:43:58.17
>>604
aの型がテンプレート引数でない場合は、な

>>603
externなんぞ害悪にしかならんので忘れてよろしい

606 :デフォルトの名無しさん:2013/04/30(火) 21:54:11.85
aの型がテンプレ引数の時
 ○ a.template test<int>();
 × a.test<int>();
aの型がテンプレでないとき
 △ a.template test<int>();//昔はダメ。G++は今もダメ?
 ○ a.test<int>();

勉強になったよ。奥が深いね…

607 :デフォルトの名無しさん:2013/04/30(火) 21:55:52.77
>>605
アホなこと聞くけど
aの型がテンプレート引数ってコードだとどんなの

608 :デフォルトの名無しさん:2013/04/30(火) 21:57:28.37
>>607
>>578をよみなおせ!

609 :デフォルトの名無しさん:2013/04/30(火) 22:08:01.46
>>606
aの型がテンプレでないとき
 △ a.template test<int>();//昔はダメ。G++は今もダメ?
はC++11の仕様はNG? それともOK?

610 :デフォルトの名無しさん:2013/04/30(火) 22:09:53.36
>>609
11もOK。
>>588にあるよう、14.2の第5段落に
ほぼ同じことが書いてある

611 :デフォルトの名無しさん:2013/04/30(火) 22:21:56.45
おまえらパソコンの大先生だな
どんだけ人生の貴重な時間を
ウンコの時間に割いてるわけ

612 :デフォルトの名無しさん:2013/04/30(火) 22:23:16.30
FDIS見たらきちんとacceptされてたわ
こんなマイナーな仕様変更とかどこで情報得てるんだ? >>588

613 :デフォルトの名無しさん:2013/04/30(火) 22:29:49.03
もう一つのスレで噂になってた
自称アスペさんじゃないの?
GCCも実装漏れするマイナー仕様変更が
ぱっと出てくるなんて

614 :デフォルトの名無しさん:2013/04/30(火) 22:36:11.95
なんにせよすげえわ
参考になる

615 :デフォルトの名無しさん:2013/05/01(水) 01:03:40.70
テンプレートなんてヘッダで定義してまでメンバで使ってるのがもうお笑い種
いちいち書かないとTとconst T&の呼び分けすらしてくれない欠陥品をよく使ってるもんだと感心します
プリミティブのconst参照なんて認めて誰が得するんですか?
限定子やら特殊化やらで結局ゴチャゴチャさせんのなら
素直にオーバーロードした方が綺麗で早そうだね^^;
アッタマ悪ぃ言語w

616 :デフォルトの名無しさん:2013/05/01(水) 01:21:38.39
釣りとしてはイマイチ。
だけどテンプレートを暗黙でインスタンス化
しようとしたらヘッダーが肥大化するし、
翻訳単位ごとに重複したインスタンスを
ODRで一つにする動作も見苦しい。
C#は実行時にインスタンス化だっけ?

617 :デフォルトの名無しさん:2013/05/01(水) 01:45:32.34
>Tとconst T&の呼び分け
正直、スマンカッタ。反省してる。
今度からf(T &&)とf(T const &)のオーバーロードだけにしてくれ。

618 :デフォルトの名無しさん:2013/05/01(水) 06:21:00.27
そして、部分特殊化とオーバーロードの議論に

619 :デフォルトの名無しさん:2013/05/01(水) 17:02:08.29
>>597
ファイル2でコンパイルエラーだろ。
そんな結果になるのならクソなのはコンパイラのほうじゃないの?

620 :デフォルトの名無しさん:2013/05/01(水) 17:10:16.04
>>619
規格も知らんアホは黙っとけ

621 :デフォルトの名無しさん:2013/05/01(水) 17:13:26.32
>>620
7.1.1 [dcl.stc] p8 "The linkages implied by successive declarations for a given entity shall agree."

622 :デフォルトの名無しさん:2013/05/01(水) 17:20:02.47
>>621
http://stackoverflow.com/questions/14403796/can-a-variable-be-declared-both-static-and-extern

623 :デフォルトの名無しさん:2013/05/01(水) 17:36:33.00
>>619
炎上勉強法はもういいです

624 :デフォルトの名無しさん:2013/05/01(水) 17:38:32.53
炎上勉強法って何?wwwwwwwwwwwwwwwww
炎上学習法なら知ってるけどwwwwwwwwwwwwwwwwwwwww

625 :デフォルトの名無しさん:2013/05/01(水) 17:51:53.99
坊主、そんなにたくさん草ばかり生やしてもダメだ
ちゃんと乾燥させておくんだ

626 :デフォルトの名無しさん:2013/05/01(水) 18:06:38.39
>>622
Cのほうはちゃんと規格の文言に基づいて説明できてるけど、C++のほうには対応する文言が
無いから、やっぱり>>621のルールでアウトなんじゃないの?

627 :デフォルトの名無しさん:2013/05/01(水) 18:07:36.13
>>622
何でそうなるんだっけ?
CだとISO/IEC 9899:2011の6.2.2-4に明記してある。
if the prior declaration specifies internal or
external linkage, the linkage of the identifier at the later declaration is the same as the
linkage specified at the prior declaration.

C++の7.1.1には確かに例があるけど、定義は3.5を見ろと書いてあって
3.5のどこを読んだらそうなる?
3.5の内部リンケージの定義に該当しないような

628 :デフォルトの名無しさん:2013/05/01(水) 19:41:52.32
やはりC++はブリブリUNKO
おまえらパソコンの大先生が古文書片手に議論しても
意見がまとまらないなんて、国際標準が意味をなしてない

629 :デフォルトの名無しさん:2013/05/01(水) 20:20:04.58
C++がウンコだとしても仕事がそのウンコでしか出来ないことも多々あるし、そもそもこれ以上のウンコなんて山ほど転がってる。

630 :デフォルトの名無しさん:2013/05/01(水) 20:46:53.86
>>627
3.5のパラグラフ3〜4と7.1.1のパラグラフ8を総合した結果だろうな
分かりづらいけど、例もあるし、エラーにならないのは間違いはない

631 :デフォルトの名無しさん:2013/05/01(水) 21:03:17.14
>>630 これのどこをどう読んだらexternが内部リンケージになるのさ?
国語は苦手なんで教えて欲しい

3.5 段落3
名前空間スコープの名前が内部リンケージとなる条件は以下(俺訳)
a variable, function or function template that is explicitly declared static; or,
a variable that is explicitly declared const or constexpr and neither explicitly declared extern nor
previously declared to have external linkage; or
a data member of an anonymous union.

3.5 段落4
名前空間スコープの名前は前述の内部リンケージでない限り外部リンケージ(俺訳)

7.1.1 段落8
static int b; // b has internal linkage
extern int b; // b still has internal linkage ←???

632 :デフォルトの名無しさん:2013/05/01(水) 21:04:56.23
>>630
どこをどう読んだら>>597の例が>>621のルールに反していないと言えるのか、詳しく。

例以外に根拠にないなら、例が不正ということになるだろうし。

633 :デフォルトの名無しさん:2013/05/01(水) 21:07:09.57
文盲がいるな
>>627は定義と例が矛盾してるって言ってんだろ

634 :デフォルトの名無しさん:2013/05/01(水) 21:15:27.60
・staticで宣言されていれば必ず内部リンケージ(3.5)
・後続の宣言は同じリンケージを持つ(7.1.1)
・externを付けると必ず外部リンケージになるという項目は存在しない

これらを総合すると・・・

635 :デフォルトの名無しさん:2013/05/01(水) 21:37:42.68
>>634
> ・後続の宣言は同じリンケージを持つ(7.1.1)
こんなことが書いてあるのは見当たらない・・・該当箇所の引用もくれ。

636 :デフォルトの名無しさん:2013/05/01(水) 21:40:26.05
>>634
>後続の宣言は同じリンケージを持つ(7.1.1)
これは
>each declaration declaring the same variable name or the same overloading of a function name shall imply
the same linkage
のこと?

だとしたら3.5の4-5と7.1.1の8が矛盾してない?

637 :デフォルトの名無しさん:2013/05/01(水) 21:45:19.24
-----ここまで俺の自演 v(。・ω・。)ィェィ♪-----

638 :デフォルトの名無しさん:2013/05/01(水) 21:46:44.90
C++、KUSOすぎww
externごときでもめんなよ大先生ども

639 :デフォルトの名無しさん:2013/05/01(水) 21:47:47.65
extern使ったことないわ
何に使うんだっけ

640 :デフォルトの名無しさん:2013/05/01(水) 21:51:31.37
cout

641 :デフォルトの名無しさん:2013/05/01(水) 21:52:23.04
先生、お時間です

642 :デフォルトの名無しさん:2013/05/01(水) 21:55:55.72
規制されてて携帯からなので引用は難しい
>>636はサンクス

>>597のgを解析する際にも恐らく3.5のパラグラフ3が適用されるのではないだろうか
いつstaticが付けられたかにまで言及してないので

643 :デフォルトの名無しさん:2013/05/01(水) 21:59:33.24
最後のgを解析する際にも、ね

644 :デフォルトの名無しさん:2013/05/01(水) 21:59:44.68
>>642
> いつstaticが付けられたかにまで言及してないので

その解釈だと extern が先で static が後のケースも通らないとおかしいんじゃないか?

645 :デフォルトの名無しさん:2013/05/01(水) 22:02:56.68
>>642
3.5-3 A name having namespace scope (3.3.6) has internal linkage if it is the name of
a variable, function or function template that is explicitly declared static

これを読んで「その変数はexternでも以前の宣言でstaticだった場合も」
と思うのなら国語力が怪しい

646 :デフォルトの名無しさん:2013/05/01(水) 22:04:22.54
>>645文字化けしてんぞボケ

647 :デフォルトの名無しさん:2013/05/01(水) 22:14:13.34
>>644
プログラムは上から順番に解析されるので、
その場合はexternを解析する時点ではまだstaticがないので3.5のパラグラフ4に従って外部リンケージになる
staticを解釈すると3.5のパラグラフ3に従って内部リンケージになるけど、7.1.1に反するのでエラー、
じゃないかな

>>645
いや、そんなことはない
その項目は識別子に対する規則であって宣言対する規則ではないから、主語から見て

まあ、Cではすっきり書かれていた規則が
なんでここまで分かりにくくなってるんだろうとは思う

648 :デフォルトの名無しさん:2013/05/01(水) 22:51:25.28
>>647
>いや、そんなことはない

ではexternは(明示的なstaticがないから)内部リンケージでないということになるのでは?
わかりにくいでなく、3.5の定義からどうしてexternが内部リンケージ足り得るのか、ご教示願いまする

649 :デフォルトの名無しさん:2013/05/01(水) 23:03:35.10
やはりC++は超ブリブリおUNKO
おまいらパソコンの大先生が古文書片手に議論しても
意見がまとまらないなんて、国際標準が意味をなしていない
スカトロプレイもたいがいにして、仕事が他言語に奪われてレーゾンデートルが無くなった事実を認識したほうがいい

650 :デフォルトの名無しさん:2013/05/01(水) 23:18:33.58
extern 付いた宣言が外部リンケージになるのは、 extern が付いてるからじゃなくて、
実は先行する宣言含めて static が付いてないから、ってことかー。わかりにくいなー。

651 :デフォルトの名無しさん:2013/05/01(水) 23:20:52.19
>>648
3.5は主語が識別子なので、
例えば、宣言以外で出てきたgに対しても適用される
こう書けば分かると思う

static int g; ← 内部リンケージ
void foo(){g=1;} ← 3.5により、内部リンケージ
extern int g; ← 3.5により内部リンケージ

652 :デフォルトの名無しさん:2013/05/01(水) 23:24:49.85
>>650
>わかりにくいな
だから>>597で糞認定された

>>651
わかりやすいな
言語仕様はわかりにくいけど

653 :デフォルトの名無しさん:2013/05/01(水) 23:38:50.08
>extern int g; ← 3.5により内部リンケージ
ダウト
これはgが前のgと同じと判断する前に外部リンケージ変数の宣言と見なすべきで
結果、同名の異なるリンケージ宣言でエラーとすべき

654 :デフォルトの名無しさん:2013/05/01(水) 23:46:10.05
>>653
そんなこと書いた規則は存在しない
こう書いた方が分かりやすいか

static int g;
void foo(){g=1;} ← 3.5により内部リンケージ
extern int g;
void bar(){g=2;} ← 3.5により内部リンケージ

先入観を捨てて規格と照らし合わせる事だ

655 :デフォルトの名無しさん:2013/05/01(水) 23:49:58.12
>>654
static int g;
void foo(){g=1;} ← 3.5により内部リンケージ
extern int g; ←★これは何だったのおかしくね?
void bar(){g=2;} ← 3.5により内部リンケージ

656 :デフォルトの名無しさん:2013/05/02(木) 00:24:45.41
何だったも何も、何にもならない
規格を厳密に適用するとそうなるんだから仕方がない

657 :デフォルトの名無しさん:2013/05/02(木) 00:27:36.32
>>655
extern が付いてたら外部リンケージになるっていう規定は無いんだから、
リンケージについては何も関与せず、ただ定義ではないことを示すのみ。

658 :デフォルトの名無しさん:2013/05/02(木) 00:33:57.19
>>657
>extern が付いてたら外部リンケージになるっていう規定は無いんだから、
>リンケージについては何も関与せず、ただ定義ではないことを示すのみ。

じゃあ
extern int g;
static int g:
これもokだよね?

659 :デフォルトの名無しさん:2013/05/02(木) 00:34:16.79
俺も最初この仕様を知った時キモッ!って思ったので気持ちは分かる
でもそういうものなので諦めれ

660 :デフォルトの名無しさん:2013/05/02(木) 00:35:42.11
>>658
>>647

661 :デフォルトの名無しさん:2013/05/02(木) 00:44:35.34
だから「そういうもの」が3.5のどこに書いてあるのか示せばいいだけだろ
Cとかブロックスコープの3.5p6のような記述を

662 :デフォルトの名無しさん:2013/05/02(木) 00:47:08.69
おまいら、段落番号で会話すんなよ

663 :デフォルトの名無しさん:2013/05/02(木) 00:50:58.51
3.5p4に外部リンケージの定義がある
内部リンケージでなく無名名前空間外なら外部リンケージというもの

この定義の中にexternなんて語は1つも出てこない
(constかconstexprがつく場合を除く)

664 :デフォルトの名無しさん:2013/05/02(木) 00:59:37.33
>>663
内部リンケージかどうかの定義が>>631でそ。
だったら>>597の二つ目はstaticが無いから
外部リンケージだね。
Cにあった「前の宣言に従う」ルールを
C++では削除してんだから。

665 :デフォルトの名無しさん:2013/05/02(木) 01:11:39.22
>>661
まず3.5は限りなくグレーだ。
Cにあった説明が無いから
前の宣言を引き継ぐか
その宣言内で判断すべきか
が自明ではない。つまり
3.5だけでは完結しない。

一方、7.1.1は明確だ。
これらを総合すると、
3.5の怪しい記述は
「Cと同じルールが適用される」
という結論になる。
これで完璧。

666 :デフォルトの名無しさん:2013/05/02(木) 01:31:07.65
>>665
Cとはそもそも内部リンケージの定義が違う
Cでは宣言がstaticを含むなら、その宣言内の識別子(the identifier)は内部リンケージを持つと言っている
C++ではある識別子(a name)はstatic付きで宣言されていれば内部リンケージだと言っている
一見微妙な差に見えるけど、C++は宣言以外の位置にも適用できるようになっている・・・と思う

667 :デフォルトの名無しさん:2013/05/02(木) 02:02:38.53
C++というよりWG21がKUSOだな
難解な上にどうとでもとれる糞記述
仕様の共通化を計るための標準が
目的を果たしていないといっていい
そういう意味では禿の書物は偉大

668 :デフォルトの名無しさん:2013/05/02(木) 02:35:18.05
(⊃д⊂)コンバン・・・∩・д・∩ワー
ここは入門レベルの高いスレですね・・・
ぜんぜんついていけません(><)

669 :デフォルトの名無しさん:2013/05/02(木) 03:08:40.43
>>668
回答者が社会の底辺の糞なので気にしないように

670 :デフォルトの名無しさん:2013/05/02(木) 03:24:58.27
回答者は>>36-37みたいな人です

671 :デフォルトの名無しさん:2013/05/02(木) 03:56:40.42
>>668
マジレスするとこの辺は高いスルースキルが求められている
誰とは言わないが、不必要だと思われるレスはNG等でフィルタリング必須
名目上は↓が初質スレだが、流れが初心者向けじゃない気がするんだぜ……
【初心者歓迎】C/C++室 Ver.84【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1367137639/

672 :デフォルトの名無しさん:2013/05/02(木) 04:20:07.64
ちょ、除いてみたら基地外スレじゃねーか
そっちの方がスルースキル上級

673 :デフォルトの名無しさん:2013/05/02(木) 04:36:46.95
水晶NGワード
 KUSO
 UNKO
 糞
 ウンコ
 段落
 オナニー
 www

674 :デフォルトの名無しさん:2013/05/02(木) 05:25:04.46
               /\___/\
              / ⌒ 俺 ⌒ ;\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
              | (●), 、(●)、 |  | キンタマ中古C言語命!!”
        ⊂.    |  ,,ノ(、_, )ヽ、,,   | < 今日もキンタマ中古C言語でソース乞食するゾォォオオ〜っ♪”
       ,r----、__|.Javaト‐=‐ァ'   .::::|  | 仕事レポート全部くれくれ乞食するぞォォォオオオオ〜っ!”
      /Ruby     \最強ニニ´  .:::/   \____________________
      (ひま,/¬--v   \____/⌒\     
     /⌒ (    ]  |丶 ̄ ̄  /丿  丿      ─
    (_  _丿    ,ノ--v_\ 糞  ノ   ノ       ─
       ̄      ノ宿敵 リ--─ーARM八      
            〔 マシン語 Python__,ノ′ヽ       ギャハハ!!!! バ〜〜〜カ♪”
          ,ノ'' ー--ー┘■■ ̄\  │     
          /    /  ̄■■■/ \  |        #○&#$△#%&$▼&%#!!!!
         ノ   /]アンチ|■AMD命|\|       \\   (↑意味不明w)
         |  /  .| Intel |  )   ノ    
         |/′   |    .|  |---く       
               |    |  \  ] ※)一部見苦しい部分がありますが御了承下さい。

675 :デフォルトの名無しさん:2013/05/02(木) 08:19:41.10
>>672
「この辺」と言っただろうに
それの前スレはまだマシだったんだぜ……?

676 :デフォルトの名無しさん:2013/05/02(木) 10:44:52.00
どうしてJavaやC#使いはC++に憧れるのか
C++を勉強するJavaやC#使いが急増中
C++に男らしさを感じる人が一番多いことが判明
Javaは恥ずかしいと泣きながらC++使いに謝る
JavaがC++の実行速度を上回る!?禁断の-serverオプション
Java/C#使いの半数はC++を使えることが判明

〜勧告ニュース板より〜

677 :デフォルトの名無しさん:2013/05/02(木) 10:45:24.63
STLのstringで、先頭の1文字を削除するシンプルでエレガントな書き方を教えてください。

678 :デフォルトの名無しさん:2013/05/02(木) 10:48:28.32
>>677
まずあなたがボツにした案を列挙していただかないことには、何を答えても
「シンプルじゃない」「エレガントじゃない」と言われそうな気がするので、あまり
気が進みませんね。

679 :677:2013/05/02(木) 11:00:52.78
wstring str;

// 文字列取得

str.erase( 0, 1 );

でいけました!
失礼しました。

680 :デフォルトの名無しさん:2013/05/02(木) 13:16:04.65
STLのstringで、先頭の1文字を削除するシンプルでエレファントな書き方を教えてください。

思いついたのは
string deleter(string s)
{
vector<char> s2(&s[1], &s[s.size()]);
s2.push_bacck(0);
string s3(s2.begin());
retuen move(s3);
}

681 :デフォルトの名無しさん:2013/05/02(木) 14:17:05.76
>>679
とてもエレガントとはいえないな

682 :デフォルトの名無しさん:2013/05/02(木) 14:22:30.26
>>677
破壊的でいいなら
str.erace(str.begin());
でいいんでないの

683 :デフォルトの名無しさん:2013/05/02(木) 15:04:16.11
うるさいゴミ

684 :デフォルトの名無しさん:2013/05/02(木) 15:29:46.72
>>683
いきなりゴミって、どういう事ですか?君には社会の常識がないのですか?
普通は、『あのう、すいませんけれどもレスしないでくれませんか?』とか
『あなたには、スルーという選択肢もありますよ』とか言うものですよ、
あなたみたいに最初から喧嘩腰だと、
言われた方『じゃぁスルーしてみようかな』とかいう気持ちがなくなるものです。
まずは、親切丁寧に人にROMしてくださいと頼むべきだと思いますよ。
そこから、人の輪と協調が生まれ、『よーしクソレス止めてみるか』という気持ちが生まれるわけです

685 :デフォルトの名無しさん:2013/05/02(木) 17:44:27.34
>>683
お前「コンロバーナーwww」だろ

686 :デフォルトの名無しさん:2013/05/02(木) 17:45:01.26
やかましいゴミ

687 :デフォルトの名無しさん:2013/05/02(木) 17:45:18.74
>>685

688 :デフォルトの名無しさん:2013/05/02(木) 17:49:35.02
by seikyou.ne.jp

689 :デフォルトの名無しさん:2013/05/02(木) 19:36:36.45
性教育か

690 :デフォルトの名無しさん:2013/05/02(木) 21:32:45.09
このスレも初心者歓迎スレやapiスレっぽくなってきたな
hogeキチが普通の人のC/C++スレは荒れてないと面白くないからな

691 :デフォルトの名無しさん:2013/05/03(金) 01:28:52.86
世の中には「ごみ」という名字の人も居る

692 :デフォルトの名無しさん:2013/05/03(金) 01:39:45.92
「くず」さんもいた
「アホカス」さん、「メガチンポ」さん、「カタイネン」さん、・・・etc

693 :デフォルトの名無しさん:2013/05/03(金) 02:05:34.44
「相談」しよーそーしよー

694 :デフォルトの名無しさん:2013/05/03(金) 15:59:07.81
このメソッドはオーバーライドしています/オーバーロードしています
というのを明示する修飾子ってなんかある?

695 :デフォルトの名無しさん:2013/05/03(金) 16:01:51.57
override

696 :695:2013/05/03(金) 16:02:55.29
オーバーロードはたぶん無い

697 :デフォルトの名無しさん:2013/05/03(金) 16:10:02.49
書く順番は
void f() const volatile && final override throw()
であってる?

698 :デフォルトの名無しさん:2013/05/03(金) 16:15:08.90
-> decltype()もおながいします

699 :デフォルトの名無しさん:2013/05/03(金) 16:21:42.52
>>695
ありがとう
これってC#にしかない?

700 :デフォルトの名無しさん:2013/05/03(金) 16:23:27.03
>>699
overrideはBisual C++ 2012でもいけるはずだが

701 :デフォルトの名無しさん:2013/05/03(金) 16:23:55.94
ごめん俺が勘違いしてたC++11からあj

702 :デフォルトの名無しさん:2013/05/03(金) 17:12:51.18
Visual C++ 2012だと
auto test() const volatile throw() -> decltype(0) final override
G++ 4.7.3だと
auto test() const volatile throw() final override -> decltype(0)
まあG++の方が正しいんだろうなたぶん

703 :デフォルトの名無しさん:2013/05/03(金) 17:43:18.34
8.4.1p1-2ではvirt-specifierはtrailing-return-typeの後。
なので順番はこんな感じの筈。
[[noreturn]] inline virtual auto test() const volatile && throw() [[noreturn]] -> decltype((void)0) final override try
{
std::exit(0);
}
catch(...)
{
}

704 :デフォルトの名無しさん:2013/05/03(金) 21:06:53.47
voidで渡されたポインターから
元のクラスを調べることはできますか?
void * p=get();
if ( pがクラスAか? )
else if ( pがクラスBか? )

705 :デフォルトの名無しさん:2013/05/03(金) 21:15:30.31
先頭にハッシュでも置いたら?

706 :デフォルトの名無しさん:2013/05/03(金) 21:21:25.30
基本的には無理
型情報を一緒に渡すか、
データの先頭に型情報を置くかする必要がある

707 :デフォルトの名無しさん:2013/05/03(金) 21:41:13.59
辞書データ構造のことをハッシュと言う奴は低脳

708 :デフォルトの名無しさん:2013/05/03(金) 21:43:30.57
お前は突然何を言ってるんだ

709 :デフォルトの名無しさん:2013/05/03(金) 21:45:46.78
http://stackoverflow.com/questions/6572191/how-to-get-the-typeid-of-a-void-pointer
がんばればvoid*でも取得できそう

710 :デフォルトの名無しさん:2013/05/03(金) 21:53:21.47
いつも誰かを叩いていないと不安神経症で死んじゃうんです。
お察しください。

711 :デフォルトの名無しさん:2013/05/03(金) 21:56:12.88
ハッシュドビーフは大好きです

712 :デフォルトの名無しさん:2013/05/03(金) 22:53:45.89
>>709
ハッシュテーブルを自分で準備して自分でタイプ分けしてね、というのがまっとうで、あと神クラスを作れ、とかもありますね。

713 :デフォルトの名無しさん:2013/05/03(金) 23:11:51.36
03で書いてるページ全滅しないかな
職場の老害が値渡しにいちいちアレルギー起こして困る
ついでにconstexprすら実装してない腐れVSも

714 :デフォルトの名無しさん:2013/05/03(金) 23:26:32.08
VS2012でarrayが予約後みたいになってるんですけど
namespace a
{
struct array{};
}
のように新たな名前空間でarrayを使っても平気ですか?

715 :デフォルトの名無しさん:2013/05/03(金) 23:28:47.04
>>714
std::arrayクラスとかあるんだから
何ら問題無かろう

716 :デフォルトの名無しさん:2013/05/03(金) 23:39:31.57
>>712
どうしてデータ構造がハッシュテーブル限定なのかkwsk

717 :デフォルトの名無しさん:2013/05/03(金) 23:46:23.19
>>714
MDSNライブラリ>開発ツールと言語ドキュメント>Visual Studio2012
>Visual C++>C++言語および標準ライブラリ>C/C++言語>C++言語リファレンス
>構文の規則>C++のキーワード
http://msdn.microsoft.com/ja-jp/library/2e6a4at9.aspx
『They cannot be used as identifiers in your program』

718 :デフォルトの名無しさん:2013/05/03(金) 23:47:45.33
>>716
std::mapかハッシュテーブル(なんでもいいけど)
って書いてある

719 :デフォルトの名無しさん:2013/05/03(金) 23:50:00.51
STLがイケメンすぎてつらい。

720 :デフォルトの名無しさん:2013/05/04(土) 00:08:45.87
>>716
ごめんstd::map は平衡二分木だったんだね連想記憶はすべからくハッシュ関数を使っているものだと思い込んでいた

721 :デフォルトの名無しさん:2013/05/04(土) 00:17:30.86
>>720
他の言語でもそうだけど、何で連想配列が
std::mapとstd::unorderd_mapの
二種類あるのかは知っておかないとやばい。
ただmapはBツリーだなんて決まってないよ

722 :デフォルトの名無しさん:2013/05/04(土) 01:13:28.48
>>703
これがC++11なのか?
ずいぶんと変態な言語だなおい

723 :720:2013/05/04(土) 04:23:23.56
>>721
同意

724 :デフォルトの名無しさん:2013/05/04(土) 17:36:30.06
どなたかおしえてください

↓こういう雰囲気でやりたいのですがよく分かりません
codepad.org/KFWuHc9w

725 :デフォルトの名無しさん:2013/05/04(土) 17:50:03.59
class Line;

class Point {
private:
double x, y;
public:
Point(double x, double y) : x(x), y(y) {}
Line getLine(Point b);
};

class Line {
private:
Point a, b;
public:
Line(Point a, Point b) : a(a), b(b) {}
};

Line Point::getLine(Point b)
{
return Line(*this, b);
}

726 :デフォルトの名無しさん:2013/05/04(土) 18:15:23.19
ちなみに実行例

http://codepad.org/YJMfuxcI

727 :デフォルトの名無しさん:2013/05/04(土) 18:16:30.01
y(3.3, 4.4)は不要だったな

728 :724:2013/05/04(土) 18:25:30.04
>>725-727

大変ありがとうございます!
教えて頂きたかった部分以外にも色々と勉強になります

729 :デフォルトの名無しさん:2013/05/04(土) 18:27:24.38
C#だと前方宣言なんて必要ないんで、とまどうかもね
最悪の場合クラスへのポインタを持っておくとか
あ、でもnewも不完全型には適用出来ないのか

730 :デフォルトの名無しさん:2013/05/04(土) 18:30:19.27
そこでPimplですよ
あと、どうしてもおかしな循環参照になってしまう場合、クラスの設計をやり直す

731 :デフォルトの名無しさん:2013/05/04(土) 19:54:26.33
誰か
Line getLine(Point b)
に突っ込めよ

732 :デフォルトの名無しさん:2013/05/04(土) 20:27:01.76
今言っても分からないんじゃないかと思って黙ってたけど
普通に変換コンストラクタで行けるのにな

733 :デフォルトの名無しさん:2013/05/04(土) 20:56:56.23
[Mac/NUC] AGK / DarkBASIC / Basic4GL / 99BASIC 2013 Part.1
http://jbbs.livedoor.jp/bbs/read.cgi/computer/43761/1367197701/l100

734 :デフォルトの名無しさん:2013/05/04(土) 21:14:29.42
C++良く知らないんけど
>>725
Line Point::getLine(Point b)で
Line(*this, b);
これになんで*thisつけるないといけない?

735 :デフォルトの名無しさん:2013/05/04(土) 21:20:32.82
は?

736 :デフォルトの名無しさん:2013/05/04(土) 21:27:19.73
>>734の最後修正
これになんで*thisつけないといけない?

737 :デフォルトの名無しさん:2013/05/04(土) 21:35:00.84
そんな修正はいらない。
Lineは2つのPointからオブジェクトを生成するから
*thisと引数の二つを使用した。
何か問題でも?

738 :デフォルトの名無しさん:2013/05/04(土) 21:35:06.43
自分自身のインスタンスを渡したいんだろ
他に意味があるか?

739 :デフォルトの名無しさん:2013/05/04(土) 21:54:22.04
わざわざ、this渡したの
Line(Point b)がない。つまり
自分自身と引数のPoint bから新たなLineを生成するメソッドがないからってこと?
それを作れって言っているのが>>732の変換コンストラクタ?

740 :デフォルトの名無しさん:2013/05/04(土) 21:57:31.51
>>739
>自分自身と引数のPoint bから新たなLineを生成するメソッドがないから

それがgetLineなのだが、オマエは何を言っているんだ?

741 :デフォルトの名無しさん:2013/05/04(土) 22:01:48.53
変換コンストラクターは>>732の世迷い言なので気にしなくていい

742 :デフォルトの名無しさん:2013/05/04(土) 22:11:50.33
ああ、Line(Point a, Point b)みたいのがあればいいのに
自分自身と引数から作るメソッドなんて不要

743 :デフォルトの名無しさん:2013/05/04(土) 22:14:54.30
>>742
>みたいのがあれば
いやすでにあるだろう。

Line l = x.getLine(Point(5.5, 6.6));
なんて不要で
Line l(x, Point(5.5, 6.6));
にする。
少なくともPointにgetLineというのは意味的におかしい

744 :デフォルトの名無しさん:2013/05/04(土) 22:20:41.93
C++ってホントに難しいですね

745 :デフォルトの名無しさん:2013/05/04(土) 22:35:15.13
効率の良い機械語に落とすために人間が苦労する言語だから仕方がない
楽をしたかったらC#でも使っとけ

746 :デフォルトの名無しさん:2013/05/04(土) 22:35:52.47
C++のムダのなさは快感。

747 :デフォルトの名無しさん:2013/05/04(土) 22:40:16.99
不要なアクセサを取り去ってすっきりさせてみた

http://codepad.org/LlcNqUny

748 :デフォルトの名無しさん:2013/05/04(土) 22:47:44.79
いつも思うんですけど
friend std::ostream& operator<<
って糞コードですよね?
全うな設計者ならpublicなtoString()を作ると思うんです

749 :デフォルトの名無しさん:2013/05/04(土) 22:57:52.72
>>744
完全に理解してる奴なんてこの地上に存在しないってレベルだからな

750 :デフォルトの名無しさん:2013/05/04(土) 23:12:12.89
誰も突っ込まないみたいだけど。

>>721
普通、Bツリーって言ったら二分木(Binary tree)のことじゃなくて
特定の多分岐平衡木構造をさすと思うが。
ディスク上のデータによく使われるやつ。

map の実装が二分木なんて決まってないのはその通りなんでいいけど。

751 :デフォルトの名無しさん:2013/05/04(土) 23:15:58.30
clock_tとint32_tとかの_tってなんですか?

752 :デフォルトの名無しさん:2013/05/04(土) 23:19:11.48
tits

753 :デフォルトの名無しさん:2013/05/04(土) 23:24:29.60
big

754 :デフォルトの名無しさん:2013/05/04(土) 23:41:19.24
>>751
型(type)

昔は(規格内では)typedef型にのみ使われてたけど、
今はwchar_tとか予約語でも使われてる

755 :デフォルトの名無しさん:2013/05/05(日) 00:47:32.21
void get_string(std::string& result); と std::string get_string(); は、
後者は戻り値で余計なコピーが派生するから前者のほうが速いって、
以前言われたんですが、C++11でも同じですか?

756 :デフォルトの名無しさん:2013/05/05(日) 00:58:25.83
>>755
C++11なら後者の方が同じか速いし何より書きやすい。

757 :デフォルトの名無しさん:2013/05/05(日) 00:59:36.22
>>755
get_stringの戻り値で変数を「初期化」するなら、
戻り値最適化が(普通は)働いて
C++03でも後者の方が引数のクリアが必要ない分だけ速い
「代入」するなら確かにC++03だと遅くなるので、
平均的には多分遅くなる(使い方次第だけど)

これはC++11だと右辺値参照引数の代入演算子のおかげで解消される

758 :721:2013/05/05(日) 02:13:39.86
>>750
やや、BはバランスのBと理解しているが

>>757
>「代入」するなら確かにC++03だと遅くなるので、
具体的にどこで遅くなるんだっけか?
この手の話で関連するのは
・初期化先への直接コンストラクト(初期化の話なので関係なし)
・関数内ローカルから戻り値tmpのコピー(関数内なので関係なし)
・戻り値tmpから受け取り側へのコピー(03でも省略許可されていたような)

759 :デフォルトの名無しさん:2013/05/05(日) 02:45:30.38
>>748
それはすべてのオブジェクトが神オブジェクトから派生することを前提に使える仕様、C++ なら自分でそうすればいい

760 :デフォルトの名無しさん:2013/05/05(日) 02:56:42.49
>>758
3つ目
省略可能なのはコピーコンストラクタのみ
代入は省略できない

761 :デフォルトの名無しさん:2013/05/05(日) 03:03:59.38
>>760
代入は確かにコピコンじゃないわな。
でも11だと省略できるのん?

762 :デフォルトの名無しさん:2013/05/05(日) 03:21:32.05
戻り値にあったバッファ所有権を初期化先へ移動させることにより
バッファ自体のコピーなしで実現できるようになった

763 :デフォルトの名無しさん:2013/05/05(日) 03:25:01.41
>>761
できない
その代わり、代入がコピーでなくムーブになるので速い

ただ、それでも引数から渡した方が若干速くなるケースもある
引数に既に中身がある場合、
バッファの再確保が避けられる事があるので

中身が空の場合はほぼ同じ速度かな

764 :デフォルトの名無しさん:2013/05/05(日) 03:31:31.39
RVOを実現しているコンパイラなら名前なしオブジェクトを返却値にすればC++03でもでも効率は悪くならない。
例:
string get_string(){
return string(...);
}

765 :764:2013/05/05(日) 03:37:40.58
途中で送ってしまった。

NRVOを実現できるコンパイラなら名前付きオブジェクトを返却しても効率は悪くならない。
例:
string get_string(){
string ret;
ret = ...
return ret;
}

C++11で委譲代入演算子のオーバロードが定義されているクラスなら、RVO、NRVOが効かなくても
効率は悪くならないはず。

766 :デフォルトの名無しさん:2013/05/05(日) 03:38:27.40
おまいらアスペだな。
03と11の違いじゃなくて
前者と後者の差について答えてやれよ

767 :デフォルトの名無しさん:2013/05/05(日) 03:49:35.66
代入時の話なんだからRVOとか関係なくね?って思うんだけどどうだっけ

768 :デフォルトの名無しさん:2013/05/05(日) 04:00:22.01
俺の想像によるまとめ:
結果が関数内で生成される場合
 初期化の場合
  03: RVOにより直接が期待できる
  11: RVOにより直接
 代入の場合
  03: 最低1回のコピー
  11: ムーヴなので中身のコピーなし★違い

結果が関数内で生成されない場合
 初期化の場合
  03: 最低1回のコピー
  11: 最低1回のコピー
 代入の場合
  03: 最低1回のコピー
  11: 最低1回のコピー

769 :デフォルトの名無しさん:2013/05/05(日) 04:02:42.02
>>767
多分、前者の内部で代入するケースと比較してるのだと思うが、
前者では通常わざわざ代入前にstringをコンストラクトする必要がないので
前者のが速い

770 :デフォルトの名無しさん:2013/05/05(日) 04:05:31.30
と老害が申しております

771 :デフォルトの名無しさん:2013/05/05(日) 04:31:25.65
ムーブも万能の特効薬じゃないから
効率悪い場合もある
引数のバッファを直接再利用できる場合とか

http://ideone.com/x6Guc3

ただ、少なくともコピーよりは効率がいいし、
再利用できない場合はムーブで上等

結局どう使われるかだね

772 :764 765:2013/05/05(日) 04:35:06.97
前者は参照のコピーだけなのでstringオブジェクトの無駄なコピーは発生しない。
後者は
1.get_string関数内でstringオブジェクトを生成。
2.get_string関数内から関数外部にオブジェクトをコピーするために
コピーコンストラクタもしくは代入演算子のオーバロードが実行される。
(受け取る側のオブジェクトが既に初期化されているかどうかによる。)
3.get_string関数内のstringクラスのオブジェクトがデストラクタで削除される。

コンパイラが愚直に解釈すると上記3ステップが実行されることになるため、動作効率が
悪くなってしまう。

C++03ではコンパイラが
・RVO(戻り値最適化の促進)
・NRVO(名前付きオブジェクトの戻り値最適化の促進)
という仕様に対応していれば上記3ステップを、get_string関数外でstringオブジェクト
を直接生成するという1ステップに置き換えられるため、無駄なstringオブジェクトの
コピーと削除が行われなくなるので動作効率の低下は起こらない。但しこれは最適化
してもいいよという仕様であり、必ずそうしなければならないと言うものでは無いため、
最終的にはコンパイラに依存していた。

C++11だと右辺値参照があるため、委譲コンストラクタ、委譲代入演算子のオーバロードが
定義されているクラスなら、RVO、NRVOが効かなかったとしても無駄なコピーは発生しない。
但しget_string関数内のstringクラスのオブジェクトのデストラクタは実行されてしまうので
わずかながら効率が低下するから、RVO、NRVOが効く場合はそちらが優先される。

コンパイラがC++03ならRVO、NRVOが効いているかを考慮する、C++11なら何も気にせず後者で書く。

773 :デフォルトの名無しさん:2013/05/05(日) 04:56:10.63
自分の環境で何回コピーされるかは
こんな所で聞かなくても自分で確認できるでしょ
↓はRVOが効いてる例
http://ideone.com/pEMjxW

774 :デフォルトの名無しさん:2013/05/05(日) 04:56:52.26
.
               /\___/\
              / ⌒ 俺 ⌒ ;\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
              | (●), 、(●)、 |  | キンタマ中古C言語命!!”
        ⊂.    |  ,,ノ(、_, )ヽ、,,   | < 今日もキンタマ中古C言語でソース乞食するゾォォオオ〜っ♪”
       ,r----、__|.Javaト‐=‐ァ'   .::::|  | 仕事レポート全部くれくれ乞食するぞォォォオオオオ〜っ!”
      /Ruby     \最強ニニ´  .:::/   \____________________
      (ひま,/¬--v   \____/⌒\     
     /⌒ (    ]  |丶 ̄ ̄  /丿  丿      ─
    (_  _丿    ,ノ--v_\ 糞  ノ   ノ       今日も見にくい小文字でプログラミングするぞ〜!!(ギャハハ!!wwww”
       ̄      ノ宿敵 リ--─ーARM八      
            〔 マシン語 Python__,ノ′ヽ       ギブ・ミー・レポート!!!! ギブ・ミー・ソース!!!!
          ,ノ'' ー--ー┘■■ ̄\  │     
          /    /  ̄■■■/ \  |        #○&#$△#%&$▼&%#!!!!
         ノ   /]アンチ|■AMD命|\|       \\   (↑意味不明w)
         |  /  .| Intel |  )   ノ    
         |/′   |    .|  |---く       
               |    |  \  ] ※)一部見苦しい部分がありますが御了承下さい。
.

775 :デフォルトの名無しさん:2013/05/05(日) 04:58:19.14
>>772
うん、まあなんだ
他の人の話はよく聞こうね

http://ideone.com/Wx8T03

ローカルだとコピーのがムーブより遅いのだが、
ideoneだとなぜか同じだな

バッファが再利用できる場合はそれが常に最速
再利用できない場合がほとんどならムーブが楽チン

776 :デフォルトの名無しさん:2013/05/05(日) 05:03:39.75
>>775
>ideoneだとなぜか同じだな
理由が本気でわからないんですか?

777 :デフォルトの名無しさん:2013/05/05(日) 05:03:44.05
どうでもいい話だろうけどmoveを委譲と訳すのには違和感がある
プログラミングで委譲って言ったらdelegationあたりがメジャーだからか

あとはまあ意味的に移譲のほうがいい気もするし

778 :デフォルトの名無しさん:2013/05/05(日) 05:06:09.46
目的が委譲
手段が移動
何ら問題はない

779 :デフォルトの名無しさん:2013/05/05(日) 05:12:32.49
規格の用語がmove constructorなのに
委譲コンストラクタでは
他人とのコミュニケーションが
難しくなりますよ?

780 :デフォルトの名無しさん:2013/05/05(日) 05:20:16.90
うわっ、つまんねw

781 :デフォルトの名無しさん:2013/05/05(日) 05:24:41.86
>>748
クッソ遅いし普通はね
つか、相互参照を見た瞬間に掻き毟りたくなった

>>755
http://d.hatena.ne.jp/yohhoy/20120524/p1

11の難しさは内容よりも03ジジイの説得にある
あいつら英語読めないからな
hogeやfooで書かれた化石のような書籍が連中のバイブル

782 :デフォルトの名無しさん:2013/05/05(日) 05:32:21.80
>>781
friend std::ostream& operator<<
がイケてないのは
「オブジェクトの内容を文字列に変換」
と言う極めてありがちな処理の
汎用性を放棄しているところ。
こんなことも出来るぜアピールとしてはいいけど
cout << obj.toString() << endl;
の方が100倍マシ

783 :デフォルトの名無しさん:2013/05/05(日) 05:37:15.23
>>782
>>759

784 :デフォルトの名無しさん:2013/05/05(日) 05:37:28.03
>>781
英語の前に実測値を読めるようになった方がいいよ

コピーとムーブではムーブのが速いというだけで、
それ以外のケースよりムーブのが速いとは限らない

速度を非常に気にするケースでは
ムーブが最適解にならないケースがあることを知るべき
(いずれにせよコピーは論外だけどね)

785 :デフォルトの名無しさん:2013/05/05(日) 06:24:03.72
std::to_stringが入ったんだし
T::toStringよりもstd::to_string(T)にしたほうがいいと思う

786 :デフォルトの名無しさん:2013/05/05(日) 08:08:46.48
>>775
http://ideone.com/KUI8Bl
http://ideone.com/Ddh0Nj

787 :デフォルトの名無しさん:2013/05/05(日) 08:24:23.73
>>782
C#に頭毒されすぎ
そんなにtoStringが欲しかったら自分で作れ

「オブジェクトの内容を文字列に変換」するオーバーヘッドが馬鹿にならないので
C++は便利さを捨てて「自分でやれ」式になってるんだろ
Cの精神を踏襲している

788 :デフォルトの名無しさん:2013/05/05(日) 08:24:53.70
>>786
上はわざわざtest2をコストアップさせて何がしたいの?
馬鹿なの? 死ぬの?

ムーブを利用する場合は
新しくメモリを確保してからswapになる
どうしてもメモリ確保が入るので
バッファの再利用ができる場合は遅い

一方、バッファの再利用ができない場合はムーブで良い
例えば、str::ostringstreamを使って文字列を作る場合とか

ケースバイケースなんだよ
基本的には気にせずムーブしていいけど、
シビアな場合はムーブを過信しちゃいけないという事だ

789 :デフォルトの名無しさん:2013/05/05(日) 09:44:27.88
ムーブ以前の問題だな。
警戒するまでもなく、こんな冗長なキャストを見た時点で設計の失敗を確信する。
便所の中で如何に清潔に飯を食うかを苦心するようなもんだ。

790 :デフォルトの名無しさん:2013/05/05(日) 09:49:28.73
ムーブさせないようにする説明用のキャストを見て
設計とか言っちゃう男の人って……

791 :デフォルトの名無しさん:2013/05/05(日) 10:14:46.95
だったらもう少しキャスト已む無しと思えるようなものを提示しなさい。
ムーブの方が遅くなる時点で、既に効率化とかいうレベルにないコードであることが分からないか。

792 :デフォルトの名無しさん:2013/05/05(日) 10:26:13.71
C++03的動作との比較なんだから強引なのは当然

ムーブと速度が変わらないのは謎
gcc 4.6.0 だと明らかにコピーのが遅いんだが、
gcc 4.7.2 だと同じになるようだ

793 :デフォルトの名無しさん:2013/05/05(日) 10:59:44.04
コンパイラ進歩してるんだな

794 :デフォルトの名無しさん:2013/05/05(日) 11:27:28.25
進歩か?
怪しい動きに見えるんだが……

795 :デフォルトの名無しさん:2013/05/05(日) 11:28:30.16
お前ごときがコンパイラ様にケチつけるとは

796 :デフォルトの名無しさん:2013/05/05(日) 11:31:24.24
コンパイラオプションにmoveが使えるところには使うってオプションがあるとか?
いちいち読んでないけど

797 :デフォルトの名無しさん:2013/05/05(日) 12:11:08.14
彼らはBASICから得られた体験を ” タブー視 ” しなければいけないため、常に孤立を要求される。

798 :デフォルトの名無しさん:2013/05/05(日) 13:06:46.63
797 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

799 :デフォルトの名無しさん:2013/05/05(日) 13:54:13.35
質問なのですが、std::queue<T>に格納されている要素へのアクセスってどうやれば効率的でしょうか。
少なくともVS2010のSTLだと、front()とback()はあってもbegin()、end()、operator[]()のどれも存在しないので、
全要素を別のコンテナにpop()して、read modify語に同じ順序で全要素をpushし直すとか
別のstd::queue<T>に移し変えつつread modifyする、ぐらいしか思いつきません…
実は随時要素アクセス可能なFIFOは全く別の手段で実現すべきもの?

800 :799:2013/05/05(日) 14:00:00.18
まあ目下具体的に悩んでいる対象なのはキューの長さが固定でTはbittable(ていうかint)なので
単純に生の配列を使って自前でキューイングしようと思いますが、今後常にそうとも限らないし、

801 :デフォルトの名無しさん:2013/05/05(日) 14:01:58.48
>>799
キュー構造というのは本来そういうもの(純粋にFIFOするもの)だ。

FIFO以外の機能が欲しければ deque なんか使って自作するしかないが、
それはもう純粋なキューじゃないな。

802 :デフォルトの名無しさん:2013/05/05(日) 19:50:36.55
C++11では
my_string(my_string &amp;&amp;other)
operator=(my_string &amp;&amp;other)
も書けよになったのか。C++複雑になりすぎ

803 :デフォルトの名無しさん:2013/05/05(日) 21:18:31.24
面倒なら
my_string(my_string other)
my_string &operator =(my_string other)
でまとめても良い

804 :デフォルトの名無しさん:2013/05/05(日) 23:23:00.12
乱数ほしいんだけどcstdlib使うのってダサい?

805 :デフォルトの名無しさん:2013/05/05(日) 23:26:25.11
メルセンヌツイスター使え

806 :デフォルトの名無しさん:2013/05/05(日) 23:27:34.50
乱数は /dev/urandom から取得するのが普通。

807 :デフォルトの名無しさん:2013/05/05(日) 23:30:53.10
まず、
可搬性の要否
再現性の要否
周期
をはっきりさせなさい

808 :デフォルトの名無しさん:2013/05/05(日) 23:32:16.35
std::random使え

809 :デフォルトの名無しさん:2013/05/05(日) 23:32:20.04
>>804
ダサすぎ。C++11になんか格好良い奴があるんじゃないのか

810 :デフォルトの名無しさん:2013/05/05(日) 23:34:44.76
C++11ってカッコイイの多いよな。

811 :デフォルトの名無しさん:2013/05/05(日) 23:42:37.74
ラムダの仮引数の型を書くのが面倒なんだけど、C#みたいに型推論できないの?

812 :デフォルトの名無しさん:2013/05/05(日) 23:46:46.67
C++はゆとり・へたれ用言語じゃない

813 :デフォルトの名無しさん:2013/05/05(日) 23:54:27.41
>>811
C++1yからできるようになる予定

814 :デフォルトの名無しさん:2013/05/05(日) 23:56:30.14
>>812涙目www

815 :デフォルトの名無しさん:2013/05/06(月) 00:09:39.42
>>813
そうなんだ。
じゃあ最初からできるようにしとけよハゲ。

816 :デフォルトの名無しさん:2013/05/06(月) 00:10:36.49
Cから見ればC++もゆとり用言語で、ゆとり様のために拡張しまくりだからな

817 :デフォルトの名無しさん:2013/05/06(月) 00:17:27.58
でもC++使ってもさ、ちっともゆとれないよな

818 :デフォルトの名無しさん:2013/05/06(月) 00:29:06.98
>>815
じじいの多いC++屋が忘れていた。爺には良くあること
現状のC++は、C++屋が年をとり介護か必要になり、自分で色々出来なくなった。
それを補うためにゆとり拡張を気合を入れてするようにしたって感じかな

819 :デフォルトの名無しさん:2013/05/06(月) 00:32:04.75
彼らはBASICから得られた体験を ” タブー視 ” しなければいけないため、常に孤立を要求される。

820 :デフォルトの名無しさん:2013/05/06(月) 00:51:42.52
禿も年なんだから許せよ禿

821 :デフォルトの名無しさん:2013/05/06(月) 00:54:07.47
POKE, PEEK, USR

822 :デフォルトの名無しさん:2013/05/06(月) 02:39:35.02
>>816
Better Cと呼ばれる(ことがある)所以である

823 :デフォルトの名無しさん:2013/05/06(月) 03:15:10.76
いいから黙ってC++使いこなせよ
代替はないんだから

824 :デフォルトの名無しさん:2013/05/06(月) 11:48:23.13
代替?
オナニー以外でC++を使うというのか?

825 :デフォルトの名無しさん:2013/05/06(月) 11:59:50.31
逆にオナニーだけでC++使ってる人って、何考えてるのか分からん

どういう意味があるの?

826 :デフォルトの名無しさん:2013/05/06(月) 12:03:52.59
普通にC++は現役でいろんな制御システムで使ってるから。
つい最近CからC++に移行したのもやってるし
そいつ無職かITドカタなんだよ、察してやれ

827 :デフォルトの名無しさん:2013/05/06(月) 12:04:32.11
Qとかオナニーで使ってるんだろ
本当はCしか分からない(それも糞コードしか書けない)のにC++になると
よりいっそうその糞さが目立って見てられない

828 :デフォルトの名無しさん:2013/05/06(月) 12:48:22.00
オナニーだけで使うなら普通はCかC#、JAVAあたりになるわな。
複雑怪奇なC++を選ぶ理由はあんまりない。

829 :デフォルトの名無しさん:2013/05/06(月) 12:51:54.95
>>828
標準化委員会ェ・・・

830 :デフォルトの名無しさん:2013/05/06(月) 13:01:40.62
>>828
Qの自己愛性パーソナリティ障害の「僕ちゃんってすごいでしょ」病が出ていてアイタタタ
だよな

831 :デフォルトの名無しさん:2013/05/06(月) 15:00:59.32
PS3ゲームの体験版とかでSTLのライセンスが表示されてるのたまに見るな

832 :デフォルトの名無しさん:2013/05/06(月) 15:03:38.15
STLって何ですか?
C++しか使ったことがないのでわかりません

833 :デフォルトの名無しさん:2013/05/06(月) 15:05:55.83
>>832
C++をやっていればSTLを知らないはずがない
嘘乙

834 :デフォルトの名無しさん:2013/05/06(月) 15:19:12.61
>>833
ほう、ではそのSTLとやらの定義を伺おうか。
と荒れるからやめれ

835 :デフォルトの名無しさん:2013/05/06(月) 15:30:41.47
普通に STL でぐぐればいいだけでしょ。

http://ja.wikipedia.org/wiki/Standard_Template_Library

836 :デフォルトの名無しさん:2013/05/06(月) 15:31:31.49
>>834
馬鹿発見
ISO/IEC 14882:2003も読んでない奴はすっこんでろ

837 :デフォルトの名無しさん:2013/05/06(月) 15:40:53.48
>>836
ISO/IEC 14882:2003のどこに書いてあるの?
1998でも2011でもいいけど

838 :デフォルトの名無しさん:2013/05/06(月) 15:43:47.58
>>837
自分で「規格票は読んでいません」と告白しなくてもいいよ

839 :デフォルトの名無しさん:2013/05/06(月) 15:47:16.37
読んだけど見あたらなかったな

840 :デフォルトの名無しさん:2013/05/06(月) 15:52:18.74
企画は読んでないけれど(汗)、
wikiが『STLの定義(何がSTLの一部であるか)には 様々な意見があり、人によりその解釈は違ってい ることがある。ここではC++標準ライブラリのコ ンテナ、イテレータ、アルゴリズム、関数オブ ジェクトを指すものとする』
って書いてある以上、企画にSTLという用語の定義が無いってこと?

841 :デフォルトの名無しさん:2013/05/06(月) 15:54:56.97
企画って何?番組の企画でもするのか?

842 :デフォルトの名無しさん:2013/05/06(月) 15:55:28.97
>>893
だろうな
馬鹿には見えないから

843 :デフォルトの名無しさん:2013/05/06(月) 15:56:15.32
×>>893
>>839
読みたかったら利口になりたまえ

844 :デフォルトの名無しさん:2013/05/06(月) 15:57:13.37
なんでSTLのライセンス表示っているの?業務で使うのやめないとダメ?
STLportだけとかじゃなく全部なの?

SDLの間違いとかだったら>>831は死罪な

845 :デフォルトの名無しさん:2013/05/06(月) 15:58:00.89
ライセンス表示があるってことは
誰かの著作物ってこったろ。

846 :デフォルトの名無しさん:2013/05/06(月) 16:02:40.80
>>841
荒らすなボケ
>>843
「書かれていない」系のレスには
書かれているページを答えろよカス

847 :デフォルトの名無しさん:2013/05/06(月) 16:03:13.83
>>846
規格票を持ってない奴に説明しても無駄

848 :デフォルトの名無しさん:2013/05/06(月) 16:12:25.64
>>847
さて、どこに書いてあるか答えてもらおうか。

[PDF] ISO/IEC 14882:2003(E)
http://cs.nyu.edu/courses/spring13/CSCI-GA.2110-001/downloads/C++ Standard 2003.pdf

849 :デフォルトの名無しさん:2013/05/06(月) 16:15:08.38
見れるんなら自分で分かるだろ
分からないならお前が低脳なだけ

850 :デフォルトの名無しさん:2013/05/06(月) 16:18:00.26
スルーすればいいのに、流石にこれは恥ずかしい

851 :デフォルトの名無しさん:2013/05/06(月) 16:18:18.06
それでも教えてほしいというなら金払え

100万ほどでいいよ

852 :デフォルトの名無しさん:2013/05/06(月) 16:19:44.26
Qがご迷惑をお掛けしておりますm(o´・ω・`o)mペコリン

853 :デフォルトの名無しさん:2013/05/06(月) 16:20:12.64
>>849
読んだ結果が>>839なんだろカス
つまりSTLは妄想ってことでFA

854 :デフォルトの名無しさん:2013/05/06(月) 16:24:51.10
規格に大きく貢献したので妄想は言い過ぎだが
そろそろSTLという言葉は避けた方がいいのかも試練

855 :デフォルトの名無しさん:2013/05/06(月) 16:24:53.48
>>852
きゃわっ☆

856 :デフォルトの名無しさん:2013/05/06(月) 16:27:46.79
boostも標準ライブラリに取り込まれたやつはboostって呼ばれないのと同じこと

857 :デフォルトの名無しさん:2013/05/06(月) 16:29:31.33
iostreamとauto_ptrはSTLですか?

858 :デフォルトの名無しさん:2013/05/06(月) 16:33:17.19
833フルボッコワロタ

859 :デフォルトの名無しさん:2013/05/06(月) 16:47:04.82
C++の標準ライブラリでテンプレート使ったもの=STL
これマメチな

860 :デフォルトの名無しさん:2013/05/06(月) 16:49:16.09
そんなオレオレ定義はチラシの裏にでも書いとけよ。

861 :デフォルトの名無しさん:2013/05/06(月) 16:57:19.26
>>858
>>858
>>858

862 :デフォルトの名無しさん:2013/05/06(月) 17:02:07.82
↑これどういう意味?

863 :デフォルトの名無しさん:2013/05/06(月) 17:15:37.12
STLの定義くらいどうでも良いものも珍しい

864 :デフォルトの名無しさん:2013/05/06(月) 17:24:23.77
さあさあ世間様の連休も今日までですよ。
明日からは曜日感覚と書き込み時間に少しだけ気を付けてね。
身分がばれちゃうからw

865 :デフォルトの名無しさん:2013/05/06(月) 17:29:01.78
>>859
C++の標準ライブラリ(Cから引き継いだものを除く)=STL

866 :デフォルトの名無しさん:2013/05/06(月) 17:38:24.29
>>846
消えろゴミクズ
質問したら荒らし扱いかキチガイ

867 :デフォルトの名無しさん:2013/05/06(月) 17:52:16.71
↑気に障ったらしい

868 :デフォルトの名無しさん:2013/05/06(月) 18:21:56.06
自分のレスの愚かさにようやく気づいて
恥ずかしさをごまかすために
暴れた奴がいるふりをしているんです。
お察しください。

869 :デフォルトの名無しさん:2013/05/06(月) 18:49:08.61
boostからホイホイバクってくるってチョンすぎじゃね

870 :デフォルトの名無しさん:2013/05/06(月) 19:27:11.35
>>827
>本当はCしか分からない
へえQのCを認めているんだ、あり得ない‥‥

871 :デフォルトの名無しさん:2013/05/06(月) 19:30:34.98
>>869
パクってるんじゃねーよ
boostの開発者にC++標準化委員会が極めて多いだけだ

872 :デフォルトの名無しさん:2013/05/06(月) 19:31:05.26
>>870
>(それも糞コードしか書けない) とちゃんと書いてあるだろwww

873 :デフォルトの名無しさん:2013/05/06(月) 20:16:12.91
>>872
あんなものを「分かる」とかいってる分だけお前のお里も知れるというもの
あやつは「根本的に何一つ分かっていない」

874 :デフォルトの名無しさん:2013/05/06(月) 20:19:05.51
>>873
文法だけは辛うじて分かっているようだけど、とにかく無駄が多いよな

875 :デフォルトの名無しさん:2013/05/06(月) 20:20:23.92

ってなんだ?

876 :デフォルトの名無しさん:2013/05/06(月) 20:22:19.10
http://toro.2ch.net/test/read.cgi/tech/1313183984/

877 :デフォルトの名無しさん:2013/05/06(月) 20:24:26.78
アルファベットたった一文字で本人が特定出来るとか、よほど嫌われてるんですね

878 :デフォルトの名無しさん:2013/05/06(月) 20:27:38.46
struct A{
 void func0(){}
 void func1(){}
};
template<typename T> struct B{
 void func(){
  T t;
  t.func2();
 }
};

B<A> b;
//b.func();

この場合b.func()を呼ばなければコンパイルエラーにはなりませんか?

879 :デフォルトの名無しさん:2013/05/06(月) 20:29:10.09
Things You Can Tell Just by Looking at his Code.

880 :デフォルトの名無しさん:2013/05/06(月) 20:31:07.32
実体化した時点で終わりです

881 :デフォルトの名無しさん:2013/05/06(月) 20:33:29.65
>>877
Qは下手ながらも一応プログラムを書いている中年ニート
uyは宿題スレの回答をそのまま提出して留年したバカでプログラムも書けなくて
荒らしているだけの真性キチガイ
片山も相当きてるが頭は良さそう

882 :デフォルトの名無しさん:2013/05/06(月) 20:36:12.06
まとめるとこうか?

一般マ≫片>Q>u

883 :デフォルトの名無しさん:2013/05/06(月) 20:38:22.55
>>878
クラスAにfunc2()がないんだからコンパイル通らないっしょ

884 :デフォルトの名無しさん:2013/05/06(月) 20:41:43.92
>>882
どこかに《超えられない壁》を挿入してくれないか?

885 :デフォルトの名無しさん:2013/05/06(月) 20:41:58.11
>>883
VS2012では通ってます。

886 :デフォルトの名無しさん:2013/05/06(月) 20:42:40.98
Exceptiona C++ 項目31 を読め馬鹿ども

887 :デフォルトの名無しさん:2013/05/06(月) 20:44:59.81
gcc4.8では通らないなあ

>>886
読んだけどどうもVS2012のバグっぽいな

888 :デフォルトの名無しさん:2013/05/06(月) 20:46:10.04
>>878
ならない。14.7.1p2参照

889 :デフォルトの名無しさん:2013/05/06(月) 20:47:49.45
項目32じゃないの?

890 :デフォルトの名無しさん:2013/05/06(月) 20:50:23.12
あ、ごめん質問を

B<A> b;
b.func();

コンパイルが通りません

と読み間違えていた

//でコメントアウトするとgcc4.8でも通る

891 :デフォルトの名無しさん:2013/05/06(月) 20:50:34.18
どうでもいいけどこのスレってコピーコンストラクタを実装なしでprivateに置いとくテクニックも知らない連中ばっかなん

892 :デフォルトの名無しさん:2013/05/06(月) 20:52:00.34
昔、そんなコードを書いてた時期もありました。

893 :デフォルトの名無しさん:2013/05/06(月) 20:53:33.43
>>878
ならない
使われないメンバ関数は実体化されない

>>891
今は = delete の時代だよ

894 :デフォルトの名無しさん:2013/05/06(月) 20:55:07.77
>>884
普通の人《超えられない壁》一般マ≫片>Q>u

895 :デフォルトの名無しさん:2013/05/06(月) 20:56:01.23
>>894
ワロス

896 :デフォルトの名無しさん:2013/05/06(月) 20:58:16.40
>>893
11が出る前はprivateに置いてたろ?それを知らないとしたら問題だろ?

897 :デフォルトの名無しさん:2013/05/06(月) 21:01:20.09
11の後に学習を始めた人は無視ですか?
と揚げ足の揚げ足をとってみる

898 :デフォルトの名無しさん:2013/05/06(月) 21:01:39.29
>>896
そんなテクニックはboost::noncopyableでとっくに使われていた

899 :デフォルトの名無しさん:2013/05/06(月) 21:02:39.46
>>896
boost::noncopyable かそれに類するものを private 継承だな

900 :デフォルトの名無しさん:2013/05/06(月) 21:16:58.14
>>899は会話の出来ないアスペ

901 :デフォルトの名無しさん:2013/05/06(月) 21:27:03.97
>>898-899
なんか論点がずれてるんだけど大丈夫?

902 :デフォルトの名無しさん:2013/05/06(月) 22:18:56.72
>>899
何でprivateなの?

903 :デフォルトの名無しさん:2013/05/06(月) 22:23:05.98
>>902
横レス。ダイアモンド継承回避だお

904 :デフォルトの名無しさん:2013/05/06(月) 22:32:38.35
ダイヤモンドって高級だけど、
プログラムでは「死の」なんだよなw

905 :デフォルトの名無しさん:2013/05/06(月) 22:33:43.09
11の後に学習を始めた人とか初心者の方に行けよ

906 :デフォルトの名無しさん:2013/05/06(月) 22:34:59.58
化石03マはさっさと滅べよ
冗長な慣習ばかり残しやがって

907 :デフォルトの名無しさん:2013/05/06(月) 22:36:04.78
11の後に勉強を始めたとしても現状はdeleteで自動生成抑制できる環境が使えるのは大方個人開発だけだしなあ

908 :902:2013/05/06(月) 22:38:34.60
>>903
すみませんちょっと理解できませんでした。
noncopyable がpublic継承だと問題が起きるのは
どんなコードでしょうか?
むしろnoncopyableであることをpublicに
主張すべきではないかと思うのです

909 :デフォルトの名無しさん:2013/05/06(月) 22:41:38.90
C++11の新機能が便利すぎて最高w

910 :デフォルトの名無しさん:2013/05/06(月) 22:56:11.39
bind2ndとは何だったのか

911 :デフォルトの名無しさん:2013/05/06(月) 23:03:11.64
C++11怖すぎ

912 :デフォルトの名無しさん:2013/05/06(月) 23:04:30.59
冷凍したC++11規格書でプログラマを殴り続けると死ぬ

913 :デフォルトの名無しさん:2013/05/06(月) 23:07:32.04
bindさんの万能感は異常

914 :デフォルトの名無しさん:2013/05/06(月) 23:12:47.72
>>908
いらないよそんなの
特に関係性のないクラスを全部
boost::noncopyable& に渡せるとかキモいだけ

915 :デフォルトの名無しさん:2013/05/07(火) 00:39:23.63
C++の規格を読みたいんですが、タダで読めますか?

916 :デフォルトの名無しさん:2013/05/07(火) 00:52:02.84
>>915
>>848で世界中に共有されてるじゃないか

917 :デフォルトの名無しさん:2013/05/07(火) 00:57:02.09
今更03を勧めるってのもね
俺は11のFDIS持ってるけど、
もう公開されてないみたいね

918 :デフォルトの名無しさん:2013/05/07(火) 01:04:50.12
そのぐらい買えよ
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=ISO%2FIEC+14882%3A2011&dantaiCd=ISO&status=1&pageNo=0
>原本冊子をお求めの場合は、CD-ROMでのお届けとなります

919 :デフォルトの名無しさん:2013/05/07(火) 01:24:36.50
冊子を注文してCD-ROMが届いたら
返品ものなのだが

920 :デフォルトの名無しさん:2013/05/07(火) 12:14:51.75
FDISならその辺でキャッシュに残ってそうなものだけど
だがドラフトはあまりオヌヌメできないかな

921 :デフォルトの名無しさん:2013/05/07(火) 12:16:14.12
PDFも大学に行けば普通に共有されていたりするけどな

922 :デフォルトの名無しさん:2013/05/07(火) 17:47:38.83
最近は自宅で共有する人も多いみたいだよ

923 :デフォルトの名無しさん:2013/05/07(火) 20:02:57.66
リソースから.wav形式のものを再生したいのですが、
どうすればいいでしょうか。
また、プログラム起動時再生するようにして、
ボタンでON/OFFを切り替えることは可能でしょうか

924 :デフォルトの名無しさん:2013/05/07(火) 20:03:45.61
すれち

925 :デフォルトの名無しさん:2013/05/07(火) 20:16:18.68
>>923
C++11にそれを実現するSTLがあったような

926 :デフォルトの名無しさん:2013/05/07(火) 20:21:56.33
どちらかというと必用なのは
オンオフ情報をレジストリに
読み書きするSTL

927 :デフォルトの名無しさん:2013/05/07(火) 23:22:32.66
>>原本冊子をお求めの場合は、CD-ROM
のCD-ROMを原本冊子にswapするSTLを探してるんだけど

928 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/07(火) 23:22:44.58
>>923
多重再生が不必要で単純にWAV再生したいなら、PlaySound関数を使う。
ON/OFFの状態は、INIファイルかレジストリに記録しておく。

929 :デフォルトの名無しさん:2013/05/08(水) 04:12:06.57
>>923
Win32API質問箱 Build114
http://toro.2ch.net/test/read.cgi/tech/1363042502/

930 :デフォルトの名無しさん:2013/05/08(水) 05:02:02.34
以下の簡単なプログラムがエラーになります
誰か助けて下さい
http://ideone.com/4F1kmr

931 :デフォルトの名無しさん:2013/05/08(水) 06:30:46.25
>>930
http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200905/09050032.txt

これだろ

932 :デフォルトの名無しさん:2013/05/08(水) 08:28:08.81
y1がグローバル変数とか糞過ぎる

933 :デフォルトの名無しさん:2013/05/08(水) 19:20:03.40
変数とか関数とかクラスとかの
頭文字って全部大文字にで良い?
名前のルールが分からん……

934 :デフォルトの名無しさん:2013/05/08(水) 19:29:10.63
>>933
C++の規格書に載っている。C++11を規格書読め
趣味なら俺ルールで良いけど、仕事なら規格書のスタイルが規範

935 :デフォルトの名無しさん:2013/05/08(水) 20:01:54.42
ぷっ

936 :デフォルトの名無しさん:2013/05/08(水) 20:04:42.73
趣味でもありえない

937 :デフォルトの名無しさん:2013/05/08(水) 20:51:22.36
仕事なら指定されたコーディング規約に従うでしょ

あと、規格書の「T*」スタイルは
臭い物にフタをしただけの一貫性のない書き方
なので好きじゃない

938 :デフォルトの名無しさん:2013/05/08(水) 22:16:11.19
> 規格書の「T*」スタイル
ってたとえばどんなやつ?

939 :デフォルトの名無しさん:2013/05/08(水) 22:40:21.25
linux/windows 環境です。

通信相手のユーザーから渡されたバイト配列が
「正当なUTF8かどうか?」をチェックしたいです。

調べて見たところ、ICU、iconv、法則を元に自前で実装 等色々手段が
ありそうなのですが、「これつかっとけ」みたいなおすすめライブラリはありますか?

940 :デフォルトの名無しさん:2013/05/08(水) 23:17:18.20
正当ってどれのことー?とか考えると色々ダルいね
・UTF-8として解釈不可能
・UTF-8として解釈可能だが冗長
・サロゲートペアが冗長
・文字の結合その他規則により冗長
・正規化された文字列

一番上は弾く以外ないけれど、他のは受け入れるかどうかや受けれてから変換するかとか色々…
使うシステム側が受け入れ可能な"正当"によっても何処まで正規化するかは変わるだろうなぁ
最後の奴とかは、自前で検査を実装するのは変態か馬鹿しか居ないレベルでダルそう

941 :デフォルトの名無しさん:2013/05/08(水) 23:28:29.63
上3つは規格上不正だったような

942 :デフォルトの名無しさん:2013/05/08(水) 23:31:20.91
>>940
ありがとうございます。
なるほど、まずその定義が必要なのですね。

・データベースに読み書きが正しくできること
・不正なUTF8を許可してしまい、ハングアップしたり、セキュリティーホールにならないこと

あたりのアバウトな認識でやってました

2010用のICUビルドが2012で利用できたので
まずはこれからいじり倒してみようと思います

943 :デフォルトの名無しさん:2013/05/09(木) 00:17:24.77
>>941
3つ目はUTF-16を前提としたシステムの互換性のために敢えて採用する場合があって、
その場合はCESU-8とかModified UTF-8とかいう名前になるけど、それをUTF-8と呼んじゃう場合があるから一応な
DBで古いOracleだかMySQLだかはそれ使わんとダメだった筈で、942の条件としては意識はしたほうが良いかもしれない
不正だろうが受け入れるシステムは受け入れてしまうし、吐き出すシステムは吐き出してくるからなぁ…

>>942
セキュリティホールって意味では「受けれてから変換する」動作でアレコレあるから特に注意したほうが良いかも
ダメ文字判定をUTF-8の冗長表現で突破とか、「それUnicodeで」で書かれてるようなUnicode自体のアレコレとか

944 :デフォルトの名無しさん:2013/05/09(木) 07:21:53.02
>>943
>CESU-8とかModified UTF-8とかいう名前になる
Unicode規格のどこにそんなことが書いてあるのかね?

945 :デフォルトの名無しさん:2013/05/09(木) 08:16:24.04
>944
COMPATIBILITY ENCODING SCHEME FOR UTF-16: 8-BIT (CESU-8)
http://www.unicode.org/reports/tr26/tr26-1.html

946 :デフォルトの名無しさん:2013/05/09(木) 08:18:57.23
ごめん。最新版こっち。 http://www.unicode.org/reports/tr26/

947 :デフォルトの名無しさん:2013/05/09(木) 12:27:52.29
struct super{};
template<typename T> struct A{};
A<super> a;

C++03でTがsuperを継承してるかコンパイル時に調べる方法ありますか?

948 :デフォルトの名無しさん:2013/05/09(木) 12:43:55.26
>>946
>Status This is a draft document
提案中のドラフトですか

949 :デフォルトの名無しさん:2013/05/09(木) 12:48:11.68
BOOST_STATIC_ASSERT + boost::is_base_and_derived

950 :デフォルトの名無しさん:2013/05/09(木) 21:06:39.55
>>938
int* a, b;
ってやつじゃない?

ただそこまで言ったら
const intも本当は
int constにすべきなんだろうけど。。

951 :デフォルトの名無しさん:2013/05/09(木) 21:28:19.12
複数の変数を一行で定義するからダメなんだよ
変数毎に行を変えればそんな事を気にする必要は無い

952 :デフォルトの名無しさん:2013/05/09(木) 21:36:16.63
enum・・・いや何でもない

953 :デフォルトの名無しさん:2013/05/09(木) 22:27:49.67
>>951
>変数毎に行を変えれば
それは正に「臭いものにふた」だよ。
もともと左から右に読む文法じゃないんだから、
変数ごとにしたって
 const int* p;
 const int* const* const (* const p[1])();
はやっぱり誤解を招く。

954 :デフォルトの名無しさん:2013/05/09(木) 22:30:50.86
そう思ってるのはお前だけ

955 :デフォルトの名無しさん:2013/05/09(木) 22:32:36.48
ポインタの宣言間違えてもコンパイルで気付くし別にいいでしょ

956 :デフォルトの名無しさん:2013/05/09(木) 22:37:27.78
些末な事だよね

957 :デフォルトの名無しさん:2013/05/09(木) 22:40:07.93
X const *const *const (*const p[1])();
void (__stdcall *pf)()
これが一貫性があって最強
だがオススメしない

958 :デフォルトの名無しさん:2013/05/09(木) 22:43:22.61
typedefさん(´・ω・`)…

959 :デフォルトの名無しさん:2013/05/09(木) 22:46:19.88
p が const なのだから const は * にくっついてほしくないな

960 :デフォルトの名無しさん:2013/05/09(木) 22:54:52.13
>>959
>p が const なのだから
んなこたーない。
constはconst Xの例外を除いて常に左に掛かる

961 :デフォルトの名無しさん:2013/05/09(木) 23:31:06.64
void * const f();
そんなことよりBASICやろうぜ

962 :デフォルトの名無しさん:2013/05/09(木) 23:46:15.29
>>960
int * const p = NULL;
これ、p が定数でしょ

int *const p = NULL;
より
int* const p = NULL;
の方が分かりやすい

963 :デフォルトの名無しさん:2013/05/10(金) 03:40:42.03
ぬるぽ

964 :デフォルトの名無しさん:2013/05/10(金) 04:58:59.43
template<typename T>
struct tmpclass
{
template<typename X>
X operator()(X x)
{return x;}
};
これの特殊化がgccだと
tmpclass<double>().operator()<double>(5)
で出来てしまうのだけど他でもちゃんと動くのだよね?

965 :デフォルトの名無しさん:2013/05/10(金) 05:08:25.52
もちろん

966 :デフォルトの名無しさん:2013/05/10(金) 07:38:37.39
>>963
ガッ!

967 :デフォルトの名無しさん:2013/05/10(金) 12:13:32.56
>>958
僕は好きやで、typedefちゃん

968 :デフォルトの名無しさん:2013/05/10(金) 19:37:46.75
>>944
実際使われてんだから意識しなきゃ不味いって話なんで、正規のUnicode規格かどうかは関係あるのかね?

969 :デフォルトの名無しさん:2013/05/10(金) 22:59:11.93
Modified UTFが規格で規定された表現であるとも
取れる書き方だから噛みつかれたんだろ。
規格厨は「それは規格違反」って他人を避難
することに命を懸けるアスペだからな。

970 :デフォルトの名無しさん:2013/05/11(土) 22:07:17.81
質問です。
struct B1 {};
struct B2 {};
struct D : public B1, B2 {};
D ar[2];

&(B2&)ar[0] と &ar[1] が同じアドレスに
なるのですが、何故でしょうか?

971 :デフォルトの名無しさん:2013/05/11(土) 22:15:46.26
要素ないからじゃね

972 :デフォルトの名無しさん:2013/05/11(土) 22:17:13.69
ここでエスパーな俺が回答。
マイクロソフトに訊け。

973 :デフォルトの名無しさん:2013/05/11(土) 22:34:16.00
>>970
「同じアドレスになる」をどうやって確認したんだ?

974 :970:2013/05/11(土) 22:40:59.89
>>973
(unsigned long long)(void*)式
をcoutに出力です。

975 :デフォルトの名無しさん:2013/05/11(土) 23:09:29.25
D{B1, B2} から何も考えずにsizeof(B1)==1分だけずらしてんだろうな
ま、これが問題になるような場面はねーな

976 :デフォルトの名無しさん:2013/05/11(土) 23:18:42.49
オブジェクトのスラッシングの時に楽だからね

977 :デフォルトの名無しさん:2013/05/11(土) 23:19:25.44
スライシングだったorz
ビール飲むとやっぱり頭が鈍るな

978 :デフォルトの名無しさん:2013/05/11(土) 23:20:04.17
sizeof ar[0] はいくつなんだぜ?

979 :デフォルトの名無しさん:2013/05/11(土) 23:24:52.33
struct B1
struct B2
struct D
のsizeofっていくつになるんですか

980 :デフォルトの名無しさん:2013/05/11(土) 23:25:31.88
0より大きい
これは規格で決められている

981 :デフォルトの名無しさん:2013/05/11(土) 23:36:00.80
何でそんなウンコな仕様なの?

982 :デフォルトの名無しさん:2013/05/11(土) 23:46:00.46
C++はCとは違い特殊な事情があって、インスタンスのアドレスを得ると
そのサイズがゼロじゃ都合が悪いんだよ

具体的にどういう理由だっけ
違うインスタンスは必ず違うアドレスになるようにしたとD&Eに書いてあった

983 :デフォルトの名無しさん:2013/05/11(土) 23:48:48.70
配列が困るな。
イテレーターがいきなりループ抜けそう。
やはりC++にもinterfaceを入れるべきだった。

984 :デフォルトの名無しさん:2013/05/12(日) 00:24:14.55
>>970
ttp://ideone.com/IetmJ6
そのコンパイラの不具合だと思うけどな
EBOのあるなしでsizeof(D)が変わることはあっても
> &(B2&)ar[0] と &ar[1] が同じアドレスに
これはおかしいだろ

985 :デフォルトの名無しさん:2013/05/12(日) 00:30:05.86
横だけど
type&へのキャストってどういう意味?

986 :デフォルトの名無しさん:2013/05/12(日) 00:40:04.32
参照へのキャスト

987 :デフォルトの名無しさん:2013/05/12(日) 00:48:17.29
それってなんかありがたいことがあるんか?

988 :デフォルトの名無しさん:2013/05/12(日) 00:50:22.81
template<typename T> struct aaa
{
 typedef T value_type;
};
template<typename T> struct bbb : public aaa<T>
{
 bbb()
 {
  value_type t = 0; // error: expected ‘;’ before ‘t’
 }
};

bbb<int> b;
というエラーが出ます。bbbからvalue_typeを使うにはどういう方法があるでしょうか
g++4.5.3です。

989 :デフォルトの名無しさん:2013/05/12(日) 00:55:46.88
>>984
コンパイラの問題なのは>>972も指摘
してるようにその通りなのだけど、
B1サブオブジェクトとB2サブオブジェクトが
同じアドレスってありなの?そのGCCの結果

990 :デフォルトの名無しさん:2013/05/12(日) 00:57:36.20
>>988
typename aaa<T>::value_type ?

991 :デフォルトの名無しさん:2013/05/12(日) 01:42:16.63
>>987 この例ならわかる?
struct B{ char c; };
struct D1L:B{};
struct D1R:B{};
struct D2:D1L,D1R{};
D2 d;
B & rbl = (B &)(D1L &)d;
B & rbr = (B &)(D1R &)d;

992 :デフォルトの名無しさん:2013/05/12(日) 01:49:38.98
>>991
いや、全然
多重継承を使わないと理解できないありがたみだとすると、多重継承使ったことないから
わからなくて当然なのかもしれないが

993 :デフォルトの名無しさん:2013/05/12(日) 02:18:31.52
構造体D2に構造体D1L、D1Rにそれぞれ継承されているBを含んでいる。
rblはD1L側、rbrははD1R側が継承した構造体Bの参照を取っている。

でも多重継承の利点て、インターフェイスを継承させる事ではないのか?

994 :デフォルトの名無しさん:2013/05/12(日) 02:31:13.84
>>993
そんなことができるんか
これもまた参照とポインタとの違いなんだな

995 :デフォルトの名無しさん:2013/05/12(日) 03:11:50.39
いや、ポインタでも同じ。俺的には参照の方がコード組みやすいな。
ポインタの方が機能は多いけど

996 :デフォルトの名無しさん:2013/05/12(日) 08:12:35.60
>>992
多重継承だけの問題じゃない。
struct B {};
struct D : virtual B {};
D d;
D * pd = &d;
B * pb = pd;
ここでpdとpbのアドレスは違う。
代入時の型変換でアドレス変換が行われる。
(T&) は *(T*)&と意味的に同じだから
裏ではアドレス調整が行われている。

997 :デフォルトの名無しさん:2013/05/12(日) 08:14:37.92
最近のC++での多重継承はメタ関数の実装継承に使われる事が多い気がする

998 :デフォルトの名無しさん:2013/05/12(日) 08:16:18.70
多重継承って、サイズ非ゼロの縛りがあるから
継承の度にどんどんサイズおっきくなるよね?

999 :デフォルトの名無しさん:2013/05/12(日) 08:23:20.20
>>984
http://ideone.com/ZQtLvW

1000 :デフォルトの名無しさん:2013/05/12(日) 08:31:49.40
>>996
マジか、初めて知った
これもstatic castの一つ?

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

218 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)