[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 07/16 11:48 / Filesize : 200 KB / Number-of Response : 824
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part61



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

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

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

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

793 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:00:18 ]
>>784のリンク先

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

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

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

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

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

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

796 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 20:19:22 ]
なぜ今更そのネタを

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

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

798 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:14:38 ]
> 個人の能力ではどうにもならないところ
ってどこだろう

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

800 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:21:47 ]
名前マングリングとかABIとかじゃね



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

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

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

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

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

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

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

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

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

806 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:39:39 ]
規模の問題はちょっと違うだろうね。

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

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

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

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

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

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



809 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:20:35 ]
質問があります

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

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

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

810 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 22:07:43 ]
イチイチ中身書くしかない



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

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

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


814 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:16:56 ]
もしかしてstrcpyとか使ってるのか?

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

816 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:22:37 ]
考えるだけでも恐ろしい

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

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

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


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



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

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

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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef