C++相談室 part61 ..
[2ch|▼Menu]
784:デフォルトの名無しさん
08/05/15 12:41:47
もう C++ なんて好きでもないし使いもしない理由。
URLリンク(www.hyuki.com)

悔しいけど納得した。


785:デフォルトの名無しさん
08/05/15 13:24:39
確かにめんどくさいし手間が掛かる…

786:デフォルトの名無しさん
08/05/15 14:04:26
C++ Programming Languageを端から端まで二度読める知能があれば右辺値参照ごときにどうして瞼が落ちるのか。

787:デフォルトの名無しさん
08/05/15 14:14:04
落ち着かない仕様
時間の掛かる修正
度重なる保守

788:デフォルトの名無しさん
08/05/15 14:15:27
C++は仕事に向かない言語とういのには同意だな

789:デフォルトの名無しさん
08/05/15 14:30:05
C++ Programming Languageを二度読むのに必要なのは知能ではなくて忍耐力だからな

790:デフォルトの名無しさん
08/05/15 14:57:10
性能に取り憑かれているのは自分でも気づいているがどうしてもやめられない。

791:デフォルトの名無しさん
08/05/15 15:08:56
Java も使うけど、C++ の方が楽に感じる事多いな。
気を付けないと保守が大変というのはわかる。
ただ、どの言語でも保守の問題はあるし、気を付ければ
そんなに問題ないと思ってるけど。まぁ、5年後になんて
言っているかはわからんが。


792:デフォルトの名無しさん
08/05/15 15:57:49
C++の全機能を使わなければならない、という規約でもあったのだろうか?
演算子オーバロードは危険だと思ったなら、単にその機能を使わなければよい。
参照は不要でポインタがあれば十分だと思ったなら、単にその機能を使わなければよい。
添え字が範囲の中にあるかテストしてほしいと思ったなら、at()メンバ関数を使えばよい。

なぜ、C++の全機能 vs Cの比較なんだろう?
C+α(Better C) vs Cの比較をしないのはなぜだ?

要するに、マヌケだってことだ。

793:デフォルトの名無しさん
08/05/15 16:00:18
>>784のリンク先

C++に過剰に複雑なところがあるのは同意なので、
その人(翻訳者でなく)がC++嫌ですって言うこと自体に批判は特に無いけど、
ちょっとツッコミ書くてst。

>C の方を使いたくなる
別に複雑な機能を使わなくても、
 ・#defineマクロ(MAXなど)の代わり程度のtemplate
 ・fopen,fcloseみたいなのをRAIIに扱うための極薄ラッパー
などの簡単で便利なものだけ「better C+おまけ」程度に使えば良いと思う。
巧みで知識もあると言う割には、要領が悪い気がしないでもない。

>Java や Groovy に
そこでGroovyは無いと思う・・・

俺もjava好きだから良いんだけど、
もうちょっと他の言語も挙げれば良いのに・・・

794:デフォルトの名無しさん
08/05/15 16:17:12
>そこでGroovyは無いと思う・・・
ググったら実質両方Javaでワロタw

795:デフォルトの名無しさん
08/05/15 16:22:57
>>792
> C+α(Better C) vs Cの比較をしないのはなぜだ?
自分一人で遊んでいるときしか、そういう使い方がうまくいかないからでは。

796:デフォルトの名無しさん
08/05/15 20:19:22
なぜ今更そのネタを

797:デフォルトの名無しさん
08/05/15 21:02:02
>>792
> C++の全機能を使わなければならない、という規約でもあったのだろうか?
あるとしたら逆だろう。○○しか使ってはいけない、という規約が無くてカオス化する。
あるいは、そういう規約がちゃんと機能して、自分の仕事がうまくいっているとしても、
「ここまでの規約が無ければ収拾つかなくなるC++って・・・」という虚しさは感じることになる。

「C++に文句を言う奴は、C++を使い切れないマヌケだけ」
というのは、C++信者の反撃としては割とお約束だし、部分的には当たっている。
実際、「一人でちょっとしたものを作ることさえできない」人間の八つ当たりも結構見られるし。
ただ、C++の難点というのは、主に「個人の能力ではどうにもならないところ」に表れるものであって、
この話を個人の能力に全部収めて着地させようというのは、わかっててやってるなら
いかにも姑息な「問題のすり替え」ではある。

798:デフォルトの名無しさん
08/05/15 21:14:38
> 個人の能力ではどうにもならないところ
ってどこだろう

799:デフォルトの名無しさん
08/05/15 21:19:29
他人の脳味噌は自分の脳味噌ではない、という事実とか、
そういう風にして複数の脳味噌によって構築された「すんげえ規模」とか。

800:デフォルトの名無しさん
08/05/15 21:21:47
名前マングリングとかABIとかじゃね

801:デフォルトの名無しさん
08/05/15 21:37:50
C++最高!とまでは言わないが、ハードと離れた言語は使う気しないな

802:デフォルトの名無しさん
08/05/15 21:39:21
>>799
それはC++に限った話じゃないな
CでもJavaでもPHPでもよくある話だ

>>800
ABIが規定されていてうまく機能している言語ってあります?

ちなみに、自分はC++信者なわけではない
素直な感想と疑問

