>>1 乙
なんで誰もスレ立てなかったの?馬鹿なの?
立てようとしたら、 修行が足りなくてできんかった。
4 :
デフォルトの名無しさん :2013/04/06(土) 18:39:46.85
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京極大学霊長類研究所
立てようとすら思わなかったぜ
そういえばチンパンジーのアイって今年の10月で37歳だと。
なんと、俺より年上だったか
int a[] = { ... }; int b[] = { ... }; aとbの要素が完全に一致するSTLのアルゴリズム教えてください 配列の長さが異なる場合もあります
all_ofかなと一瞬思ったが違うか
end(a) - begin(a) == end(b) - begin(b) && equal(begin(a), end(a), begin(b))
STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
>>12 esualだと長さが一致してないとダメなのでそこを一気にやってくれる方法が知りたかったです
確かにこういう場合分けが必要だしなあ 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; }
>>13 コンテナだと要素数を事前に知れるけど、配列はそうは行かないじゃん
文字列のように'\0'終端文字列ならいいけど、そうでないなら自作するしか
>>14 同じ型に決まってるだろうから
要素数の確認は sizeof(a) == sizeof(b) で十分では。
>>16 それでもいいけどtemplateにしてstd::equalにガワかぶせようとしたんだ
コンテナも同じ型で同じコンテナならoperator==で比較出来るので便利なんだが
同じものがほしいだけなら優先する方のサイズ分だけコピーすればいいだけ何じゃ? 余った部分は0うめ? 最初の例が気になるところなんだけど、これ本物もsizeofしても平気なの?
コンテナはsizeofはC++11からdata()なら行けるんでは ただしvectorだけだな STLのようにアルゴリズムを汎用化したければIterator traitsによって データの長さを取得する方法を場合分けするか、関数の多重定義をするか、 しかしどうして長さの違う物を比較しようと思ったの?絶対一致するはずがないのに
STLのstd::equalは比較対象のInputIteratorの長さが十分である事を確認して 呼び出さないと鼻から悪魔だからなあ ラッパーを作るしかないね
長さとmemcmpにわけろ
こんな漢字。 (sizeof(a)==sizeof(b)) && (memcmp(a,b,sizeof(a))==0)
>>24 関係ない所で気になったんだけど、
どうしてsize_tにstd::が付いてないのに
コンパイル通るの?
C++1yではイテレータ4つ取るバージョンのequalも入るとか何とか
>>26 それって二項関数を取るバージョンでしょ?
それはC++03からある(正確にはC++98から)
今C++11の規格票を見たけど2つのbeginとendを取るバージョンはなかった
>>26 と思ったらC++1yか
まああってもなくてもいいや
>>27 マクロ以外はstd名前空間に入ると
思うのだが、ソースきぼん
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.
C/C++できる男の人ってかっこいい。 JavaとかC#なんて軟弱者の言語だわ。
>>31 そもそもsize_tの為のヘッダがinclude
されてないし、cnameも使ってないから
コンパイル通るかは処理系依存だよね?
<iterator>のヘッダ初めて覗いてみたけど、組み込み型は全部テンプレートが特殊化 でズラズラ並べて定義されてるのね 少しワロタ ところで構造体の配列とかはどういう扱いになるんだろう?
,,__,, / `、 / ヽ / ● ● | /l ''''' し '''''' | / l __. | l /ヽ_ ` --' _ノ \  ̄ ヽ∩ ⌒l l三 | | ヽ.__|
>>36 JAVA信者の煽りに反応するなよ
C++はな、マスターするためには
まず禿げなきゃいけないんだぜ
あ、だから照ってるのか、すまん
なにその一人ボケ突っ込み
C++を学ぶのに一番おすすめのサイトはどこですか? Cは分かるという前提で。オブジェクト指向はまったくわかりません。
43 :
デフォルトの名無しさん :2013/04/07(日) 13:51:32.82
C++をバリバリつかうお仕事って何がありますか SEで入社したんですが組み込みでC使ってるらしいのは把握しました
C++よりCのほうが難易度が高い。 Cが使いこなせるなら特にC++をやる必要はない。 パフォーマンスもC++の方が落ちる。テンプレートなど使用しているせい。 大規模、大人数で開発するとき、パフォーマンスを犠牲にしても保守性を上げるためC++にすることはある。 シビアな速度、メモリ管理が必要ならCかアセンブラ。
どこを立て読み?
C++は子供のおもちゃ Cは職人が命を預けられる道具
>>44 何かいろんな観点をごっちゃにしたデカイ釣り針だな
C++は老人のオナニー Cは老人の残した糞
49 :
デフォルトの名無しさん :2013/04/07(日) 14:08:36.39
Dは新進気鋭の若手
パフォーマンスと言うのが、実行速度という意味なら、テンプレートでパフォーマンス悪化は起こらない
Dこそが至極 すべての言語は最終的にDに集約される
>>50 所詮マクロですもんね
バイナリサイズがでかくなるだけ
53 :
デフォルトの名無しさん :2013/04/07(日) 14:16:35.26
バイナリサイズがでかくなるということはキャッシュ効率が悪くなり遅くなるということ
C++では性能劣化しないというのが理念だが、それはコンパイラの実装次第であって 現実として、CをC++で完全に置き換える状況にはなっていない。
>>52 それもほとんどの場合は違うと思うよ。
コンパイル速度が悪化する程度だよ。
>>53 それは本質がわかってない
テンプレートでバイナリが肥大化するなら、C でも同程度に大きくなる
超上級者の書いたcが、サイズも小さく性能も高いという点なら同意するけど、 テンプレートというかメタプログラムのいいところは、コンパイルの時点である程度の処理が解決されているので キャッシュヒットは悪くなったとしても、先読みの有効性が高くなる点なんじゃないだろうか。 限界性能とか意識したことないけど。。。
>>56 型毎に処理を作るという事を行わなければそうはならないが(qsortみたいに)、
今度は型毎に処理が最適化されないので遅くなるという罠
同じ事をしようと思った場合、Cは基本的にC++より遅いか同等
fftw(OCamlで生成されたCコードによる最速FFTライブラリ)等を見てると、 テンプレートで頑張ってメタプログラミングするより コード生成に適した言語でCコードを生成したほうが筋が良さそう
そこまで速度にこだわるなら Fortran使った方が
テンプレートから実体化した関数と、Cで作った関数に違いはないよ。 テンプレートは型パラメータ分の実体化を伴うから、バイナリが肥大化しやすいと言われてる。 でも、それはCでも変わらないよね。 型違いのコードクローンを作るか、マクロ関数化するしかないんだから。
キャッシュを考えないと遅くて動かないプログラムってどんなのがあるの?ゲームとか?
普通コードのキャッシュよりデータのキャッシュの方が重要 コードサイズなんて大したもんじゃない
そりゃ完全にC with templateとして割り切ったら Cと同等以上の速度になるんだけど、 実際は標準C++ライブラリを使うなら例外も使うし、 例外を使うならスマポ使いたいし……ってなって 結局はCより肥大化して遅くなってしまう
>>65 あほか
そんなのは選択したお前の勝手で、言語の優劣とは関係無い
最近の例外は正常フローだと逆に早くなるが
>>56 さすがにそれはないんじゃ?
テンプレートの生成するコードハンパないし。
顕著なのはiostreamか?includeしただけでひどいことに
コンテナ系も同じ型であったとしてもやっぱ別々になるし。。。
グローバルにtypedefしたら改善する?
それとも大量のincludeがいけないのだろうか。
>>65 いやいや
例外を使わない方がエラー処理が肥大化するんだぞ
スマポも全く肥大化しないどころか、
デストラクタのないCはエラー処理が冗長になりがち
ゴミみたいな機能でも なんでも揃ってれば素晴らしいという観点でいえば C++は素晴らしいね
CとC++のどちらか性能上かはコンパイラの実装次第となるが。 基本的には、徹底してソースコードを調整した場合、性能はアセンブラ > C言語 > C++の順だろ。
C++が遅いとか妄想で語ってるだけ 基本的にC++のが速い
と妄想で語るのでした。まる。 まあトイプログラムならC++の方が速いよwww
一年後出来上がったソフトを比較した結果 C++>C言語>アセンブラの順の速さで動くのだった
Cの方が速いとすると それはどこかで安全性を犠牲にしてるだけ 場合によってはセキュリティホールを放置してたり
CもC++もそのコンパイラは、アセンブラ(=機械語)に翻訳するわけで、チューニングされたアセンブラに敵うわけはない。
CとC++で速度差があるとかいってるやつは単なるアホ
>>68 じゃあさ、同じものをCで作ってごらんよ。
テンプレートだから大きいのではなくて、機能そのものが大きいんだよ。
つまり、それはCとC++の違いではなくて、関数レベルの機能差なだけ。
iostreamは擁護できない
速度差はあるのは当然。 いまのC++コンパイラは、Cへのトランスレータではなく、一気にアセンブラ・機械語まで持って行く。 性能はどの程度、コンパイラがチューニングされているかに依存するが、 STLの実装などを見れば汎用性維持のための無駄が多く、同様の処理を直にCで書いたほうが速くなるだろう事は想像がつく。
>>76 "完"敗?
n-bodyとかは遅い方が勝ってるってこと?
必要もなくクラスやストリーム使ってるソースでCと比較とか ベンチマークやってるのなんてこんなのばっかり
とりあえずI/Oを含んでるベンチマークは信用しない
必要なく使っているソースで差がでるのだったら必要があって使っているソースでも差があるのではなかろうか?
必要があればC側にも似たようなコードが増える
文句があるならコード改良して送りつければよろし
そんなめんどくさいことするヒマなんてないし
>>76 うわー、思った以上に差がある。
なーんだがっかり。
こうやってCに固執する奴が増えれば増えるほど俺の相対的な戦力が上がるんだからむしろ歓迎
C++使いがクソみたいな言語仕様やライブラリと格闘している間に、 C使いは適当な高級言語とFFIを駆使して 快適にプログラミングしていくのであった……
FFIって言ってみたかったんですね わかります
・なんだかんだ言ってCもC++も高級言語なので、高度に最適化されたアセンブラには勝てない ・しかし、コンパイラの性能は年々向上してるし、第一人間の能力的にソフト丸ごとアセンブラで書くのはまず不可能 ・Cに比べてC++の方がライブラリは充実しているので「書きやすい」が、その分複雑になっているので「難しい」とも言える ・「どちらが速いか」「どちらが小さいか」なんてのは条件によってバラバラなのでなんとも言えない (C++の方がライブラリを無駄に多くincludeしやすいが、その分Cよりは安全な処理ができる、等) とりあえずこんなとこか
>>95 /usr/includeの中身全部読んでから出直せ
boostも使った事ねーのか
これは恥ずかしい。
>>79 使ってないコードはリンカが取り除くから機能がでかいからといってincludeしてちょっと使うぐらいじゃコードサイズはでかくなっちゃいけない
でも現実にでかくなっているということは機能がでかいんじゃなくてテンプレートがクソだからだ
早いけど先に地鎮祭しとくのでテンプラよろしく STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
>>97 厳密にはboostにしても、「インクルードするだけのライブラリ」ではない、それを踏まえた上でのくだらない突っ込みでは?
>>96 リンカって知ってる?
「インクルードするだけのライブラリ」でないのはごく一部だけだろ 大部分は「インクルードするだけのライブラリ」
また老害Qが湧いてるのか
JAVAでゲームが書かれる時代に何くだらん議論してんだよ
一番くだらないのが来ました
C++でガリガリと大きなプログラムを書けることに優越感を感じます。
言語を選べる職場なの?
アルゴリズム検証やプロトタイピングが主なので。
>>110 それ何て研究室?一般企業ではあり得ないよなあ
113 :
110 :2013/04/07(日) 19:53:09.24
>>111 あれ?そうスか?
普通の電機メーカーです。
すげえメーカーだなあ 組み込みにC++?
>>112 C++の表面に出て来ない裏方を見てみたい好奇心で
116 :
110 :2013/04/07(日) 19:59:44.30
>>114 あ、いや、C/C++で検証したアルゴリズムをFPGAで実装。
めんどい。
言ってる事がどんどん変わってるなwww
底辺社畜さんには同情を禁じ得ないけど それも自分が選んだ道だから 頑張って!
選びたくて選んだんじゃない ほかにできる仕事がなかったんだ
えー、でもプログラムの仕事、楽しいじゃん。 これ以外は考えられないよ。
それはお前が若いからだ
122 :
デフォルトの名無しさん :2013/04/07(日) 20:16:55.05
コード書くのは好きだからいいんやけどね 書類作ったり営業したりがもう最悪 ニートになりたい
土方だとつまんないかもだね。 自分で自分の仕事を決められる立場にある人間が、自分で決めて遂行するなら、おもしろそうだな。
>>122 自分も書類書くの面倒!!
アジャイルプログラミングだ、と(心の中で)言い訳してコードばっかり書いてるw
大企業の社員さんには出来ない主張も、俺みたいな外部の業者には平気で出来て それが結構通るから面白い そんなわけで大概言語は自分で選べてる
>>123 こんなことできるよ!ってプログラム動かして上の人とか営業さんに見せると喜んでくれるから楽しいよ。
>>127 珍しくw
まー、多くの現場では押し付け的にあれやれこれやれ早くやれで大変だよね・・・。
それも大事だけど、もっとやる気出るようなリーダーシップというか人間性がない人が多いような気がするよ・・・。
悲しいことにね・・・。
実際は「こんなことーー(1時間経過)ーー出来るよ!」だからな 一瞬で出来ないと営業に出かけてしまう
なぜ客の前でデモすると突然バグるのか
そりゃお前、同僚がバグしこんでんだよ。嫌われてんだろうな
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 -----------------------------------------------------------------
>>135-136 これいつ測ったベンチなんだよ……比較対象がBASICって……
単なる空for文なら最適化で消されかねないから何か書いたんだろうけどそれは一体何……
そもそもソースが提示されていない時点で再テストすらできない……
典型的なベンチマーク厨
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; }
俺の環境では 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();
>>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メーター付けてないと内部動作見えてないかもな…。
>計算の速い俺の方が有利だからなw ワロタ 一定の条件下での言語比較なのに 俺の方が有利とか何だよw
>>147 は
>>139 と等価な処理じゃないから正しい比較になってないよ(
>>147 は減算して0との比較)
この流れは処理結果が同じなら異なるロジック・アルゴリズムで比較してもいいというものではないよね
今ホットなベンチ ・びす太で実行 ・今時セレロン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)には負ける(アハ♪”
また痛いのが常駐してるな…
162 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/08(月) 05:38:59.23
んー、DarkBASICよりVC++の方が速いと言う結果だから仕方ないな。 ここに常駐してVC++を学習してやろう(笑) # 俺がちゃんと吟味してやる(ゲラゲラ
コンソーレのキチガイは巣に帰れよ
マをしてるとこういう精神状態になることもしばしばあるだろう
ねーよ 一緒にしてくれるな
>>162 >ここに常駐してVC++を学習してやろう(笑)
君にC++を理解できるかな
成果を期待しているよ
> ライブラリをinlucdeする?? とか言ってるクソ野郎のいう事じゃないな。
CPUメーターがどうのとか言ってたり、別のベンチマークの結果を使って実行時間に掛け算してたりしてて、 なんじゃこりゃ、って思ってたんだが、単なる基地外か。まじめに考えて損した。
他人の作ったCプログラム(C++ではない)を適当なnamespaceに閉じ込める簡単な方法ないでしょうか namespace foo { #include "foo.c" } だけで大丈夫なんでしょうか
>>170 それでコンパイルとリンクが通ればok
通らなければ諦める
172 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 22:38:35.28
なるほどな、スコープ(”::”)ってグローバル変数なんだな。 始めからそう書けば分かりやすいw
>>172 プッ、そんなことも知らないのかwww
174 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 22:44:13.38
>>173 たぶん概念は知ってるけど専門用語が違うからC++のマニュアルを見てもサッパリ分からんw
おまえみたいにまったく知らない方が覚えやすいかもな(笑)
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
>>176 restrictポインター
複素数三角関数
179 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/09(火) 23:54:41.21
>>178 restrictポインターって用途が思い浮かばないけど、マルチタスク処理で使えそうだな。
他のタスクで使ってる変数領域をロックする場合とか。
複素数はマニア以外使わないと思う。
179 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
複素数なんてごく日常的に使ってるんだが なんなの?このバカ
複素数三角関数なんて 指数関数と三角関数の組み合わせで 簡単に実装できるがな
>>182 それはアセンブラあればcは要らない
ぐらいのアホな発言
簡単に実装できる2、3個の関数の有無なんて誤差の範囲だよ 指数関数と言うか、双曲線関数だったっけか
185 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 00:48:38.73
逃げ切れそうにないなw
まったくだ。 変数とgoto有れば構造体も関数も要らない。 アセンブラ最強。
Web系であんまりC++触る機会なかったんだけど 勉強がてらnodeかブラウザのコード読みたいと思ってるんだが何がいいだろう モダンな実装という噂の v8, nodeのコアのlivuvあたりを考えてたんだが重すぎる気がする コードベース少なくて参考になるのって言ったらどれがお勧めですか 3000行より短いぐらいがいい
3000行以下とか読んだうちにはいんねーよ
boost読めば
190 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 06:50:15.17
>>187 我流でやった方がいいよ。
つーか、俺は今からそうするけどw
会社で決められたコーディングとかインデントスタイル(笑)とか指定されてる場合は会社の言うとおりにしておく。
>>190 あ、それ同意。
所詮会社ごときで本気を出す必要はない。
192 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 09:38:54.35
>>191 サラリーマンは変わったヤツが多いからなw
アセンブラでインデント付けろとか言う会社は早く辞めたほうがいい(笑)
>>192 >アセンブラでインデント付けろとか
そいつ有名な某氏だろw
194 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 09:47:12.78
>>193 どこにでもいそうな変わり者レベルってなところかw
あとFORループ外してコピー&ペーストで1024個並べるヤツとか…w”
(フツーにマクロで書けよw)
>>194 こういうのは?
仕様が60fpsなのに最適化できないから30fpsに仕様変更するとか。
stlに複素数あるけど あれってsin cosできないの?
>>196 C++11の規格準拠ならオーバーロードされてるはずだが(26.4.8)別の話なのかな?
C++98のころからあったような
なにげにC99は数学関数充実させてるな FPUでネイティブサポートされてないから自作しても大して変わらんけど
202 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 17:02:34.15
>>195 いわゆる ” 糞ゲー ” の典型的なパターンだなw
ムダな背景外してでも60fpsにすべきだろうな。
まあ、30fpsとか言い始めた時点で億単位のプロジェクトは赤字確定。
(結構頭がアレなヤツ多いからなw)
ワロタ
205 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 17:33:46.72
>>204 別におまえに向けて書いたつもりじゃあないんだけどな…あ、思い当たるフシがあるんだろうな(ゲラゲラ
コンソーレは質問スレならデカい顔が出来る!って判断したのか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
よおキチガイニート 病室から抜け出すなよ(笑)
210 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 20:08:13.32
>>209 外の世界にいるのが俺で、中にいるのがおまえだよw
長いコトいるとそっちが外の世界になるんだろうけどさ(ゲラゲラ
つ[鏡] ったく一日中どこから書いてんだよ スマホからってのはなしで
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
ここもゴミコテの隔離スレになったか
またスレが一つ死んだ 逝こうここもじき腐海に沈む‥‥‥
215 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/10(水) 22:57:36.45
まずゴミスレを自覚しようなw
透明あぼーんしとけよ いないのと同じになるから
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
>>220 ffmpegの使い方とWeb用の開発言語だな。PHPとかHTML5とか。C++で特に何も書かなくても作れると思うよ。
こいつはいくつマルチするんだろう・・・
>>222 ハードとソフトとネットワークの高度な知識はいるだろ。
YouTubeはメチャクチャ負荷が高い。
それをいかに低減させていくかが重要課題。
>>224 YouTube並のサイトを作るって話なの?
>>220 の質問レベルからして、身内向けに動画をアップしたら勝手にエンコしてブラウザで見れるサイトを作りたい、とか
そういうレベルかと勝手に思っちゃった。
動画の取り扱いは、キリないよね。色々工夫しないと難しい問題ばっかり。
コイツが動画サイト作れるようになるころには数百MBの動画くらいなら画像のように送れるようになってるよw
227 :
デフォルトの名無しさん :2013/04/11(木) 13:14:13.66
>>225 YouTubeを(プライベート設定で)使えよ。
>全て教えてください こんなこと言う奴が本気で訊いてる訳なし
ネタにマジレスする必要ないでしょ だいたいスレ違い、というか板違いだし 「金払って業者に作ってもらえアホ」位の返事がちょうどよろしいかと
まぁプログラムだけの問題じゃないからなぁ
232 :
デフォルトの名無しさん :2013/04/11(木) 22:35:04.07
基地害御用達の糞スレ
C++erはキチガイ
c++自体が基地外オナニー言語。
褒め言葉だからそれ
>>220 真面目に答えよう。初歩の初歩としてWebサーバー構築とは、どういうものかが判らないと無理だ。
そして、Webで調べずにここで聞いてる時点で君が、その目的を達成できることはないだろうと想像できる。
>Webで調べずにここで聞いてる時点で君が、その目的を達成できることはないだろう まさに的確な指摘だな。 ここで聞いてても答えが出てくるわけないもんな。素人しかいないから。
windef.hで#define maxとかホント死んでくれ・・・
まぁでも自分が死んじゃったほうがずっと早いよ
#include <windows.h> #undef max #undef min
>>240 ← 嘘つきなので初心者はまずこいつをNG設定しましょう
#if 初心者
#undef
>>240 #endif
>>240 結局そうした
他にいいやり方があったら教えてくれ頼む
#include <windows.h> ... #include "unmaxmin.h" ...ここでSTLのmax/minを使う... #include "maxmin.h" ...ここでWin32のmax/minを使う... "maxmin.h"と"unmaxmin.h"の中身は自分で考えよう
>>243 #define NOMINMAX
とか
とかじゃなくてmin/maxがdefineされてない弊害を消す効力もあるかも(将来なるかも)しれないわけだから NOMINMAXしか選択肢は無いよ
そもそもなんでmin/maxがマクロで定義されてるんだろうな。 template使うとか考えなかったんだろうか。
うるさい黙れ!
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ベンチャー
企業の人事担当者は、言葉遣いから「学生時代にどの程度の知的レベルの集団にいたか」を推測する材料にしているという。
「他人と会話をしていれば、普通は『ら抜き言葉』に違和感を抱いて修正できるはず。それができていないということは、
その程度のレベルの集団に属していたという判断をしてしまいます。コミュニケーション能力にも関わりますし、ハイレベルな
プログラマーを除けば採用に当たって考慮に入れざるを得ません」
学歴だけでなく、日常的に知的水準の高い集団に属している人は意欲も高く、自分の頭でものごとを考える習慣が
あるという。言葉遣いひとつでそこまで見透かされることを考えると、やはり油断はできないのかもしれない。(以上)
- - - - - - - - - - -
見れたぁー? 作れたぁー? アハアハ〜♪”
251 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/13(土) 00:05:34.64
ギャハハ!!wwwww”
糞ニートが発狂している↑
253 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/13(土) 00:15:44.87
見れたぁー?w”
発狂カキコ
番号飛びまくってるけどまた奴が来てるのか
やっぱりC++erはキチガイだな
んなこたー、逸般的常識
>>243 int max = std::numeric_limits<int>::max(); // エラー
int max = (std::numeric_limits<int>::max)(); // OK
C++ができる以前からあるからな しょうがない
260 :
─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2013/04/13(土) 08:39:22.34
自作自演と他人の不幸は蜜の味。
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のスキルを問うものに対しても、「 実務経験がなければ意味がない 」 と言う現場の声も
反映した。
コンソール研究所の開発現場から一人の声を拾ってみた。
(以下ソース参照)
妄想です
このスレ馬鹿しかいないの?
IDないからね。
こんな状態でも未だに質問しようと思うとかね そんな判断力じゃプログラムもいつまで経っても上達しないはずだわ
あれ?番号飛んでる? 何があった?
>>263 >そう思うのは朝鮮人だけ
北朝鮮ミサイルによる国難の時に
地震なんかで騒いでるのは朝鮮人だけ
15時から19時の間のレスが消えた感じ? 土曜の夕方にしてはレス少なくないか
273 :
デフォルトの名無しさん :2013/04/13(土) 23:44:00.02
じゃあさ。 仲直りの印として、電車の中でUFO焼きそばを食うOFFでもしないか?
昨日の夕方の10レスぐらい削除されてるのに
>>263 だけ残ってるの何でなんだろな
276 :
デフォルトの名無しさん :2013/04/14(日) 13:31:16.09
>>275 運営が削除依頼してる奴の奴隷に成り下がったからだよ
運営には今やもう削除するしないの判断力はないよ
278 :
デフォルトの名無しさん :2013/04/14(日) 13:34:09.32
どうせ専用ブラウザーのNG設定の正規表現を書き間違えたバカのたわごと
あれ?ミサイルまだ?
280 :
デフォルトの名無しさん :2013/04/16(火) 05:05:19.94
嫌韓さんは朝鮮戦争を願ってる人が多いようだ 朝鮮といえば大阪 大阪は朝鮮と結びつきが強い 大阪といえば大阪都構想 なぜ大阪府が大阪都になりたがってるか それは財政破綻を先送りできるから 「都」は公債発行の限度が高くなっている 大阪府のままだともうすぐ破産扱い 大阪都になればしばらく大丈夫 借金の限度額を上げるために名前を変えようとしている 浅ましいでしょう大阪って そんな大阪に我々日本人ができることといえば 大阪都構想に反対すること
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
285 :
デフォルトの名無しさん :2013/04/18(木) 03:25:19.63
MinGWはいろんなフリーウェアの対応が悪いっつーか ゲテモノ?
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が入ってるのかな?
うんこ
rel_ops 爆発しろ! bool 決め打ちしやがって
>>288 ,289
link=staticでは静的ライブラリのビルドでdllはできないだろ
296 :
デフォルトの名無しさん :2013/04/18(木) 18:29:13.84
>>295 そうなの?
コマンドが間違ってるって
ことですか
オプション指定の意味も解らずビルドしようとしてるのか・・・
少しは自分で調べろ
>>297 ゆとり・へたれ時代はググってコピペ出来れば良い。意味なんて知らなくて良い
プログラムだってコピペで作る
よくコピペでプログラム作るって聞くけど どんな単純なアプリならコピペで作れるんだよ
cの基本だけわかってたら8割方コピペでそれ繋ぐだけで作れるって意味でしょ
wchar_t str[ 256 ]; swprintf( str, 256, L"%f", m_pObj->GetFloatVal() ); DrawText( str ); こんな感じのコードをもっとエレガントに書けないでしょうか? 256といった適当なサイズのリテラルを書くことなく、 3行も使わずに、ラムダ式みたいに関数の引数内で直接文字列に変換しちゃうような、 そんな書き方はできないのでしょうか?
本気で質問してるならエラーが出てるのか、出てるならどんなエラーかくらい説明しろよ。
ごめん。303 は >288 辺りへのレス
302は涙目だなw
頭悪そうな奴だな 大学いってなさそう
308 :
302 :2013/04/18(木) 22:00:17.24
stringクラスになんでsprintfが無いんだよ
stream 押しだからじゃね?
ググってもよく分からなかったので質問させて下さい。 0,以上1未満の実数な一様乱数を<random>を使って発生させようとしているのですが、 秒未満の単位で変動する値で乱数を初期化してmt19937()を使う方法が分かりません。 乱数を使う位置は、main関数以外の自作関数です。再帰的に呼び出すので、 「その関数の先頭に初期化用関数を置く」ようなことはしたくないです。 また、一回その関数を呼び出してから処理が完了するのに1秒未満ということはザラなので、 time(NULL)を使う、といった手段も取れません。 解決法をご教示願います。
>>311 ハードにもよるけどx86ならrdtsc使えばいいんじゃね
std::random_device使えば
まあ本当に毎回ランダムな値で初期化する必要あんのかよって気はするけどな
再起させるんならついでに渡せばいいよね グローバルにおいてもいいと思うし
>>302 std::to_wstring() でいいんじゃね?
317 :
302 :2013/04/18(木) 23:08:18.09
>>316 うおー!神!!
できました!!
う〜ん、なんてエレガント♪
STLマンセ〜。
>>311 そんなに頻繁に初期化しなおしてたら一様性が崩れそうだ
初期化は一回だけのがいいんじゃね
#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;x[t],sizeof(x[t]),1,fp); } return 0; } これでホワイトノイズが出来る予定なんですがプツッって音だけになってしまいます。 ここが違うという指摘があればお願いします。
何で1から回してんの?
>>320 iとsは0からでよかったですね
tは指定があったんで
>>319 妄想で答えるけど、人間に聞こえる音になってないんじゃない
とりあえず確実に人間が聞こえる正弦波(1KHz)とかでプログラム組んだら
323 :
デフォルトの名無しさん :2013/04/19(金) 00:50:45.85
>>319 sigがintだからsinの結果を加算しても0にしかならない
int freq,ampを何に使う予定だった
>>323 sinの前にampが抜けている。freqはどこだろ
>>322 すまねえ
俺の頭では理解できなかったぜ・・・
>>323 とりあえずこれを参考に頑張ってみます
>>324 freq,ampはこれとはまた別のやつで使うんで今回は放置でいいらしいっす
なにひとつC++じゃないからスレ違いじゃないの
>>326 書き込んだときにスレ違いに気づいたがもう手遅れだったぜ・・・
>>319 は解決しやしたんでこれにて撤収します
ありがとうございました
>>312-318 std::random_deviceで、無事解決しました。
指摘通り、グローバル領域で1回初期化を掛けてから使用しています。
C++において char* と int* のサイズが同じである保証はないし違っていても規格上問題ない ここまではわかる じゃあ不完全型はどうなるの つまり struct A; struct B { A* ptr; }; はどう扱われるのか教えて
型によってポインタの値が異なる事はあるらしいけど、 サイズも異なることがあるんだっけ? メンバポインタは異なる事があるけど
「char*, int*のサイズ」って、sizeof(int*) のことなの?それとも sizeof(int) のことなの? 前者なら sizeof(int*) == sizeof(char*) は保証されている、というか前提なのでは?これが違うというアーキや違ったとしたときの具体的な実装が皆目思いつかないのだが?
ポインタサイズが一定である事 (値型に影響されないと言う事) は、前方参照の前提になるものなので、恐らく保証されていると思う。 でも、言われてみると、文書では見たこと無いな。 会社に行ったら規格書しらべてみるかな。
メンバ関数ポインタのサイズは実際違う事があるのは確認した事がある GCCだと確か変わらなかったけど、 VC++だと仮想継承するかどうかで変わってた 普通のポインタは不完全型のポインタを考えると 同じでないと流石にダメな気がするが、 規格でどうかと言われると出てこない nearポインタ、farポインタに関しては規格外だし、 near/farがあるとしてもfarの有無で判別するものであって 型で判別するものではないし
>>333 そうなると構造体へのポインタ型に関しては
void*と同じ内部構造で扱うみたいな規格があるのかな
336 :
デフォルトの名無しさん :2013/04/21(日) 17:36:28.94
operator new が void* 返しじゃマズいとなると厄介だぞ
(関数ポインタ、メンバポインタ以外の)どのポインタ型も void*との相互変換ができるというのが規格にあったはず
int*とchar*のサイズは違うかも試練が struct系のポインターは全部void*と 同じサイズだろ。
>>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*)の大きさと同じになる
// 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*) { ... } これが動かないといけないので 完全型かどうかでポインタサイズが変わったらまずい 構造体やクラスへのポインタサイズは一律でないと
メモリポインタなら同じサイズなのでは
二つの系列 codeとdataについて sizeof(char *) == sizeof(int *) == ... etc sizeof(void (*)()) == sizeof(char(*)()) == sizeof(int(*)()) == ... etc そして sizeof(int *) != sizeof(void(*)()) を意識しておればいいみたいだね。 さて sizeof(void *) はどっちに属するのか?
ポインタそのものとポインタが指すオブジェクトを混同してないか?
>>343 それがポインタが指すオブジェクトによって、そのポインタ自体のサイズが変わるのでは?という問題、
あるいはポインタ同士の互換性を、どこまで考慮しておけばいいのか、という問題がもちあがっているんです。
多分起源は far/near だとは思いますが。
C FAQを見る限り、far/nearは関係ないと思う
>>340 を考えると構造体やクラスへのポインタのサイズは一律でないとマズいと思うが、
規格にその旨は書かれているのだろうか
x32とx86-64アーキテクチャの違いみたいなものか。 いや違うか。
メンバへのポインタは通常のポインタと全然意味が違うからな それ単独では使えず、必ずthisとセットで使わないと意味がない オフセット値でも入ってんじゃないの 知らないけど
>>347 メンバ変数ポインタは本当にオフセット値が入ってるね
VC++はNULLのビット表現が0になるよう下駄はかせてるけど、
gccはオフセットそのままで、NULLのビット表現が-1になる
x32なんて言い方はしない。
>>349 いや、x32はあるよ
64bit環境で、アドレッシングだけ32bitでやろうよ!っていう変則APIセット
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を消すのは規格的にまずいですか?
使わなけりゃいいよ
コンテナ 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は期待していいのでしょうか? それとも、何らかのチェックを入れるべきでしょうか?
そんな糞コード書くなアホか
>>353 it=list.erase(it);
慣用句レベルな。
イテレータが無効化される要件は、規格で規定されてるから、ググれば直ぐ情報出てくると思うぞ。
356 :
355 :2013/04/22(月) 12:47:31.25
あ、そのままループ内で使うなよ。 erase の戻りが何を返すのか調べてくれ。 出先で書いてるので調べられん。 中途半端な情報ですまん。
>>355 それはvc++のみじゃない?
linuxに突っ込まれてる erase()は void型
規約があるのか、探してみる
coredumpとコード読んで理解しようとしていたがギブアップだった
>>356 いやさんくす、規約というのをしらなかった
探してみる
規格だったw
ISO/IEC 14882:2011の23.3.5.4では iterator erase(const_iterator position); voidなのは何かの見間違いじゃね?
>>367 g++ならerase()はiteratorを戻すが?
たしかに今確認したら it = list.erase(it); でビルドとおった、すまぬ。
ちょっと規約買ってくる
pop_xxxと勘違いしてんじゃね
C++03のmapやsetならvoidだったからその辺の混同だろ
LLVM clang が C++11 に完全対応した今、 C++03 を使う機会はだんだん減っていくといいなぁ
367 :
デフォルトの名無しさん :2013/04/22(月) 18:31:38.53
g++ならerase()はiteratorを戻すが
文盲がいるな
ぶ、文盲がいるな
>>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はイテレーターを返す
結局
>>329 は「ユーザ定義型のポインタはすべて同じサイズだと保証されてるから問題ない」ってことでいいのかね
sizeof(int *) != sizeof(void(*)()) 関数のポインタと変数のポインタのサイズが違う場合があるって知らなかったけど どうしてこうなる?
関数:コード用のROM 変数:RAM に配置されてROMとRAMでそれぞれ別のアドレス空間とアドレス表現を持つとか普通だから
>>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>(); } だとエラーになりません。 これはやってもいいことがやれているのか やってはいけないことがやれてるだけなのか教えてください
よくわかってないならソースを省略せずにきくといいよ
コンパイル通る文書けよ
>>375 B の定義が見えてないだけでは?
後者はB のインスタンスを作ってないからコンパイルできているだけのような気が。
>>371 Cでは「pointer to structure typeは皆同じサイズ、それ以外は知らん」となってる。
でもC++ではそもそもオブジェクトポインターはメモリアドレスと規定されているし
Cみたいな記述は見つけられなかった。
ISO/IEC 14882:2011の3.9には「sizeof UNKA* is known」と
例があるしきっと安全だろううん。 ※UNKOは不完全型の配列
UNKOは食ったオブジェクトの最終形だろ
>>329 ,371
規格上は
不完全(なあるクラス)型へのポインタの大きさ == (完全なその)クラス型へのポインタの大きさ
は保証されない
>>340 の例が動くのは
・A.cppとB.cppを不完全型へのポインタと(完全な)クラス型へのポインタが
同じ大きさであるように実装された同じコンパイラでコンパイルした場合
・A.cppをコンパイルしたコンパイラでの不完全なTへのポインタの大きさと
B.cppをコンパイルしたコンパイラでのTへのポインタの大きさがたまたま一致した場合
とかの環境依存の結果でしかない
>不完全(なあるクラス)型へのポインタの大きさ == (完全なその)クラス型へのポインタの大きさ >は保証されない いやそれはおかしい
1:struct s; 2:s * ps1; 3:struct s{}; 4:s * ps2; ps1とps2のサイズが違ったらオカルトだぜ。
C++ならそれくらいのことがあったとしても驚かない
自己参照も不完全型と同じ扱いなんだよね? となると、サイズが違ったらこうなるわけか struct s { s* p; }; s x; x.p = &x; // NG リスト作れねえ
>>386 クラス定義内の前方参照は2回翻訳した時に
最初と同じ意味でなければならないから
途中のs*p;が既にアウチ。
C++的には「未定義だけどチェックはされない」
動くのは偶然ということになる
388 :
デフォルトの名無しさん :2013/04/23(火) 00:51:34.98
犬も歩けば未定義に当たるような言語だから流行らない マシン性能が上がってくると需要がなくなっていくのはどうするの?
C++は随分昔から実用を離れたオナニーだから無問題
>>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バイト)
みたいな扱いになるなら問題にはならないだろ
まず受け入れたいことは根拠無しで信じるくせに受け入れたくないことに対してだけ
否定するために根拠を求めるダブスタ野郎は最低のクズだから誰かそうならとっとと消えてね
で
>>379 がいうことに該当するCの規格の箇所を誰かが示して
C++で規定されてない事はCの規格に従う+不完全な構造体も構造体の内
ということで収めちゃえばいいんじゃないの
>>372 つMS-DOS系メモリモデル/farポインタ、nearポインタ
>>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』
UNKOの完全型はまきぐそ
なんでこんなにデタラメを書き込む奴が多いの 不完全型へのポインタが違うサイズなんて ソース出して見ろよヲラ
>>392 farついてないから両方nearポインタじゃね?
>>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
互いに暗黙変換されたりすれば問題ないよね
>>386 と同じ話だけど
>>400 「不定」とは「unspecified」の訳で、いくつかの動作パターンが考えられる時にどの
パターンで実行されるかは処理系次第という意味
「未定義」とは「undefined」の訳で、「これを実行したら『鼻から悪魔』、つまり
何が起きるか分かりませんよ、という警告を込めた意味
ひどい内容だな
>>401 副作用完了点は(i, j)のとじカッコの位置
普通ならjが評価されて戻るのだが、カンマ演算子が使われると最後の評価点まで
順に評価されるため、カッコが使われるとカンマ演算子の副作用完了点とぶつかって
どちらを優先すべきかコンパイラには分からない
変数へのアクセスには2種類あり、右辺値と左辺値がある
右辺値は代入不可能、左辺値は代入可能(ただし変更可能の場合に限る)
カンマ演算子もカッコもこの場合は代入可能な左辺値を返すために、おそらく
jに代入されると予想されるが、iの評価した結果をどうするかが分からず、
警告を発するコンパイラがありそうだ
(i, j) = 7;の副作用完了点はセミコロンじゃないのか 代入演算子が最終的に評価されてるぞ
406 :
デフォルトの名無しさん :2013/04/24(水) 21:28:09.29
enumで作った定数は #defineと全く同じですか?
いいえ
>400 いくらなんんでもあんまりだと思ったので記事訂正しといた。
409 :
デフォルトの名無しさん :2013/04/25(木) 09:14:58.62
enumで作った定数は constと同じってことでOK?
&でアドレス取れないとかの違いはあるよ
使い分けとしては enum: 数値に意味がなくて名前が重要。気の利いたデバッガなら名前を見られる 後で数値の割当てが変わっても平気 const: 数値自体に意味がある。式で計算に使うような場合
>>412 じゃあ「いい加減じゃない」事を言ってみろカス
>>411 > enum: 数値に意味がなくて名前が重要。
これさぁ。
コンパイラが勝手に値を書き換えても問題なく動作するところだけで使えということ?
415 :
デフォルトの名無しさん :2013/04/25(木) 15:53:12.08
勝手には変わらないぞ
型がenumの値を配列の[ ]中に入れるのは無しだよね。
>気の利いたデバッガなら名前を見られる 気の利いたデバッガなら名前→数値を見られる
418 :
デフォルトの名無しさん :2013/04/25(木) 17:49:39.46
>>416 スレ間違ってない? ここは C++ だよ
C でさえ [] の中が整数とは限らないし
int number[4.567]
420 :
デフォルトの名無しさん :2013/04/25(木) 18:01:30.76
3[number]
#define NUMBER [number] int NUMBER={0,1,2,3}; return 0 NUMBER;
無理に慣れないことしなくていいよ
>>414 勝手に変わることはないけれど、用途としてはその認識でいい。
デバッガの話はよくわからないけれど、値が意味を持つものにenumを使うべきじゃない。
enumは、名前や順番に意味があるとき使うもの。
値が重要、普遍でなければならない場合は、constやdefineを使うべき。
enumの使い時としては例えば
配列でmapみたいな指定に使ったり、値に依存する処理がカプセル化されているときとか?
逆に使えないのは、エラーコードかな?
同じプログラム内でなら問題にはならないけどログや終了値みたいに外部に公開するようなやつに使うのはまずい。
>>423 都道府県コードにenumを使ってはいけないというわけか
>>423 netinet/in.h に書かれることの多い
IPPROTO_TCP = 6,
のようなenumは、君の家では間違いなんだ?
426 :
デフォルトの名無しさん :2013/04/25(木) 19:57:41.24
>>423 勝手に変わらない=確定しているもので
何がまずいんだよ
飛躍の一切ない論理を聞こうか
定数定義にdefine使う奴は どうしようもない馬鹿
>>411 圧縮とか画像とかのライブラリな。
あれ結構あるんだよな。
画像等のファイルヘッダーに入れるID情報をenumで列挙してるの。
君んちルールではルール違反でアウトになるよな。
君の会社と一緒に仕事するのは不可能だなあ。
値に意味があるのなら、enumはまずいと思う。
コード体系なんかも値が意味を持つたぐいじゃないだろうか。
enumを使うことの問題点は、定義する位置や直前の値にひきづられて変わりかねない値の不安定さ。
だから、値が意味を持つものには使うべきじゃないという話。
>>425 値に対する処理が、ある意味カプセル化されている部分で値そのものに、意味はないと思うのだけど、どうだろ?
もしも、値に意味がある場所でenumを使っているのだとしたら、本来はconstを使うところだとは思うな。
enumは値を指定できるんだから 値が意味を持つ場合にも使える 型が作られる事も重要
型を軽視するやつはCにでも引きこもってればいいのに
>>430 こんなダメすぎる考え方は見たことないよ
このバカチンがー!
int a = 0x11223344; char b = *static_cast<char*>( static_cast<void*>(&a) ); char c = *reinterpret_cast<char*>(&a); bとcって何か違うんですか?
cはコンパイルエラーになる可能性がある
数値に意味があって、その意味にふさわしい名前を付けた方が良いから名前を付ける。 列挙される数値の集合に意味があって、その意味にふさわしい名前を付けた方が良いから名前を付ける。 それがenum。 enum protocol { tcp = 6, udp = 17, }; こうやってやると、TCPという意味のある数値の6に対してtcpという名前を付けられるし、 プロトコルという意味のある集合に対してprotocolという名前を付けられるじゃないか。 そしてprotocolという型まで生まれて、コンパイラはチェックできるようになるじゃないか。 意味があるから意味にふさわしくこれらのことをやるんだよ。
>>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.
ああ、
>>437 は reinterpret_cast の話ね
static_cast を重ねた場合は
元の型が分からないので
アラインメントのチェックができなくなる
439 :
デフォルトの名無しさん :2013/04/25(木) 23:01:00.02
430.detach();
>>432 そんなあなたに enum-base
constでもenum-base相当のことはできるんだし今はあんまり関係なくね
441 :
デフォルトの名無しさん :2013/04/25(木) 23:31:56.28
右辺値でいいところを、わざわざ左辺値にする意味は?
何の話よ
443 :
デフォルトの名無しさん :2013/04/25(木) 23:34:53.42
enum vs const
別に左辺値になるからconstを使ってるわけじゃなかろうに
445 :
デフォルトの名無しさん :2013/04/25(木) 23:47:45.32
それじゃ答えになってなかろうが const にするということは左辺値にするということで その必要性を聞いている 右辺値参照に渡せなくなるという違いまであるんだぞ
446 :
デフォルトの名無しさん :2013/04/26(金) 01:29:32.71
派生クラスのデストラクタは仮想関数にすると聞いたのですが ポインタで生成したときのみですか?
基底や
とりあえず最後のカンマは書くなよ 警告がウザいんだよ
>>433 極論に聞こえるのは型について無視した話をしているからだと思うけど、言ってることのコンセプトは
外部設計等、仕様上定義された値→const
内部設計等、プログラムの都合上定義した値→enum
という話を具体的にしてるだけなんだけどね。
まぁ、値を意味づけ、グループ化するというenumの用途も理解はしている。
俺は普通にenumで定数指定作ってるな ビットフラグもenumで作ってるし
enum を定数指定用途に使用するのを「enum ハック」というくらいだから、一般にあまり誉められたものではないという認識で通っているのでは?
そういう意味では
>>430 に賛同するね
>>452 Aにすれば同じ型なのでコンパイル通るのは分かるんです。
template使わなければ派生型を戻リ値にしても問題無いのにどうしてかなーと思いまして。
製品出荷時に取り得る値が全て決まっているなら 数値に意味が有ろうと無かろうと enumに決まっている。 constは老害 defineは犯罪者
俺はenumを「数値固定定義のグルーピング」という意味合いでしか捉えてないな 値に意味があるか どうかももちろん重要な場面はあるけどそれより利点の「どのように使われるためにまとめたか」って 部分が重要かねぇ
>>445 const は #define の代わりに C++ で推奨されるようになったもの
元々 enum を使っていたものは C++ でも enum を使う
enum を使わないようなものは const を使う
ただの単発の値や、特定の型を指定したい場合など、ね
この判断に右辺値か左辺値という話は全く出てこない
必要だから左辺値にしているわけではないし、
そもそも意図的に左辺値にしているわけでもない
たまたま左辺値だったというだけ
右辺値にしたいなら右辺値にすればいいだけ
そんなのはどうとでもない
×そんなのはどうとでもない ○そんなのはどうとでもなる
文字列enumするの?
>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.
>>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?
基底クラスのポインタで削除する場合は基底クラスのデストラクタをvirtualにする
465 :
446 :2013/04/26(金) 12:11:58.58
>>464 virtualの機能を使ったら
virtualを使ってる基底クラスのデストラクタをvirtualにするってことでOK?
先物 4700円 逝ったか? 田中、どんだけ変動すると値上げ変更するんだろ
>>465 めんどくさいから、派生させるつもりがあるなら virtual 付けとけ。
逆に、デストラクタに virtual 付いていなければ、派生禁止と考えておけ。
動的削除子付きのスマポ使えばvirtualデストラクタなど要らぬわ
つかアプリレイヤでdeleteなんて一切書くな
470 :
446 :2013/04/26(金) 15:45:06.87
ちくしょょぉぉぉぉぉぉぉぉぉ 教えてくれよぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉ
enumの一番下に〜_MAXなんてものを定義しても、それに=を付けて別の値にしてしまえば 一番下が最大ではなくなるし、途中で=を使えば上下での大小関係も崩せる。
>>471 わざわざ値が変わるようなことをして、これだからenumは駄目なんだよって
言いたいのか?
>>445 &&型の目的は「右辺値なのでムーブするチャンス」
って考えだろ。定数をムーブしてどうする。
そこはconst参照使うところ。
477 :
デフォルトの名無しさん :2013/04/27(土) 00:02:30.35
>>475 遅かったな
>>462 の前なら少しはマシだったが
今さらそんな枝葉に噛みつくだけ恥の上塗りだ
整数は値で受けるもので、おまえみたいに const 参照するやつは異端
右辺値参照がよほど助け船に見えたようだな
constなんてやめてconstexprにするべきだな
>>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
>>480 いつかと訊かれたらC++は1998年の最初から?
ちなみに静的は内部の誤りだろうきっと。
>enum class は型付けが強すぎて const 定数の代わりには使えない
そりゃenumはサイズを指定するためのものじゃないからね。
当然、使うべきじゃない。
const は定数にしてるだけで、その数字に意味づけする物じゃない。 enum はリストだから単体で使う意味が無いし、わかりにくくなるだけ。 明示的に最適な型宣言をして意味を持った変数名を付けるだけで良い。
>>481 おう、内部リンケージの間違い
指摘ありがとう
484 :
デフォルトの名無しさん :2013/04/27(土) 09:58:54.32
>>481 指定できるよアホ
>>482 たとえば int なら int であることが絶対条件になるまで
int と書かないほうが合理的だ
単発の数値はconstで 値のグループはenum これでよかですか?
まだやってたのか short <==> const short long <==> const long int <==> const int ? <==> enum 迷うのはおかしい
はい
会社なら会社の指示に従え 趣味なら好きなの使っとけ このスタンスでそうそう困る事は無いし、そのうち経験から使い分けができるようになる
>>486 >int <--> const int
constと非constの対応じゃなくて
constかenumのどちらを使用すべきかの
話だったんだけど
日本語読めない
>>486 には理解できなかったようだね。
マクロじゃなきゃ何でもいいよ
Androidのライブラリは final int定義が羅列してあって どのメソッドがどの値を返すのか書かれて いなくて発狂しそうになります。
sizeof(enum)っていくら?
>>492 ベースの型のサイズ
何も書かなければintのサイズ
でたらめ言うな intのサイズが保証されるのはenum baseがintのenumと emum baseのないenum class/struct (scoped enum)と Cのenumだけ enum baseのないenum class/structでないenum (unscoped enum)のサイズは処理系定義 (いくつかの条件はあるけどややこしいので略)
C++のenumをそのままread/writeするプログラムは危険ってわけだな enum baseがあればいいけど
処理系定義だから、移植性とか考えなければ危険ってわけじゃないだろ
アドレスとってそのままバイナリで書き込むのに 移植性がないのはintだろうとenumどろうと同じだぜ。
498 :
デフォルトの名無しさん :2013/04/27(土) 21:24:00.71
enum のアドレスを取ってかw
>>496 enumの内容を変更したらサイズが変わった、
という事もありうる
移植性関係無しに危険
#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
なるほど・・・enumキモい
そのためのenum baseでもある バイナリで書き込む場合、C++03まではenumは厳禁 C++11ならenum baseとcstdintで頑張れる
定義変えたらサイズ変わるとか当たり前だろ。
>>499 のおつむの方がヤバい。
>>503 お前のプログラムは怖いから保守したくないわ
変数のアドレス取ってバイナリで書き込む バイトオーダー依存しまくりの KUSOなプログラムは保守したくないわ
この世に既存のバイナリフォーマットなんて星の数程あるだろw お前は独自のフォーマットのファイルしか扱わないのか
エンディアン依存くらい普通じゃないの?
ファイルフォーマットの インディアン固定は問題ないけど、 プログラムがバイトオーダ依存 なのはよくないってことでしょ
509 :
デフォルトの名無しさん :2013/04/27(土) 22:06:08.49
つーか、ファイルフォーマットが決まっているのに バイトオーダーで氏ぬやつって低脳だろ
バイトオーダを気にする必要があるなら 読む時に現在のバイトオーダに応じて変換すればいいだけ 気にする必要がない環境なら気にするだけ時間の無駄
どちらかというと環境に依存して 単体試験が増える方が無駄。 バイトオーダー依存のプログラム書く奴は 大抵は漏れなくintサイズ依存
いや、バイナリで扱おうがテキストで扱おうが どの環境でも単体試験するのは当然だろ 何を言い出すんだこいつは
インディアン嘘つかない
514 :
デフォルトの名無しさん :2013/04/27(土) 22:42:09.19
んだんだ
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
間違えた。ビッグインディアンね。
エンディアン試験しない
お前らシリアライズ/デシリアライズライブラリが何のためにあると思ってるんだ
>>516 いや、試験しろよ
動くよ(多分)じゃ製品にならん
お遊びならいいんだろうが
>>518 ,
>>522 試験しないんじゃなくて
環境非依存の書きかたにすれば
試験項目が減るって話でわ?
>>520 のいうとおりライブラリ
を使うのは賛成
バイトオーダが違うような環境の両方に対応させるのなら 両環境で同じ試験を一通りするもんじゃないの
>>524 言語仕様で保証された範囲内で書かれてるんなら
リグレッション試験相当で十分じゃね?
高級言語使ってんだから。
実行されるマシンのアーキテクチャって、だいたい決まってるよな。 エンディアンの変換ロジックをテストしてもエンディアン自体をテストするのはまれじゃないか? どんな環境でも動くぜ的な趣味で作るようなやつならいざしらず、複数のアーキテクチャに対応するとか、今となっては一般的じゃないな
言語仕様に従って書いていれば 環境依存なんてそうそう無いぜ 自分のコードが処理系依存かどうか 意識するのはあたり前じゃねーの? 多バイトオブジェクトのメモリ イメージをそのまま保存とか怖すぎる
このソースは環境依存って丸ごとifdefでくくってそれで終了だな あるかどうか分からない移植を考えていちいち対応するのも馬鹿らしい
いや、試験しろよ 動くよ(多分)じゃ製品にならん お遊びならいいんだろうが
>>529 はバウンダリ試験したあとに
intの値総当たりで試験しないと気が済まな
そうなタイプだな。
言語仕様を知らないから処理系依存しまくりの
ウンココードを量産して
PCメーカーごと、HDD容量ごと、
ディスプレイの解像度ごとに全単体試験を
やり直してるに違いない。
(⊃д⊂)コンバン・・・∩・д・∩ワー
動くよ じゃなくて 後でここを直せば動くよ だろ
だるいときの定型コンビネーション #ifndef #error
オマエら暇だな。 世間は大型連休だと言うのに 家に引きこもって2ちゃんとオナニーしか することないんですか?
>>535 /⌒ヽ ヤル気でない
く/・ ⌒ヽ
| 3 (∪ ̄]
く、・ (∩ ̄]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>535 世界一の放射光施設の一般見学に参加しました。ポスターの前でわけわかんなくてうんうんうなっていると、宗教勧誘の人が酔ってきていろいろ教義解説していただけたんですが余計にわけわかんなくなりました‥‥。
世界一ってすごいんだなあ二番じゃだめなんだなあ、て思いました。
結局ポスターセッションだけで結局一日が終わってしまって、結局設備を見る暇がなかった‥‥‥。
ビッグエンディアンで入手しやすそうなのは、旧Macあたりか? …ミドルエンディアンの機械とかって入手できんのかこれ
Objecttive-Cの質問をしたいんですが、スレチ? なんか前はスレあったみたいなんだけど、落ちてるみたいで・・。
mac板になかったっけ
>>541 ここでもいいんじゃない?もしかすると質問に答えてくれる人がいるかもしれないし
>>542 見てきましたが今はないぽいですね。
>>543 そうします。
objective-Cを cygwin上でかつ、clangでコンパイルしてる人いませんか?
この時点でかなレアケースだとは思いますが・・・。
C++あるいはVC++なんかで、 代入や計算結果を自動的に範囲制限(いわゆるClip)(min〜max)してくれたり、 あるいは端を超えると裏回ってくれる(いわゆるWrap)(min〜max<-min〜max->min〜max〜)型ってありませんか? 自分で作れるんですが、標準のものがあればそれを使いたいです。
なにそれ
547 :
デフォルトの名無しさん :2013/04/28(日) 20:16:05.63
自分で作れ
548 :
545 :2013/04/28(日) 20:17:28.42
了解ですw
うおおお、そんなのはCじゃねぇ たとえおてんとうさまがゆるしても おいらがゆるさねぇ
>>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 参考になりやす!
やっぱテンプレートっすよね。
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
どれもキワモノ臭が漂うな
ほらはよ
頭でもやられたかw
struct A { void test(){} template<typename T> void test(){} }; A a; a.test(); a.test<int>(); この2つのtest()は正しく区別されますか?
まずオマエの環境の結果を書けよボケナス
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』
区別されるかの回答はよ 急いでます
テンプレートでないtestが優先されるっちゅうこっちゃね
へー。だから何?って仕様だな
テンプレートなメンバ関数を型を明示して使う場合、 a.template test<int>(); って書かないとだめなんじゃないの? 非テンプレートな同名のメンバ関数の存在にかかわらず。
アスぺ「まず561の考える正しいの定義を説明してもらおうか
アスぺ「
>>567 明示して使うのが前提ならそうだろう
>>567 んなこたーない
test<>()でいけるはず
570 :
569 :2013/04/30(火) 15:26:33.84
>>567 すまん嘘を書いた。
<>と書けるのは引数から推論できる時だけ
だが明示的なtemplateキーワードは無くていい。
C++は本当にKUSOだな。 上級者でも(むしろ上級者ほど)規格片手にコード 書かなきゃいけない言語はおかしいだろ。 何のためのプログラミング言語だよ
そんなアホコードを書くやつが悪い
>>571 使い捨てのプログラムならそんなことしなくていいし、長期間にわたって正しく動くことが
要求されてるプログラムならどんな言語で書いてもそうなると思うんだけど。
本当にC++のせいなのかい?
574 :
デフォルトの名無しさん :2013/04/30(火) 17:12:13.82
規格票を見るのが嫌いな人が、向かない仕事で苦しんでいるのはともかくとして・・・ typename 前置とか private 継承みたいに、マジクソなところは確かにある しかも C++11 という大改訂のチャンスを逃して残ったのが大量にあるし
private継承の何がマジクソなのかと
コンパイラに怒られるのが嫌だから全メンバを公開しろってことだろ言わせんな恥ずかしい
>>574 お前が提案のチャンスを逃したせいだろ。今さら文句言うなよ。
578 :
567 :2013/04/30(火) 19:02:09.16
おまえらよくそんな膨大な仕様が あたまに入ってるな
そらあ、仕様を読まずに書いて失敗したからな リーマンショックでやばい時期だったから、必死にもなるわ C#だけどな
aの型がテンプレートパラメーターの時は a.testが何物かわからないのでtemplateが必用。 aの型がわかっているときは要らない、なのかな。 こんなくだらないことでおまえら大先生の意見が分かれるとは やはりC++はKUSOだな。
規格の該当個所はよ
567はtemplate限定子がどういうものなのか全く分かってない template限定子はtemplate引数型のtemplateメンバを使う際に付けるもの template引数型はどんなメンバを持つか分からないから、 とりあえず変数か通常の関数として解釈される それを曲げてtemplateメンバと解釈させたければtemplate限定子が必要になるし、 型と解釈させたければtypename限定子が必要になる これ以外のケースでは限定子は使われないし、使えない 入門書にも書いてあるレベルだと思うが
いや入門書はiostreamと 間違いだらけのクラス概説で終わるから
限定子も書いてない入門書なんてポイしなさい! ポイ!
同じキーワードが色々な意味で 使い回されるからこういいった間違いが起こる。 やっぱりC++はウンコだね おウンコ
初心者はまず入門書としてハーブサッターとアンドレイアレクサンドレスクと禿を読みなさい!
ウンコウンコいいながらこのスレに執着してる奴ってどんだけウンコ好きなんだよ
今手元の入門書見たら、typename限定子は書いてたけどtemplate限定子は書いてなかった
おっとーー、ここで規格マニアのアスぺ
>>588 が登場!
アスぺにはアスペな回答をしてあげよう
誰も付けちゃいけないなんて言ってないよ?
ロベールだと837ページに書いてあった
なんて書いてあるの!
>>578 class hoge って...
これで情報はウンコって決定だな
C++がKUSOなのは今に始まったことではないね ファイル1: extern int g;//外部リンケージ ファイル2: static int g; extern int g;//内部リンケージ こんな言語がウンコでないなわけがない
>>597 >C++がKUSO
だからC#なんてのを作ったんだろ
>>600 C++03ではaの型がテンプレート引数なら必須、それ以外は「つけちゃいけない」
C++11では他のケースでも「書いていい」と言ってるのが
>>588
先生、お時間です
まとめると C++11では明示的にするために a.template test<int>(); がOKになった 当然、a.test<int>();もOK で、C++03(まで?)では明示は駄目だから a.test<int>(); にしる こんな感じか
>>604 aの型がテンプレート引数でない場合は、な
>>603 externなんぞ害悪にしかならんので忘れてよろしい
aの型がテンプレ引数の時 ○ a.template test<int>(); × a.test<int>(); aの型がテンプレでないとき △ a.template test<int>();//昔はダメ。G++は今もダメ? ○ a.test<int>(); 勉強になったよ。奥が深いね…
>>605 アホなこと聞くけど
aの型がテンプレート引数ってコードだとどんなの
>>606 の
aの型がテンプレでないとき
△ a.template test<int>();//昔はダメ。G++は今もダメ?
はC++11の仕様はNG? それともOK?
おまえらパソコンの大先生だな どんだけ人生の貴重な時間を ウンコの時間に割いてるわけ
FDIS見たらきちんとacceptされてたわ
こんなマイナーな仕様変更とかどこで情報得てるんだ?
>>588 は
もう一つのスレで噂になってた 自称アスペさんじゃないの? GCCも実装漏れするマイナー仕様変更が ぱっと出てくるなんて
なんにせよすげえわ 参考になる
テンプレートなんてヘッダで定義してまでメンバで使ってるのがもうお笑い種 いちいち書かないとTとconst T&の呼び分けすらしてくれない欠陥品をよく使ってるもんだと感心します プリミティブのconst参照なんて認めて誰が得するんですか? 限定子やら特殊化やらで結局ゴチャゴチャさせんのなら 素直にオーバーロードした方が綺麗で早そうだね^^; アッタマ悪ぃ言語w
釣りとしてはイマイチ。 だけどテンプレートを暗黙でインスタンス化 しようとしたらヘッダーが肥大化するし、 翻訳単位ごとに重複したインスタンスを ODRで一つにする動作も見苦しい。 C#は実行時にインスタンス化だっけ?
>Tとconst T&の呼び分け 正直、スマンカッタ。反省してる。 今度からf(T &&)とf(T const &)のオーバーロードだけにしてくれ。
そして、部分特殊化とオーバーロードの議論に
>>597 ファイル2でコンパイルエラーだろ。
そんな結果になるのならクソなのはコンパイラのほうじゃないの?
>>620 7.1.1 [dcl.stc] p8 "The linkages implied by successive declarations for a given entity shall agree."
624 :
デフォルトの名無しさん :2013/05/01(水) 17:38:32.53
炎上勉強法って何?wwwwwwwwwwwwwwwww 炎上学習法なら知ってるけどwwwwwwwwwwwwwwwwwwwww
坊主、そんなにたくさん草ばかり生やしてもダメだ ちゃんと乾燥させておくんだ
>>622 Cのほうはちゃんと規格の文言に基づいて説明できてるけど、C++のほうには対応する文言が
無いから、やっぱり
>>621 のルールでアウトなんじゃないの?
>>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の内部リンケージの定義に該当しないような
やはりC++はブリブリUNKO おまえらパソコンの大先生が古文書片手に議論しても 意見がまとまらないなんて、国際標準が意味をなしてない
C++がウンコだとしても仕事がそのウンコでしか出来ないことも多々あるし、そもそもこれ以上のウンコなんて山ほど転がってる。
>>627 3.5のパラグラフ3〜4と7.1.1のパラグラフ8を総合した結果だろうな
分かりづらいけど、例もあるし、エラーにならないのは間違いはない
>>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 ←???
>>630 どこをどう読んだら
>>597 の例が
>>621 のルールに反していないと言えるのか、詳しく。
例以外に根拠にないなら、例が不正ということになるだろうし。
文盲がいるな
>>627 は定義と例が矛盾してるって言ってんだろ
・staticで宣言されていれば必ず内部リンケージ(3.5) ・後続の宣言は同じリンケージを持つ(7.1.1) ・externを付けると必ず外部リンケージになるという項目は存在しない これらを総合すると・・・
>>634 > ・後続の宣言は同じリンケージを持つ(7.1.1)
こんなことが書いてあるのは見当たらない・・・該当箇所の引用もくれ。
>>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が矛盾してない?
-----ここまで俺の自演 v(。・ω・。)ィェィ♪-----
C++、KUSOすぎww externごときでもめんなよ大先生ども
extern使ったことないわ 何に使うんだっけ
640 :
デフォルトの名無しさん :2013/05/01(水) 21:51:31.37
cout
先生、お時間です
規制されてて携帯からなので引用は難しい
>>636 はサンクス
>>597 のgを解析する際にも恐らく3.5のパラグラフ3が適用されるのではないだろうか
いつstaticが付けられたかにまで言及してないので
最後のgを解析する際にも、ね
>>642 > いつstaticが付けられたかにまで言及してないので
その解釈だと extern が先で static が後のケースも通らないとおかしいんじゃないか?
>>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だった場合も」
と思うのなら国語力が怪しい
>>644 プログラムは上から順番に解析されるので、
その場合はexternを解析する時点ではまだstaticがないので3.5のパラグラフ4に従って外部リンケージになる
staticを解釈すると3.5のパラグラフ3に従って内部リンケージになるけど、7.1.1に反するのでエラー、
じゃないかな
>>645 いや、そんなことはない
その項目は識別子に対する規則であって宣言対する規則ではないから、主語から見て
まあ、Cではすっきり書かれていた規則が
なんでここまで分かりにくくなってるんだろうとは思う
>>647 >いや、そんなことはない
ではexternは(明示的なstaticがないから)内部リンケージでないということになるのでは?
わかりにくいでなく、3.5の定義からどうしてexternが内部リンケージ足り得るのか、ご教示願いまする
やはりC++は超ブリブリおUNKO おまいらパソコンの大先生が古文書片手に議論しても 意見がまとまらないなんて、国際標準が意味をなしていない スカトロプレイもたいがいにして、仕事が他言語に奪われてレーゾンデートルが無くなった事実を認識したほうがいい
extern 付いた宣言が外部リンケージになるのは、 extern が付いてるからじゃなくて、 実は先行する宣言含めて static が付いてないから、ってことかー。わかりにくいなー。
>>648 3.5は主語が識別子なので、
例えば、宣言以外で出てきたgに対しても適用される
こう書けば分かると思う
static int g; ← 内部リンケージ
void foo(){g=1;} ← 3.5により、内部リンケージ
extern int g; ← 3.5により内部リンケージ
>extern int g; ← 3.5により内部リンケージ ダウト これはgが前のgと同じと判断する前に外部リンケージ変数の宣言と見なすべきで 結果、同名の異なるリンケージ宣言でエラーとすべき
>>653 そんなこと書いた規則は存在しない
こう書いた方が分かりやすいか
static int g;
void foo(){g=1;} ← 3.5により内部リンケージ
extern int g;
void bar(){g=2;} ← 3.5により内部リンケージ
先入観を捨てて規格と照らし合わせる事だ
>>654 static int g;
void foo(){g=1;} ← 3.5により内部リンケージ
extern int g; ←★これは何だったのおかしくね?
void bar(){g=2;} ← 3.5により内部リンケージ
何だったも何も、何にもならない 規格を厳密に適用するとそうなるんだから仕方がない
>>655 extern が付いてたら外部リンケージになるっていう規定は無いんだから、
リンケージについては何も関与せず、ただ定義ではないことを示すのみ。
>>657 >extern が付いてたら外部リンケージになるっていう規定は無いんだから、
>リンケージについては何も関与せず、ただ定義ではないことを示すのみ。
じゃあ
extern int g;
static int g:
これもokだよね?
俺も最初この仕様を知った時キモッ!って思ったので気持ちは分かる でもそういうものなので諦めれ
だから「そういうもの」が3.5のどこに書いてあるのか示せばいいだけだろ Cとかブロックスコープの3.5p6のような記述を
おまいら、段落番号で会話すんなよ
3.5p4に外部リンケージの定義がある 内部リンケージでなく無名名前空間外なら外部リンケージというもの この定義の中にexternなんて語は1つも出てこない (constかconstexprがつく場合を除く)
>>663 内部リンケージかどうかの定義が
>>631 でそ。
だったら
>>597 の二つ目はstaticが無いから
外部リンケージだね。
Cにあった「前の宣言に従う」ルールを
C++では削除してんだから。
>>661 まず3.5は限りなくグレーだ。
Cにあった説明が無いから
前の宣言を引き継ぐか
その宣言内で判断すべきか
が自明ではない。つまり
3.5だけでは完結しない。
一方、7.1.1は明確だ。
これらを総合すると、
3.5の怪しい記述は
「Cと同じルールが適用される」
という結論になる。
これで完璧。
>>665 Cとはそもそも内部リンケージの定義が違う
Cでは宣言がstaticを含むなら、その宣言内の識別子(the identifier)は内部リンケージを持つと言っている
C++ではある識別子(a name)はstatic付きで宣言されていれば内部リンケージだと言っている
一見微妙な差に見えるけど、C++は宣言以外の位置にも適用できるようになっている・・・と思う
C++というよりWG21がKUSOだな 難解な上にどうとでもとれる糞記述 仕様の共通化を計るための標準が 目的を果たしていないといっていい そういう意味では禿の書物は偉大
(⊃д⊂)コンバン・・・∩・д・∩ワー ここは入門レベルの高いスレですね・・・ ぜんぜんついていけません(><)
>>668 回答者が社会の底辺の糞なので気にしないように
ちょ、除いてみたら基地外スレじゃねーか そっちの方がスルースキル上級
水晶NGワード KUSO UNKO 糞 ウンコ 段落 オナニー www
/\___/\ / ⌒ 俺 ⌒ ;\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | (●), 、(●)、 | | キンタマ中古C言語命!!” ⊂. | ,,ノ(、_, )ヽ、,, | < 今日もキンタマ中古C言語でソース乞食するゾォォオオ〜っ♪” ,r----、__|.Javaト‐=‐ァ' .::::| | 仕事レポート全部くれくれ乞食するぞォォォオオオオ〜っ!” /Ruby \最強ニニ´ .:::/ \____________________ (ひま,/¬--v \____/⌒\ /⌒ ( ] |丶 ̄ ̄ /丿 丿 ─ (_ _丿 ,ノ--v_\ 糞 ノ ノ ─  ̄ ノ宿敵 リ--─ーARM八 〔 マシン語 Python__,ノ′ヽ ギャハハ!!!! バ〜〜〜カ♪” ,ノ'' ー--ー┘■■ ̄\ │ / /  ̄■■■/ \ | #○&#$△#%&$▼&%#!!!! ノ /]アンチ|■AMD命|\| \\ (↑意味不明w) | / .| Intel | ) ノ |/′ | .| |---く | | \ ] ※)一部見苦しい部分がありますが御了承下さい。
>>672 「この辺」と言っただろうに
それの前スレはまだマシだったんだぜ……?
どうしてJavaやC#使いはC++に憧れるのか C++を勉強するJavaやC#使いが急増中 C++に男らしさを感じる人が一番多いことが判明 Javaは恥ずかしいと泣きながらC++使いに謝る JavaがC++の実行速度を上回る!?禁断の-serverオプション Java/C#使いの半数はC++を使えることが判明 〜勧告ニュース板より〜
STLのstringで、先頭の1文字を削除するシンプルでエレガントな書き方を教えてください。
>>677 まずあなたがボツにした案を列挙していただかないことには、何を答えても
「シンプルじゃない」「エレガントじゃない」と言われそうな気がするので、あまり
気が進みませんね。
679 :
677 :2013/05/02(木) 11:00:52.78
wstring str; // 文字列取得 str.erase( 0, 1 ); でいけました! 失礼しました。
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); }
>>677 破壊的でいいなら
str.erace(str.begin());
でいいんでないの
683 :
デフォルトの名無しさん :2013/05/02(木) 15:04:16.11
うるさいゴミ
>>683 いきなりゴミって、どういう事ですか?君には社会の常識がないのですか?
普通は、『あのう、すいませんけれどもレスしないでくれませんか?』とか
『あなたには、スルーという選択肢もありますよ』とか言うものですよ、
あなたみたいに最初から喧嘩腰だと、
言われた方『じゃぁスルーしてみようかな』とかいう気持ちがなくなるものです。
まずは、親切丁寧に人にROMしてくださいと頼むべきだと思いますよ。
そこから、人の輪と協調が生まれ、『よーしクソレス止めてみるか』という気持ちが生まれるわけです
686 :
デフォルトの名無しさん :2013/05/02(木) 17:45:01.26
やかましいゴミ
687 :
デフォルトの名無しさん :2013/05/02(木) 17:45:18.74
by seikyou.ne.jp
性教育か
このスレも初心者歓迎スレやapiスレっぽくなってきたな hogeキチが普通の人のC/C++スレは荒れてないと面白くないからな
世の中には「ごみ」という名字の人も居る
692 :
デフォルトの名無しさん :2013/05/03(金) 01:39:45.92
「くず」さんもいた 「アホカス」さん、「メガチンポ」さん、「カタイネン」さん、・・・etc
「相談」しよーそーしよー
このメソッドはオーバーライドしています/オーバーロードしています というのを明示する修飾子ってなんかある?
override
696 :
695 :2013/05/03(金) 16:02:55.29
オーバーロードはたぶん無い
書く順番は void f() const volatile && final override throw() であってる?
-> decltype()もおながいします
>>699 overrideはBisual C++ 2012でもいけるはずだが
ごめん俺が勘違いしてたC++11からあj
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++の方が正しいんだろうなたぶん
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(...) { }
voidで渡されたポインターから 元のクラスを調べることはできますか? void * p=get(); if ( pがクラスAか? ) else if ( pがクラスBか? )
705 :
デフォルトの名無しさん :2013/05/03(金) 21:15:30.31
先頭にハッシュでも置いたら?
基本的には無理 型情報を一緒に渡すか、 データの先頭に型情報を置くかする必要がある
辞書データ構造のことをハッシュと言う奴は低脳
お前は突然何を言ってるんだ
いつも誰かを叩いていないと不安神経症で死んじゃうんです。 お察しください。
ハッシュドビーフは大好きです
>>709 ハッシュテーブルを自分で準備して自分でタイプ分けしてね、というのがまっとうで、あと神クラスを作れ、とかもありますね。
03で書いてるページ全滅しないかな 職場の老害が値渡しにいちいちアレルギー起こして困る ついでにconstexprすら実装してない腐れVSも
VS2012でarrayが予約後みたいになってるんですけど namespace a { struct array{}; } のように新たな名前空間でarrayを使っても平気ですか?
>>714 std::arrayクラスとかあるんだから
何ら問題無かろう
>>712 どうしてデータ構造がハッシュテーブル限定なのかkwsk
>>716 std::mapかハッシュテーブル(なんでもいいけど)
って書いてある
STLがイケメンすぎてつらい。
>>716 ごめんstd::map は平衡二分木だったんだね連想記憶はすべからくハッシュ関数を使っているものだと思い込んでいた
>>720 他の言語でもそうだけど、何で連想配列が
std::mapとstd::unorderd_mapの
二種類あるのかは知っておかないとやばい。
ただmapはBツリーだなんて決まってないよ
>>703 これがC++11なのか?
ずいぶんと変態な言語だなおい
723 :
720 :2013/05/04(土) 04:23:23.56
どなたかおしえてください ↓こういう雰囲気でやりたいのですがよく分かりません codepad.org/KFWuHc9w
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); }
y(3.3, 4.4)は不要だったな
728 :
724 :2013/05/04(土) 18:25:30.04
>>725-727 大変ありがとうございます!
教えて頂きたかった部分以外にも色々と勉強になります
C#だと前方宣言なんて必要ないんで、とまどうかもね 最悪の場合クラスへのポインタを持っておくとか あ、でもnewも不完全型には適用出来ないのか
そこでPimplですよ あと、どうしてもおかしな循環参照になってしまう場合、クラスの設計をやり直す
誰か Line getLine(Point b) に突っ込めよ
今言っても分からないんじゃないかと思って黙ってたけど 普通に変換コンストラクタで行けるのにな
C++良く知らないんけど
>>725 の
Line Point::getLine(Point b)で
Line(*this, b);
これになんで*thisつけるないといけない?
は?
>>734 の最後修正
これになんで*thisつけないといけない?
そんな修正はいらない。 Lineは2つのPointからオブジェクトを生成するから *thisと引数の二つを使用した。 何か問題でも?
自分自身のインスタンスを渡したいんだろ 他に意味があるか?
わざわざ、this渡したの
Line(Point b)がない。つまり
自分自身と引数のPoint bから新たなLineを生成するメソッドがないからってこと?
それを作れって言っているのが
>>732 の変換コンストラクタ?
>>739 >自分自身と引数のPoint bから新たなLineを生成するメソッドがないから
それがgetLineなのだが、オマエは何を言っているんだ?
変換コンストラクターは
>>732 の世迷い言なので気にしなくていい
ああ、Line(Point a, Point b)みたいのがあればいいのに 自分自身と引数から作るメソッドなんて不要
>>742 >みたいのがあれば
いやすでにあるだろう。
Line l = x.getLine(Point(5.5, 6.6));
なんて不要で
Line l(x, Point(5.5, 6.6));
にする。
少なくともPointにgetLineというのは意味的におかしい
C++ってホントに難しいですね
効率の良い機械語に落とすために人間が苦労する言語だから仕方がない 楽をしたかったらC#でも使っとけ
C++のムダのなさは快感。
いつも思うんですけど friend std::ostream& operator<< って糞コードですよね? 全うな設計者ならpublicなtoString()を作ると思うんです
>>744 完全に理解してる奴なんてこの地上に存在しないってレベルだからな
誰も突っ込まないみたいだけど。
>>721 普通、Bツリーって言ったら二分木(Binary tree)のことじゃなくて
特定の多分岐平衡木構造をさすと思うが。
ディスク上のデータによく使われるやつ。
map の実装が二分木なんて決まってないのはその通りなんでいいけど。
clock_tとint32_tとかの_tってなんですか?
752 :
デフォルトの名無しさん :2013/05/04(土) 23:19:11.48
tits
big
>>751 型(type)
昔は(規格内では)typedef型にのみ使われてたけど、
今はwchar_tとか予約語でも使われてる
void get_string(std::string& result); と std::string get_string(); は、 後者は戻り値で余計なコピーが派生するから前者のほうが速いって、 以前言われたんですが、C++11でも同じですか?
>>755 C++11なら後者の方が同じか速いし何より書きやすい。
>>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でも省略許可されていたような)
>>748 それはすべてのオブジェクトが神オブジェクトから派生することを前提に使える仕様、C++ なら自分でそうすればいい
>>758 3つ目
省略可能なのはコピーコンストラクタのみ
代入は省略できない
>>760 代入は確かにコピコンじゃないわな。
でも11だと省略できるのん?
戻り値にあったバッファ所有権を初期化先へ移動させることにより バッファ自体のコピーなしで実現できるようになった
>>761 できない
その代わり、代入がコピーでなくムーブになるので速い
ただ、それでも引数から渡した方が若干速くなるケースもある
引数に既に中身がある場合、
バッファの再確保が避けられる事があるので
中身が空の場合はほぼ同じ速度かな
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が効かなくても 効率は悪くならないはず。
おまいらアスペだな。 03と11の違いじゃなくて 前者と後者の差について答えてやれよ
代入時の話なんだからRVOとか関係なくね?って思うんだけどどうだっけ
俺の想像によるまとめ: 結果が関数内で生成される場合 初期化の場合 03: RVOにより直接が期待できる 11: RVOにより直接 代入の場合 03: 最低1回のコピー 11: ムーヴなので中身のコピーなし★違い 結果が関数内で生成されない場合 初期化の場合 03: 最低1回のコピー 11: 最低1回のコピー 代入の場合 03: 最低1回のコピー 11: 最低1回のコピー
>>767 多分、前者の内部で代入するケースと比較してるのだと思うが、
前者では通常わざわざ代入前にstringをコンストラクトする必要がないので
前者のが速い
と老害が申しております
ムーブも万能の特効薬じゃないから
効率悪い場合もある
引数のバッファを直接再利用できる場合とか
http://ideone.com/x6Guc3 ただ、少なくともコピーよりは効率がいいし、
再利用できない場合はムーブで上等
結局どう使われるかだね
前者は参照のコピーだけなので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なら何も気にせず後者で書く。
. /\___/\ / ⌒ 俺 ⌒ ;\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | (●), 、(●)、 | | キンタマ中古C言語命!!” ⊂. | ,,ノ(、_, )ヽ、,, | < 今日もキンタマ中古C言語でソース乞食するゾォォオオ〜っ♪” ,r----、__|.Javaト‐=‐ァ' .::::| | 仕事レポート全部くれくれ乞食するぞォォォオオオオ〜っ!” /Ruby \最強ニニ´ .:::/ \____________________ (ひま,/¬--v \____/⌒\ /⌒ ( ] |丶 ̄ ̄ /丿 丿 ─ (_ _丿 ,ノ--v_\ 糞 ノ ノ 今日も見にくい小文字でプログラミングするぞ〜!!(ギャハハ!!wwww”  ̄ ノ宿敵 リ--─ーARM八 〔 マシン語 Python__,ノ′ヽ ギブ・ミー・レポート!!!! ギブ・ミー・ソース!!!! ,ノ'' ー--ー┘■■ ̄\ │ / /  ̄■■■/ \ | #○&#$△#%&$▼&%#!!!! ノ /]アンチ|■AMD命|\| \\ (↑意味不明w) | / .| Intel | ) ノ |/′ | .| |---く | | \ ] ※)一部見苦しい部分がありますが御了承下さい。 .
>>775 >ideoneだとなぜか同じだな
理由が本気でわからないんですか?
どうでもいい話だろうけどmoveを委譲と訳すのには違和感がある プログラミングで委譲って言ったらdelegationあたりがメジャーだからか あとはまあ意味的に移譲のほうがいい気もするし
目的が委譲 手段が移動 何ら問題はない
規格の用語がmove constructorなのに 委譲コンストラクタでは 他人とのコミュニケーションが 難しくなりますよ?
うわっ、つまんねw
>>781 friend std::ostream& operator<<
がイケてないのは
「オブジェクトの内容を文字列に変換」
と言う極めてありがちな処理の
汎用性を放棄しているところ。
こんなことも出来るぜアピールとしてはいいけど
cout << obj.toString() << endl;
の方が100倍マシ
>>781 英語の前に実測値を読めるようになった方がいいよ
コピーとムーブではムーブのが速いというだけで、
それ以外のケースよりムーブのが速いとは限らない
速度を非常に気にするケースでは
ムーブが最適解にならないケースがあることを知るべき
(いずれにせよコピーは論外だけどね)
std::to_stringが入ったんだし T::toStringよりもstd::to_string(T)にしたほうがいいと思う
>>782 C#に頭毒されすぎ
そんなにtoStringが欲しかったら自分で作れ
「オブジェクトの内容を文字列に変換」するオーバーヘッドが馬鹿にならないので
C++は便利さを捨てて「自分でやれ」式になってるんだろ
Cの精神を踏襲している
>>786 上はわざわざtest2をコストアップさせて何がしたいの?
馬鹿なの? 死ぬの?
ムーブを利用する場合は
新しくメモリを確保してからswapになる
どうしてもメモリ確保が入るので
バッファの再利用ができる場合は遅い
一方、バッファの再利用ができない場合はムーブで良い
例えば、str::ostringstreamを使って文字列を作る場合とか
ケースバイケースなんだよ
基本的には気にせずムーブしていいけど、
シビアな場合はムーブを過信しちゃいけないという事だ
ムーブ以前の問題だな。 警戒するまでもなく、こんな冗長なキャストを見た時点で設計の失敗を確信する。 便所の中で如何に清潔に飯を食うかを苦心するようなもんだ。
ムーブさせないようにする説明用のキャストを見て 設計とか言っちゃう男の人って……
だったらもう少しキャスト已む無しと思えるようなものを提示しなさい。 ムーブの方が遅くなる時点で、既に効率化とかいうレベルにないコードであることが分からないか。
C++03的動作との比較なんだから強引なのは当然 ムーブと速度が変わらないのは謎 gcc 4.6.0 だと明らかにコピーのが遅いんだが、 gcc 4.7.2 だと同じになるようだ
コンパイラ進歩してるんだな
進歩か? 怪しい動きに見えるんだが……
お前ごときがコンパイラ様にケチつけるとは
コンパイラオプションにmoveが使えるところには使うってオプションがあるとか? いちいち読んでないけど
彼らはBASICから得られた体験を ” タブー視 ” しなければいけないため、常に孤立を要求される。
797 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
質問なのですが、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)なので 単純に生の配列を使って自前でキューイングしようと思いますが、今後常にそうとも限らないし、
>>799 キュー構造というのは本来そういうもの(純粋にFIFOするもの)だ。
FIFO以外の機能が欲しければ deque なんか使って自作するしかないが、
それはもう純粋なキューじゃないな。
C++11では my_string(my_string &&other) operator=(my_string &&other) も書けよになったのか。C++複雑になりすぎ
面倒なら my_string(my_string other) my_string &operator =(my_string other) でまとめても良い
乱数ほしいんだけどcstdlib使うのってダサい?
メルセンヌツイスター使え
乱数は /dev/urandom から取得するのが普通。
まず、 可搬性の要否 再現性の要否 周期 をはっきりさせなさい
std::random使え
>>804 ダサすぎ。C++11になんか格好良い奴があるんじゃないのか
C++11ってカッコイイの多いよな。
ラムダの仮引数の型を書くのが面倒なんだけど、C#みたいに型推論できないの?
C++はゆとり・へたれ用言語じゃない
>>813 そうなんだ。
じゃあ最初からできるようにしとけよハゲ。
Cから見ればC++もゆとり用言語で、ゆとり様のために拡張しまくりだからな
でもC++使ってもさ、ちっともゆとれないよな
>>815 じじいの多いC++屋が忘れていた。爺には良くあること
現状のC++は、C++屋が年をとり介護か必要になり、自分で色々出来なくなった。
それを補うためにゆとり拡張を気合を入れてするようにしたって感じかな
彼らはBASICから得られた体験を ” タブー視 ” しなければいけないため、常に孤立を要求される。
禿も年なんだから許せよ禿
821 :
デフォルトの名無しさん :2013/05/06(月) 00:54:07.47
POKE, PEEK, USR
>>816 Better Cと呼ばれる(ことがある)所以である
いいから黙ってC++使いこなせよ 代替はないんだから
代替? オナニー以外でC++を使うというのか?
逆にオナニーだけでC++使ってる人って、何考えてるのか分からん どういう意味があるの?
普通にC++は現役でいろんな制御システムで使ってるから。 つい最近CからC++に移行したのもやってるし そいつ無職かITドカタなんだよ、察してやれ
Qとかオナニーで使ってるんだろ 本当はCしか分からない(それも糞コードしか書けない)のにC++になると よりいっそうその糞さが目立って見てられない
オナニーだけで使うなら普通はCかC#、JAVAあたりになるわな。 複雑怪奇なC++を選ぶ理由はあんまりない。
>>828 Qの自己愛性パーソナリティ障害の「僕ちゃんってすごいでしょ」病が出ていてアイタタタ
だよな
PS3ゲームの体験版とかでSTLのライセンスが表示されてるのたまに見るな
STLって何ですか? C++しか使ったことがないのでわかりません
>>832 C++をやっていればSTLを知らないはずがない
嘘乙
>>833 ほう、ではそのSTLとやらの定義を伺おうか。
と荒れるからやめれ
>>834 馬鹿発見
ISO/IEC 14882:2003も読んでない奴はすっこんでろ
>>836 ISO/IEC 14882:2003のどこに書いてあるの?
1998でも2011でもいいけど
>>837 自分で「規格票は読んでいません」と告白しなくてもいいよ
読んだけど見あたらなかったな
企画は読んでないけれど(汗)、 wikiが『STLの定義(何がSTLの一部であるか)には 様々な意見があり、人によりその解釈は違ってい ることがある。ここではC++標準ライブラリのコ ンテナ、イテレータ、アルゴリズム、関数オブ ジェクトを指すものとする』 って書いてある以上、企画にSTLという用語の定義が無いってこと?
企画って何?番組の企画でもするのか?
なんでSTLのライセンス表示っているの?業務で使うのやめないとダメ?
STLportだけとかじゃなく全部なの?
SDLの間違いとかだったら
>>831 は死罪な
ライセンス表示があるってことは 誰かの著作物ってこったろ。
>>841 荒らすなボケ
>>843 「書かれていない」系のレスには
書かれているページを答えろよカス
見れるんなら自分で分かるだろ 分からないならお前が低脳なだけ
スルーすればいいのに、流石にこれは恥ずかしい
それでも教えてほしいというなら金払え 100万ほどでいいよ
Qがご迷惑をお掛けしておりますm(o´・ω・`o)mペコリン
規格に大きく貢献したので妄想は言い過ぎだが そろそろSTLという言葉は避けた方がいいのかも試練
boostも標準ライブラリに取り込まれたやつはboostって呼ばれないのと同じこと
iostreamとauto_ptrはSTLですか?
858 :
デフォルトの名無しさん :2013/05/06(月) 16:33:17.19
833フルボッコワロタ
C++の標準ライブラリでテンプレート使ったもの=STL これマメチな
そんなオレオレ定義はチラシの裏にでも書いとけよ。
↑これどういう意味?
STLの定義くらいどうでも良いものも珍しい
さあさあ世間様の連休も今日までですよ。 明日からは曜日感覚と書き込み時間に少しだけ気を付けてね。 身分がばれちゃうからw
>>859 C++の標準ライブラリ(Cから引き継いだものを除く)=STL
866 :
デフォルトの名無しさん :2013/05/06(月) 17:38:24.29
>>846 消えろゴミクズ
質問したら荒らし扱いかキチガイ
↑気に障ったらしい
自分のレスの愚かさにようやく気づいて 恥ずかしさをごまかすために 暴れた奴がいるふりをしているんです。 お察しください。
boostからホイホイバクってくるってチョンすぎじゃね
>>827 >本当はCしか分からない
へえQのCを認めているんだ、あり得ない‥‥
>>869 パクってるんじゃねーよ
boostの開発者にC++標準化委員会が極めて多いだけだ
>>870 >(それも糞コードしか書けない) とちゃんと書いてあるだろwww
>>872 あんなものを「分かる」とかいってる分だけお前のお里も知れるというもの
あやつは「根本的に何一つ分かっていない」
>>873 文法だけは辛うじて分かっているようだけど、とにかく無駄が多いよな
Q ってなんだ?
アルファベットたった一文字で本人が特定出来るとか、よほど嫌われてるんですね
struct A{ void func0(){} void func1(){} }; template<typename T> struct B{ void func(){ T t; t.func2(); } }; B<A> b; //b.func(); この場合b.func()を呼ばなければコンパイルエラーにはなりませんか?
Things You Can Tell Just by Looking at his Code.
実体化した時点で終わりです
>>877 Qは下手ながらも一応プログラムを書いている中年ニート
uyは宿題スレの回答をそのまま提出して留年したバカでプログラムも書けなくて
荒らしているだけの真性キチガイ
片山も相当きてるが頭は良さそう
882 :
デフォルトの名無しさん :2013/05/06(月) 20:36:12.06
まとめるとこうか? 一般マ≫片>Q>u
>>878 クラスAにfunc2()がないんだからコンパイル通らないっしょ
>>882 どこかに《超えられない壁》を挿入してくれないか?
Exceptiona C++ 項目31 を読め馬鹿ども
gcc4.8では通らないなあ
>>886 読んだけどどうもVS2012のバグっぽいな
項目32じゃないの?
あ、ごめん質問を B<A> b; b.func(); コンパイルが通りません と読み間違えていた //でコメントアウトするとgcc4.8でも通る
どうでもいいけどこのスレってコピーコンストラクタを実装なしでprivateに置いとくテクニックも知らない連中ばっかなん
昔、そんなコードを書いてた時期もありました。
>>878 ならない
使われないメンバ関数は実体化されない
>>891 今は = delete の時代だよ
>>884 普通の人《超えられない壁》一般マ≫片>Q>u
>>893 11が出る前はprivateに置いてたろ?それを知らないとしたら問題だろ?
11の後に学習を始めた人は無視ですか? と揚げ足の揚げ足をとってみる
>>896 そんなテクニックはboost::noncopyableでとっくに使われていた
>>896 boost::noncopyable かそれに類するものを private 継承だな
ダイヤモンドって高級だけど、 プログラムでは「死の」なんだよなw
11の後に学習を始めた人とか初心者の方に行けよ
化石03マはさっさと滅べよ 冗長な慣習ばかり残しやがって
11の後に勉強を始めたとしても現状はdeleteで自動生成抑制できる環境が使えるのは大方個人開発だけだしなあ
908 :
902 :2013/05/06(月) 22:38:34.60
>>903 すみませんちょっと理解できませんでした。
noncopyable がpublic継承だと問題が起きるのは
どんなコードでしょうか?
むしろnoncopyableであることをpublicに
主張すべきではないかと思うのです
C++11の新機能が便利すぎて最高w
bind2ndとは何だったのか
C++11怖すぎ
冷凍したC++11規格書でプログラマを殴り続けると死ぬ
bindさんの万能感は異常
>>908 いらないよそんなの
特に関係性のないクラスを全部
boost::noncopyable& に渡せるとかキモいだけ
C++の規格を読みたいんですが、タダで読めますか?
今更03を勧めるってのもね 俺は11のFDIS持ってるけど、 もう公開されてないみたいね
冊子を注文してCD-ROMが届いたら 返品ものなのだが
FDISならその辺でキャッシュに残ってそうなものだけど だがドラフトはあまりオヌヌメできないかな
PDFも大学に行けば普通に共有されていたりするけどな
最近は自宅で共有する人も多いみたいだよ
923 :
デフォルトの名無しさん :2013/05/07(火) 20:02:57.66
リソースから.wav形式のものを再生したいのですが、 どうすればいいでしょうか。 また、プログラム起動時再生するようにして、 ボタンでON/OFFを切り替えることは可能でしょうか
すれち
>>923 C++11にそれを実現するSTLがあったような
どちらかというと必用なのは オンオフ情報をレジストリに 読み書きするSTL
>>原本冊子をお求めの場合は、CD-ROM のCD-ROMを原本冊子にswapするSTLを探してるんだけど
>>923 多重再生が不必要で単純にWAV再生したいなら、PlaySound関数を使う。
ON/OFFの状態は、INIファイルかレジストリに記録しておく。
y1がグローバル変数とか糞過ぎる
変数とか関数とかクラスとかの 頭文字って全部大文字にで良い? 名前のルールが分からん……
>>933 C++の規格書に載っている。C++11を規格書読め
趣味なら俺ルールで良いけど、仕事なら規格書のスタイルが規範
ぷっ
趣味でもありえない
仕事なら指定されたコーディング規約に従うでしょ あと、規格書の「T*」スタイルは 臭い物にフタをしただけの一貫性のない書き方 なので好きじゃない
> 規格書の「T*」スタイル ってたとえばどんなやつ?
linux/windows 環境です。 通信相手のユーザーから渡されたバイト配列が 「正当なUTF8かどうか?」をチェックしたいです。 調べて見たところ、ICU、iconv、法則を元に自前で実装 等色々手段が ありそうなのですが、「これつかっとけ」みたいなおすすめライブラリはありますか?
正当ってどれのことー?とか考えると色々ダルいね ・UTF-8として解釈不可能 ・UTF-8として解釈可能だが冗長 ・サロゲートペアが冗長 ・文字の結合その他規則により冗長 ・正規化された文字列 一番上は弾く以外ないけれど、他のは受け入れるかどうかや受けれてから変換するかとか色々… 使うシステム側が受け入れ可能な"正当"によっても何処まで正規化するかは変わるだろうなぁ 最後の奴とかは、自前で検査を実装するのは変態か馬鹿しか居ないレベルでダルそう
上3つは規格上不正だったような
>>940 ありがとうございます。
なるほど、まずその定義が必要なのですね。
・データベースに読み書きが正しくできること
・不正なUTF8を許可してしまい、ハングアップしたり、セキュリティーホールにならないこと
あたりのアバウトな認識でやってました
2010用のICUビルドが2012で利用できたので
まずはこれからいじり倒してみようと思います
>>941 3つ目はUTF-16を前提としたシステムの互換性のために敢えて採用する場合があって、
その場合はCESU-8とかModified UTF-8とかいう名前になるけど、それをUTF-8と呼んじゃう場合があるから一応な
DBで古いOracleだかMySQLだかはそれ使わんとダメだった筈で、942の条件としては意識はしたほうが良いかもしれない
不正だろうが受け入れるシステムは受け入れてしまうし、吐き出すシステムは吐き出してくるからなぁ…
>>942 セキュリティホールって意味では「受けれてから変換する」動作でアレコレあるから特に注意したほうが良いかも
ダメ文字判定をUTF-8の冗長表現で突破とか、「それUnicodeで」で書かれてるようなUnicode自体のアレコレとか
>>943 >CESU-8とかModified UTF-8とかいう名前になる
Unicode規格のどこにそんなことが書いてあるのかね?
struct super{}; template<typename T> struct A{}; A<super> a; C++03でTがsuperを継承してるかコンパイル時に調べる方法ありますか?
>>946 >Status This is a draft document
提案中のドラフトですか
BOOST_STATIC_ASSERT + boost::is_base_and_derived
>>938 int* a, b;
ってやつじゃない?
ただそこまで言ったら
const intも本当は
int constにすべきなんだろうけど。。
複数の変数を一行で定義するからダメなんだよ 変数毎に行を変えればそんな事を気にする必要は無い
952 :
デフォルトの名無しさん :2013/05/09(木) 21:36:16.63
enum・・・いや何でもない
>>951 >変数毎に行を変えれば
それは正に「臭いものにふた」だよ。
もともと左から右に読む文法じゃないんだから、
変数ごとにしたって
const int* p;
const int* const* const (* const p[1])();
はやっぱり誤解を招く。
そう思ってるのはお前だけ
ポインタの宣言間違えてもコンパイルで気付くし別にいいでしょ
些末な事だよね
X const *const *const (*const p[1])(); void (__stdcall *pf)() これが一貫性があって最強 だがオススメしない
typedefさん(´・ω・`)…
p が const なのだから const は * にくっついてほしくないな
>>959 >p が const なのだから
んなこたーない。
constはconst Xの例外を除いて常に左に掛かる
void * const f(); そんなことよりBASICやろうぜ
>>960 int * const p = NULL;
これ、p が定数でしょ
int *const p = NULL;
より
int* const p = NULL;
の方が分かりやすい
963 :
デフォルトの名無しさん :2013/05/10(金) 03:40:42.03
ぬるぽ
template<typename T> struct tmpclass { template<typename X> X operator()(X x) {return x;} }; これの特殊化がgccだと tmpclass<double>().operator()<double>(5) で出来てしまうのだけど他でもちゃんと動くのだよね?
もちろん
>>944 実際使われてんだから意識しなきゃ不味いって話なんで、正規のUnicode規格かどうかは関係あるのかね?
Modified UTFが規格で規定された表現であるとも 取れる書き方だから噛みつかれたんだろ。 規格厨は「それは規格違反」って他人を避難 することに命を懸けるアスペだからな。
質問です。 struct B1 {}; struct B2 {}; struct D : public B1, B2 {}; D ar[2]; &(B2&)ar[0] と &ar[1] が同じアドレスに なるのですが、何故でしょうか?
要素ないからじゃね
ここでエスパーな俺が回答。 マイクロソフトに訊け。
>>970 「同じアドレスになる」をどうやって確認したんだ?
974 :
970 :2013/05/11(土) 22:40:59.89
>>973 (unsigned long long)(void*)式
をcoutに出力です。
D{B1, B2} から何も考えずにsizeof(B1)==1分だけずらしてんだろうな ま、これが問題になるような場面はねーな
オブジェクトのスラッシングの時に楽だからね
スライシングだったorz ビール飲むとやっぱり頭が鈍るな
sizeof ar[0] はいくつなんだぜ?
struct B1 struct B2 struct D のsizeofっていくつになるんですか
0より大きい これは規格で決められている
何でそんなウンコな仕様なの?
C++はCとは違い特殊な事情があって、インスタンスのアドレスを得ると そのサイズがゼロじゃ都合が悪いんだよ 具体的にどういう理由だっけ 違うインスタンスは必ず違うアドレスになるようにしたとD&Eに書いてあった
配列が困るな。 イテレーターがいきなりループ抜けそう。 やはりC++にもinterfaceを入れるべきだった。
横だけど type&へのキャストってどういう意味?
参照へのキャスト
それってなんかありがたいことがあるんか?
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です。
>>984 コンパイラの問題なのは
>>972 も指摘
してるようにその通りなのだけど、
B1サブオブジェクトとB2サブオブジェクトが
同じアドレスってありなの?そのGCCの結果
>>988 typename aaa<T>::value_type ?
>>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;
>>991 いや、全然
多重継承を使わないと理解できないありがたみだとすると、多重継承使ったことないから
わからなくて当然なのかもしれないが
構造体D2に構造体D1L、D1Rにそれぞれ継承されているBを含んでいる。 rblはD1L側、rbrははD1R側が継承した構造体Bの参照を取っている。 でも多重継承の利点て、インターフェイスを継承させる事ではないのか?
>>993 そんなことができるんか
これもまた参照とポインタとの違いなんだな
いや、ポインタでも同じ。俺的には参照の方がコード組みやすいな。 ポインタの方が機能は多いけど
>>992 多重継承だけの問題じゃない。
struct B {};
struct D : virtual B {};
D d;
D * pd = &d;
B * pb = pd;
ここでpdとpbのアドレスは違う。
代入時の型変換でアドレス変換が行われる。
(T&) は *(T*)&と意味的に同じだから
裏ではアドレス調整が行われている。
最近のC++での多重継承はメタ関数の実装継承に使われる事が多い気がする
多重継承って、サイズ非ゼロの縛りがあるから 継承の度にどんどんサイズおっきくなるよね?
>>996 マジか、初めて知った
これもstatic castの一つ?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。