C++相談室 part61at TECH
C++相談室 part61 - 暇つぶし2ch803:デフォルトの名無しさん
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