C++は難しすぎ 難易度:2
■ このスレッドは過去ログ倉庫に格納されています
0001前々スレ985
NGNGデザパタも知らずにC++使いの質を下げるC厨には げんあり
前スレ達
難易度:1 http://pc2.2ch.net/tech/kako/1058/10586/1058675178.html
難易度:2 1http://pc2.2ch.net/test/read.cgi/tech/1063323615/
0002デフォルトの名無しさん
NGNG天才だから。
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGそれが、ついこの間まで1個88円で売っていた。
これはつまり、その気になれば1個88円で売れたモノを230円で売ってた訳だ。
その昔に1個230円で食ってたオレに言わせれば全く腹の立つ話だ。
0006デフォルトの名無しさん
NGNGMZ-5500 の拡張メモリボード (256KByte) を
\72,000 で買った俺にしては(ry
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGメモリは間違いなくそうだが、チーズバーガーのコストはあまり変わってなさそう。
0009デフォルトの名無しさん
NGNG品種改良による大量生産、輸送コストの削減。
加工食品の調達コスト削減、等々。
0010デフォルトの名無しさん
NGNG中国産農産物の輸入拡大。多分これが一番大きい。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG( ´∀`)
0015デフォルトの名無しさん
NGNG10年前の牛肉100% > 牛から食える肉を切り出したものが100%
現在の牛肉100% > 牛は100%肉として使う
0016デフォルトの名無しさん
NGNGつかそれ以前に
糞 ス レ 勃 て て ん じ ゃ ね え よ 脳 挫 傷 !
0017デフォルトの名無しさん
NGNGC++は手続き指向の言語であるCとの互換性を保つことを強いられたので、オブジェクト指向の本質とは
あまり関係のない部分が多く言語仕様に入り込み、習得のし難い言語になってしまっています。
(このように手続き指向をオブジェクト指向に拡張し、両者の概念の混在する言語をハイブリッド系OO言語
といいます)。またC++のようなハイブリッド系言語は、手続き指向でのプログラム作成が全く問題なく行え
てしまうので、「C++を使用しているが、オブジェクト指向になっていない(ただのCプログラミングをしている)」
ということが起こってしまいます。
更に、なんとかC++を使いオブジェクト指向の考えでプログラミングできるようになったとしても、言語の性質上、
メモリ管理の問題が常につきまとうことになります。もともとオブジェクト指向は、システムにまつわる問題を抽
象的に捉えられるところに利点があり、メモリ管理といった低レベルの部分はなるべく気にせずに、アプリケー
ションドメインといった上位の概念に注目したいはずです。C++ではメモリ管理をみずから行わなければならな
いため、アプリケーションに本質的な処理と、単なるメモリ管理の処理が入り交じり、
0018デフォルトの名無しさん
NGNGりにくくする側面があります。また人間の手によるメモリ管理は、必ずといっていいほどメモリリーク現象を引き
起こします。このために、「あまり多くのオブジェクトを用意しないようにしよう」という考えが働くようになり、設計
上は分離されていたはずのクラスが実装時に安易に合成され、奇麗なオブジェクト指向設計をくずしてしまうこ
ともあります。
一方Javaはどうでしょうか。Javaはかなり奇麗にオブジェクト指向の考えを実現しているといえますが、
数値や配列などの「基本データ型」はオブジェクトではありません。そのために「全てを統一的にオブジェ
クトとして扱えるはず」というオブジェクト指向の原則に合致せず、やはり不自然なコードを書かねばなら
ない場面がでてきます。
例としてJavaでは、「何でも入れてしまえる順番つきの入れ物」を表すのに、Vectorというクラスが用意
されています。このVectorに物をいれるときに、基本データ型が混ざっていると以下のようなコードを強
いられます。
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG出たなデザインパターン。プロジェクトの中で3人知ってる人間がいたら良い方だよ。
残りの雑魚は家に帰っても酒呑むかTV見てるかくらいの奴だし。
勤勉な奴は一握りだぞ?20代でそういうやつは極小。30代で技術しか取り柄のない奴が
逃げ道としてデザインパターンなんかを習得してる。悪いってわけじゃないけど、
30代が技術にすがるって、見ていて悲しくなるよね。
0021デフォルトの名無しさん
NGNGそ こ で
C#
だ!
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGいまどき Vector型 は使わないね。
なんかのコピペかな。
それに必ずしも「完全に」オブジェクト化してれば
いいもんっていうものでもないよ。
原始型はラップすればいいだけだし。
Integer int1 = new Integer(123);
Integer int2 = new Integer(456);
int1.add(int2.getValue());
なんてやるより
int i1 = 123;
int i2 = 456;
i1 += i2;
ってやった方が楽だし分かり易いでしょ?
0024デフォルトの名無しさん
NGNGだから、30歳過ぎて、社会の政治的な要因に太刀打ちできるような
立場になってからもデザインパターンみたいな一技術で重宝されるような
人物に対して「逃げ道だよな」って言ってるの。20代の奴がやりたくてもできないような
ところで自分をアピールする術を持ってないのかって。
中堅者のやることっていったら、20代の奴が仕事をしやすいように、いろいろと根回しすることだろ?
年齢重ねても、やることが20代の延長だったら会社に居る意味ねーよ。
スパゲティコードだとか、その辺は中堅社員が口出すことじゃねーって。
むしろ、20代の奴が気付いて、中堅社員に意見をUPして、それから中堅社員が根回しするのが理想。
要は、いい歳こいて低レベルな話してんじゃねーよって。もっと抽象的になれってことだ。
002623
NGNG俺か?w
まだ27なんだけどな。
つーかデザインパターン云々いってる
話はどこからきたわけ??
0027デフォルトの名無しさん
NGNG前スレのコピペだよ。
単なるあげ荒氏だから反応するな。
0028デフォルトの名無しさん
NGNGプップップ
残念ながら>>17-18のコメントはSmalltalk解説サイトの前文なのだ(藁
VB厨のようなM$の奴隷の雑魚どもが使う言語C#ごときに出る幕は無い(藁
0029デフォルトの名無しさん
NGNG>また人間の手によるメモリ管理は、必ずといっていいほどメモリリーク現象を
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>引き起こします。
書いた奴が、自分の間抜けっぷりを隠す為に
一般化しようとしているとしか思えない。
0030デフォルトの名無しさん
NGNG新言語をC++と比較するときの常套手段だよね。
Cならいざ知らず、C++を然るべき使い方すれば
メモリリークなんて滅多に起こさないと思うが。
0031デフォルトの名無しさん
NGNGメモリリークするようなコードを書いちゃう人は、
どんなに管理手法を凝らしてもリークさせちゃう。
たとえばGCなんてその注意をほんのちょっと減らすだけでしかない。
にもかかわらず大げさに取り上げたがるのは、
表面的なところにとらわれてるか、初心者かのどっちかだろうねえ。
0032デフォルトの名無しさん
NGNG> >>18
> >また人間の手によるメモリ管理は、必ずといっていいほどメモリリーク現象を
>  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
> >引き起こします。
>
> 書いた奴が、自分の間抜けっぷりを隠す為に
> 一般化しようとしているとしか思えない。
ではお前は間抜けなことをせずに間違いを一切犯さずに
超超!超!超!超!超!!大規模アプリ開発で
ポインタ演算をべらぼーに徹底的に使い切ってコーディングできるか?
お前には無理だ。それは、お前が人間だからだ。
0033デフォルトの名無しさん
NGNGそれがしかるべき使い方をする香具師がほとんどいないんだからねえ。
速度を強調するにはどうしても避けられない問題につきあたるわけよ
0034デフォルトの名無しさん
NGNG> ポインタ演算をべらぼーに徹底的に使い切ってコーディングできるか?
できるよ。
規模が大きかろうが小さかろうが、
しかるべきサイズのモジュールやコンポーネントに分割して開発するだろ。
この「しかるべきサイズ」の条件として、「ポインタが安全に使える」
というのがあるだけの話。さらに言うなら、条件の一つでしかないし、
それほど重要じゃない。
0035いちゆ
NGNGあれはどぅだ?
0036デフォルトの名無しさん
NGNGしてないか?Cのポインタは怖い。キャストとか特に。
C++だとauto_ptrやクラスでラップできるしね。
で、普段C++な俺がCでWinドライバ作成してるわけだが、
緊張感が違うな(w
0037Kusakabe Youchien
NGNGこわがりすぎー
0038デフォルトの名無しさん
NGNGいや、分かってるがワロタ
0039デフォルトの名無しさん
NGNG使えるだけ使いまくって足りなくなったらいらない
メモリを開放してるんだから。
まぁ、要するにJavaはメモリ食い杉。
0040sage
NGNGリークを完全になくすには例外安全を貫く必要がある。
過剰な例外安全の保証を行うと、性能面でのC++のメリットがなくなる。
そのあたりのトレードオフの存在が、C++のいいところでもあり悪いところでもある。
0041デフォルトの名無しさん
NGNG緊張感が違えば十分だが
Cのソースのメンテの場合などは
あきらめでいっぱいになる事もある。
0042Java最強
NGNG0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGこの実行ファイルの引数がどうなっているか調べる方法はありますでしょうか?
もしくはそれがわかるソフトでもかまいません。
よろしくお願いします。
0045デフォルトの名無しさん
NGNGポインタ渡しを使った場合と効果は同じだけど、
引数で渡すデータを変更しない場合は、リファレンスを使い、
値を変更する場合はポインタを使うようにしているのだが、
それ以外で適切な使い方を知っている猛者はご教授願いたい。
(コピーコンストラクタやoperator関数の引数ってのはなしで。)
0046デフォルトの名無しさん
NGNG中学生。
0047デフォルトの名無しさん
NGNGたとえばあるオブジェクトを指すクラスを作るときで、
そのオブジェクトをコンストラクタ以外では指定できないようにしたいとき、
参照型のメンバ変数とすることがとても有効な場合がある。
0048sage
NGNGtemplateをぽちぽちいじるようになれば、リファレンスは避けて通れなくなる。
いちいちポインタを要求するtemplateってのは使いづらいからね。
0049デフォルトの名無しさん
NGNGMore Effective C++でも嫁
0050デフォルトの名無しさん
NGNG>引数で渡すデータを変更しない場合は、リファレンスを使い、
変更するかしないかはconstの有無で判断するもんだと思う。
ポインタでもリファレンスでも。
0051デフォルトの名無しさん
NGNGTypeTraitsで適切な引数型を自動的に検索できるのは
参照型のシンタックスがコピー渡しと同じだからだろうが。
0052デフォルトの名無しさん
NGNG頭が悪いので理解できない。
初心者用の本だとスタッククラスに対して、
int型やchar型をテンプレート引数にとる簡単な例ばかりで、
応用例は、ほとんど載ってない。
標準ライブラリとテンプレートのからみを説明している本は、
中級者以上の本ばかりなので、難しくて理解できない。
(特にsetやlistテンプレートの実装部分とかの説明が理解不能)
この辺のからみについて、何かわかりやすい本or
最適な勉強法はあるのでしょうか。
0053デフォルトの名無しさん
NGNGttp://www.amazon.co.jp/exec/obidos/ASIN/0201734842/
試しにこれ読んでみれ。
0054デフォルトの名無しさん
NGNGlokiやboostのコードを読み漁りながらだったんだけど、
type traitsやfunctionalなんかが中心だったかなあ。
カナーリ勉強になったよ。
0055デフォルトの名無しさん
NGNGJavaのStringやVectorと対比させてSTLを教えてほしい。
newとdeleteの管理をちゃんとやるための設計のしかたとか。
0056デフォルトの名無しさん
NGNGC++がわからなくなる。
テンプレート(機能)は鬼門なので他が十分に理解できるまでとっておく。
STL(ライブラリ)はもっと鬼門なのでテンプレートが十分に理解できるまでとっておく。
あとは車輪の再発明はC++の学習には欠かせない要素。
自分で作ってはじめて理解できる。それがC++。
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGそんなにこわがることないのにー ;-p
0059デフォルトの名無しさん
NGNGSTL(あるいはその再発明)を使わなけりゃ例外安全な
deleteの管理なんて出来ないだろうが。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGauto_ptrはSTLじゃありませんが何か?
0063デフォルトの名無しさん
NGNGなぜならauto_ptrはSTLだからね。
0064デフォルトの名無しさん
NGNG最初は苦しむが慣れたら明確かつ究極的なインタフェースとして使えるよ。
サーバ系で一リクエストに何千回も処理する箇所があればオブジェクト指向系
の糞重い&メモリ食いな処理は命取りになる。
そういう時にポインタでデータをきちきちに詰める。
1バイト単位できっちり。
JAVAやC#みたいなインタプリタと違って最適化やVMも必要ないから
十分なパフォーマンスが得れる。
だが熟成には何年何ヶ月と要するよね。
適材適所があるわけだから一概にC++はダメって言い切るのはどうなのかな?
0065デフォルトの名無しさん
NGNGJava も最近 JIT 方式のものがあったりするし。
揚げ足取りスマソ。
0066デフォルトの名無しさん
NGNG難しい..
0067デフォルトの名無しさん
NGNG最低限、STL のコンテナが使えれば OK だと思う。
それが出来たら Modern C++ Design でも読みつつ Loki の内容理解とか。
0068デフォルトの名無しさん
NGNG了解。頑張ります。
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG修行が足りん 出直してこい
0071デフォルトの名無しさん
NGNGC#とかJAVAって386コード吐けるんですか?
0072デフォルトの名無しさん
NGNGJIT コンパイルで検索しる。
0073デフォルトの名無しさん
NGNGテンプレートは
template< typename T >くらいなら分かるけど、
template< int n >とか見てボカーンでした。
あと、
template<class T> class shared_ptr
{
(略)
template<class Y>
explicit shared_ptr(Y * p): px(p), pn(p, checked_deleter<Y>()) // Y must be complete
{
detail::sp_enable_shared_from_this(p, p, pn);
}
も全然理解できません。
template<class Y>って・・・・
shared_ptrってTのポインタを抱えるクラスだと思うけど
どうしてYが出てくるのやら・・・
いい解説ページか本はないでしょうか。
0074デフォルトの名無しさん
NGNGtemplate<int m1, int l1, int t1, int m2, int l2, int t2>
Physical<m1+m2, l1+l2, t1+t2> operator*(Physical<m1,l1,t1> lhs
Physical<m2,l2,t2> rhs )
{
return Physical<m1+m2, l1+l2, t1+t2>::unit*lhs.value()*rhs.value();
}
がいったいなんのことやら、と。
0075デフォルトの名無しさん
NGNGModern C++ design しかない!
>>74
そのテンプレートはModern本を読み進めて行かなければ
ほぼ理解不能だと思われる。
loki風のテンプレートの用法に慣れちゃえば
極めて普段どおりのやり方になるので、まずはModernの読破を。
0076デフォルトの名無しさん
NGNGshared_ptr の コンストラクタにある、template< class Y > は、
shared_ptr< void* >( new Object() ); とかやっても
きちんと Object のデストラクタを呼び出すための仕掛け。
大雑把に書くと以下のようなコード。
struct deleter_base
{
virtual void destroy() = 0;
virtual ~deleter_base(){}
};
template< class T > struct deleter : public deleter_base
{
deleter( T * p ) : p_(p)
void destroy() { checked_delete( p_ ); }
T * p_;
};
struct shared_count
{
template< typename Y >
shared_count( Y * p ) : pd_( new deleter<Y>( p ) ) ... { ... }
// カウンタが 0 を示したときに pd_->destroy を呼ぶような処理
// これで、Y は正しく delete される。
deleter_base * pd_;
};
みたいなの。
0077デフォルトの名無しさん
NGNG覚える事をお勧めする。
0078デフォルトの名無しさん
NGNGTypeListを処理するのに再帰を使用するとかが
関数型言語っぽいっていう理解はOK?
その他、あれば解説よろしく
0079デフォルトの名無しさん
NGNGアダプタとか関数オブジェクト廻りの技術が関数型っぽい。
あと演算子のオーバーロードも関連も型クラスとの関連が。
後、boostとかだとそのままずばりlambdaがある。
0080デフォルトの名無しさん
NGNGC++のtemplateとかoperatorって>>73,76みたいな
「きちんと面倒見るためにはそこまでしなきゃ(考えなきゃ)いけないのかよ」
ていうのが実務上嫌いなんだが、反面そこが趣味的には面白かったりする。
やっぱり簡単な使い方以外のC++はヲタク用言語という感じがぬぐえない。
で、ちょっと質問。
ランダムアクセス可能なiteratorで出力を加工することは可能かどうか。
template< class T > my_iterator {
private: T * current;
public: T & operator*(){ return *current; }
};
関係の無いところを端折ると上のように書いているんだが、例えば
public: T & operator*(){ return 1 + *current; }
は戻り値がT&だから出来ない。かといって戻り値をTにすると代入が出来ない気がする。
0081デフォルトの名無しさん
NGNGすぐ考え付くのは、
template <class T> my_iterator {
private:
T * currrent;
struct T_ref {
T_ref(T &r) : ref(r){}
operator T() {return ref + 1;}
template <typename U>
T_ref &operator=(const U &u) {ref = u; return *this;}
T &ref;
};
public:
T &operator*() {return T_ref(*current);}
};
色々問題がありそうだが。
0082デフォルトの名無しさん
NGNGoperator T()なんて使い方が出来るのか。サンクス。
ただ加工に使う「+ 1」の値がmy_iteratorに入ってると
T_refのメンバにmy_iteratorへの参照も入れなくちゃいけなくて複雑になりそうだな。
そもそも加工をoperatorに頼っちゃいけないのだろうか。
0083デフォルトの名無しさん
NGNG「参照じゃないと書き換えられない」みたいな問題は
More Effective C++(だっけ)の二重配列クラスの実装なんか
まさしく参考になると思う。
0084hiraoka
NGNG補足すると、継承したクラスのポインタに対応するため。
>>80
boost::transform_iteratorがおすすめ。
自分で書きたければ、
T& operator*()と
T operator*() constを定義する方法もあると思う。
0085hiraoka
NGNG補足すると、継承したクラスのポインタに対応するため。
>>80
boost::transform_iteratorがおすすめ。
自分で書きたければ、
T& operator*()と
T operator*() constを定義する方法もあると思う。
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGCなのかな?C++なのかな?
Cだと大変そうですね。
0089デフォルトの名無しさん
NGNG最初のCはアセンブラで書いたそうだ。
最初のアセンブラは機械語で書かれた。バイトコードに直すのは人力でやった。
最近の商用のは知らんが、ほとんどCで書かれているんじゃないか?
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG続きはこちらでどうぞ。
0096自称C++厨をクビにせよう運動
NGNGいまこそ、プログラマ革命を起こすときだ!
(亜ぼーんする愚か者には核ミサイル無量大数本分の死を!)
〜 自称C++厨の化けの皮をはがせ!運動展開中! 〜
(本当は自称C++厨なんてたいしたことがない、上辺だけなのだ! 真実を見よ!)
大半のC++厨はインチキ詐欺師の卑怯者!
オブジェクト指向も知らなければデザインパターンも知らない悪い奴である。
しかも悪名高いウォータフォール信者と来た! 許せん! 今こそ正義の一撃を!
大半のC++厨は汚いコードを書いてチームをわざと混乱させメンテナンスの手間を増大させる悪魔なのだ!
大半のC++厨は自己保守的で官僚的で革新性が無く
自分のスキルの程度を誤魔化すためにわざとソースコードを読みにくくしているのだ!
(こいつらはわざと読みにくくすれば他人が解読するのにに手間がかかるので
凄いと思いこまれると勘違いしている馬鹿どもなのだ)
こんな卑怯者が許されるか!
蓋を開けてみればただのC言語しかできないとんでもない低脳である。
こんな悪魔のような給料泥棒なやつが金をもらっていることは絶対に許されるべきではない!
即刻減給するかクビにしてやるべきである!
このような卑怯なC++厨の行為は宣戦布告と見なさなければならない行為であり
大義名分を持って即刻解雇すべきである!
自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ!
自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ!
自称C++厨の化けの皮をはがせ! 自称C++厨の化けの皮をはがせ!
正義は勝つ!悪の枢軸・自称C++プログラマをこの世から抹殺せよ!
0097デフォルトの名無しさん
NGNG暴れるのはマ板だけにしとけ知的障害者。
0098デフォルトの名無しさん
NGNGただのC言語すらできないヒトは どうすればいいですか?
0099デフォルトの名無しさん
NGNGそれは俺様のことか?
0100デフォルトの名無しさん
NGNG(゚Д゚)
>>99
そうだ
0101デフォルトの名無しさん
NGNGおまえもHaskelとかScheme勉強しろよ。
■ このスレッドは過去ログ倉庫に格納されています