803:デフォルトの名無しさん
08/05/15 22:46:45
>>797
どの言語でも仕事で coding する時は文法的に正しければなんでも良い
なんてことは無いはずだが。規約を全く無くせば収拾つかなくなると思うが。
規約を決めるのを C++ に限ったことではない。

元の記事はむしろ binary の compatibility を問題にしてるんじゃないかな。

804:デフォルトの名無しさん
08/05/15 23:05:02
>>802-803
「有るか無いかでいったら、どの言語にだってあるぞ」
というのは確かにその通りだけど、この場合はC++の「度合いのひどさ」を問題にしているわけで、
ゼロじゃないからどの言語もみんな仲間! ってのは、話の持って行き方としてちょっと違うと思う。

805:デフォルトの名無しさん
08/05/15 23:15:56
>>804
でもJavaぐらいだと>>799の問題は似たようなものな気がするけど
だんだん複雑になってきてるし
ある程度表現力が高い言語になると普遍的な問題じゃないかな

C++だとまともに書けない人でもJavaなら書けるのだろうか
そんな人がPythonならまともに書けるのか?

806:デフォルトの名無しさん
08/05/15 23:39:39
規模の問題はちょっと違うだろうね。

名前マングリングに関しては確かにC++のは委員会とかの人も
普通に「どうにかしたい」って思ってそうだけど、
実質、ABIがさえ合えば問題無し、って程簡単じゃないから
再コンパイルした方が良い。

UNIX、Linux系ではオプションの変更程度で再makeすることも多いし。
それに完全にバイナリで使うなら.soとか.dllで考え方が良い。

807:デフォルトの名無しさん
08/05/15 23:46:07
例外とか this ポインタの実装手段の違いとかも問題になるんじゃね。

808:デフォルトの名無しさん
08/05/16 00:27:21
>>797 で言っている問題で、何でも使うか使わないかは、
compile し直そうが残る問題が多いけど。特に保守性考えると。

件の ABI の問題は compile し直せばいい問題じゃないの?
(だから問題になりえないと言っているわけではないが)

ちょっと違うことを問題にしていて議論が混ざってる気がする。



809:デフォルトの名無しさん
08/05/16 21:20:35
質問があります

代入演算子をprotectedないしprivateにしたいんですが、
実装はデフォルトで生成されるものそのままでいいんです

class Hoge
{
 // さまざまなメンバ変数(代入演算子があったりなかったりする)
 Hage hage;
 Fuga fuga;
 int hensuu;
protected:
 Hoge& operator=(const Hoge&);
};

ってやったらリンクエラーになるんですがどうすればいいでしょう
イチイチ中身書くのも面倒で・・・

810:デフォルトの名無しさん
08/05/16 22:07:43
イチイチ中身書くしかない

811:デフォルトの名無しさん
08/05/16 23:25:47
C++0x では default キーワードでデフォルト実装を作ってくれるそうです。

812:デフォルトの名無しさん
08/05/16 23:26:25
handle-bodyイディオムで書いて、handleの代入演算子をprotectedなりにすればどう?

813:デフォルトの名無しさん
08/05/17 01:09:30
バイナリとしての0x00をchar配列に格納したいんですが、終端文字として認識されてしまいます。
こういう時ってどうすればいいのでしょうか??
ご教示いただけると幸いです。


814:デフォルトの名無しさん
08/05/17 01:16:56
もしかしてstrcpyとか使ってるのか?

815:デフォルトの名無しさん
08/05/17 01:21:39
レスどもです。
いえ、const char [] 型に0x00を含む文字列を格納して、cout とかで出力しようとすると0x00以降が出力されないんです。

816:デフォルトの名無しさん
08/05/17 01:22:37
考えるだけでも恐ろしい

817:デフォルトの名無しさん
08/05/17 01:22:59
それは当たり前 仕様 0は文末というのが原則です。

818:デフォルトの名無しさん
08/05/17 01:24:21
出力させたいんだったら、string使えば出来るはず。 こっちはサイズまではちゃんと出力したと思う。
たとえばstr.resize(10000,'\0'); cout<<str;とする。

819:デフォルトの名無しさん
08/05/17 01:24:53
とすると、バイナリとしての0x00を途中に含むchar文字列を作りたいんですが、無理なんでしょうか??


820:デフォルトの名無しさん
08/05/17 01:25:58
0を含むchar配列はできるよ でもstrlenとかは間違える 自分で長さを管理すればよい。

821:デフォルトの名無しさん
08/05/17 01:27:56
たとええばchar配列で0を含まないならstrcpy、strcmpなどを使い、
0を含むなら長さを自分で指定するmemcpyやmemcmpを使う。

822:デフォルトの名無しさん
08/05/17 01:28:55
いや作れるよ
char配列の内容がNTCSであることを仮定している関数・APIに
NTCSでないchar配列を突っ込んでいることが間違いなだけ

823:デフォルトの名無しさん
08/05/17 01:47:42
なるほど!
0x00を入れると格納はされているけど出力できていなかったということですね。
長さを指定したら出力できました。
レス下さった方々ありがとうございましたm(_ _)m


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4605日前に更新/200 KB
担当:undef