C++相談室 part61
- 1 :デフォルトの名無しさん:2008/03/09(日) 19:37:43
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
- 774 :デフォルトの名無しさん:2008/05/13(火) 13:44:30
- 外からprivateなメンバにアクセスできないのと同じ
外からprivateな基本クラスにはアクセスできない
- 775 :デフォルトの名無しさん:2008/05/13(火) 13:48:23
- >>773 外からできなくなるだけで、中からならアップキャストできるよ。
- 776 :デフォルトの名無しさん:2008/05/13(火) 17:32:36
- private継承するboost::operatorsがなんで動作するのかも良くわかんないな。
- 777 :デフォルトの名無しさん:2008/05/13(火) 17:41:24
- 分かんない事ばかりなのに使わなければならないC++って、怖くね?
- 778 :デフォルトの名無しさん:2008/05/13(火) 17:47:31
- >>776
friend関数はクラスのメンバではないから・・・かな?
class A {
private:
friend void foo() { ... } // メンバのように見えるけど実はグローバル関数なのでアクセス制御は効かない
};
int main() {
foo();
}
- 779 :デフォルトの名無しさん:2008/05/13(火) 17:48:13
- C++以外の言語も使いますが分からないことだらけです。
- 780 :デフォルトの名無しさん:2008/05/13(火) 19:36:07
- 何が分からないか判っていれば解ったも同然だ
- 781 :デフォルトの名無しさん:2008/05/13(火) 19:54:24
- friend関数、VC2005からtemplate<class T>を頭につけないと
コンパイルが通らなくなったんですね。C++0xはまだなのに
こういう仕様変更はひそかにやってるんですか?
それとも、もともと規格書にはこう決められていてやっと
Vc++2005で対応できた、ということですか?
- 782 :デフォルトの名無しさん:2008/05/13(火) 20:31:33
- >>777
わかんない部分は無理して使う必要はないし。
でも、わかった後それを使うと今までだらだら長く書いていたコードがすっかりコンパクトにまとまってショックを受けることが多々ある。
- 783 :デフォルトの名無しさん:2008/05/13(火) 20:43:20
- >>781
それは後者
でも前者みたいなひそかな変更もVC++はよくやる。
いや、きちんと文書化されているけどね。
例えばtype traits支援とかC99の%a書式とか。
- 784 :デフォルトの名無しさん:2008/05/15(木) 12:41:47
- もう C++ なんて好きでもないし使いもしない理由。
ttp://www.hyuki.com/yukiwiki/wiki.cgi?WhyINoLongerLikeOrUseCPlusPlus
悔しいけど納得した。
- 785 :デフォルトの名無しさん:2008/05/15(木) 13:24:39
- 確かにめんどくさいし手間が掛かる…
- 786 :デフォルトの名無しさん:2008/05/15(木) 14:04:26
- C++ Programming Languageを端から端まで二度読める知能があれば右辺値参照ごときにどうして瞼が落ちるのか。
- 787 :デフォルトの名無しさん:2008/05/15(木) 14:14:04
- 落ち着かない仕様
時間の掛かる修正
度重なる保守
- 788 :デフォルトの名無しさん:2008/05/15(木) 14:15:27
- C++は仕事に向かない言語とういのには同意だな
- 789 :デフォルトの名無しさん:2008/05/15(木) 14:30:05
- C++ Programming Languageを二度読むのに必要なのは知能ではなくて忍耐力だからな
- 790 :デフォルトの名無しさん:2008/05/15(木) 14:57:10
- 性能に取り憑かれているのは自分でも気づいているがどうしてもやめられない。
- 791 :デフォルトの名無しさん:2008/05/15(木) 15:08:56
- Java も使うけど、C++ の方が楽に感じる事多いな。
気を付けないと保守が大変というのはわかる。
ただ、どの言語でも保守の問題はあるし、気を付ければ
そんなに問題ないと思ってるけど。まぁ、5年後になんて
言っているかはわからんが。
- 792 :デフォルトの名無しさん:2008/05/15(木) 15:57:49
- C++の全機能を使わなければならない、という規約でもあったのだろうか?
演算子オーバロードは危険だと思ったなら、単にその機能を使わなければよい。
参照は不要でポインタがあれば十分だと思ったなら、単にその機能を使わなければよい。
添え字が範囲の中にあるかテストしてほしいと思ったなら、at()メンバ関数を使えばよい。
なぜ、C++の全機能 vs Cの比較なんだろう?
C+α(Better C) vs Cの比較をしないのはなぜだ?
要するに、マヌケだってことだ。
- 793 :デフォルトの名無しさん:2008/05/15(木) 16:00:18
- >>784のリンク先
C++に過剰に複雑なところがあるのは同意なので、
その人(翻訳者でなく)がC++嫌ですって言うこと自体に批判は特に無いけど、
ちょっとツッコミ書くてst。
>C の方を使いたくなる
別に複雑な機能を使わなくても、
・#defineマクロ(MAXなど)の代わり程度のtemplate
・fopen,fcloseみたいなのをRAIIに扱うための極薄ラッパー
などの簡単で便利なものだけ「better C+おまけ」程度に使えば良いと思う。
巧みで知識もあると言う割には、要領が悪い気がしないでもない。
>Java や Groovy に
そこでGroovyは無いと思う・・・
俺もjava好きだから良いんだけど、
もうちょっと他の言語も挙げれば良いのに・・・
- 794 :デフォルトの名無しさん:2008/05/15(木) 16:17:12
- >そこでGroovyは無いと思う・・・
ググったら実質両方Javaでワロタw
- 795 :デフォルトの名無しさん:2008/05/15(木) 16:22:57
- >>792
> C+α(Better C) vs Cの比較をしないのはなぜだ?
自分一人で遊んでいるときしか、そういう使い方がうまくいかないからでは。
- 796 :デフォルトの名無しさん:2008/05/15(木) 20:19:22
- なぜ今更そのネタを
- 797 :デフォルトの名無しさん:2008/05/15(木) 21:02:02
- >>792
> C++の全機能を使わなければならない、という規約でもあったのだろうか?
あるとしたら逆だろう。○○しか使ってはいけない、という規約が無くてカオス化する。
あるいは、そういう規約がちゃんと機能して、自分の仕事がうまくいっているとしても、
「ここまでの規約が無ければ収拾つかなくなるC++って・・・」という虚しさは感じることになる。
「C++に文句を言う奴は、C++を使い切れないマヌケだけ」
というのは、C++信者の反撃としては割とお約束だし、部分的には当たっている。
実際、「一人でちょっとしたものを作ることさえできない」人間の八つ当たりも結構見られるし。
ただ、C++の難点というのは、主に「個人の能力ではどうにもならないところ」に表れるものであって、
この話を個人の能力に全部収めて着地させようというのは、わかっててやってるなら
いかにも姑息な「問題のすり替え」ではある。
- 798 :デフォルトの名無しさん:2008/05/15(木) 21:14:38
- > 個人の能力ではどうにもならないところ
ってどこだろう
- 799 :デフォルトの名無しさん:2008/05/15(木) 21:19:29
- 他人の脳味噌は自分の脳味噌ではない、という事実とか、
そういう風にして複数の脳味噌によって構築された「すんげえ規模」とか。
- 800 :デフォルトの名無しさん:2008/05/15(木) 21:21:47
- 名前マングリングとかABIとかじゃね
- 801 :デフォルトの名無しさん:2008/05/15(木) 21:37:50
- C++最高!とまでは言わないが、ハードと離れた言語は使う気しないな
- 802 :デフォルトの名無しさん:2008/05/15(木) 21:39:21
- >>799
それはC++に限った話じゃないな
CでもJavaでもPHPでもよくある話だ
>>800
ABIが規定されていてうまく機能している言語ってあります?
ちなみに、自分はC++信者なわけではない
素直な感想と疑問
- 803 :デフォルトの名無しさん:2008/05/15(木) 22:46:45
- >>797
どの言語でも仕事で coding する時は文法的に正しければなんでも良い
なんてことは無いはずだが。規約を全く無くせば収拾つかなくなると思うが。
規約を決めるのを C++ に限ったことではない。
元の記事はむしろ binary の compatibility を問題にしてるんじゃないかな。
- 804 :デフォルトの名無しさん:2008/05/15(木) 23:05:02
- >>802-803
「有るか無いかでいったら、どの言語にだってあるぞ」
というのは確かにその通りだけど、この場合はC++の「度合いのひどさ」を問題にしているわけで、
ゼロじゃないからどの言語もみんな仲間! ってのは、話の持って行き方としてちょっと違うと思う。
- 805 :デフォルトの名無しさん:2008/05/15(木) 23:15:56
- >>804
でもJavaぐらいだと>>799の問題は似たようなものな気がするけど
だんだん複雑になってきてるし
ある程度表現力が高い言語になると普遍的な問題じゃないかな
C++だとまともに書けない人でもJavaなら書けるのだろうか
そんな人がPythonならまともに書けるのか?
- 806 :デフォルトの名無しさん:2008/05/15(木) 23:39:39
- 規模の問題はちょっと違うだろうね。
名前マングリングに関しては確かにC++のは委員会とかの人も
普通に「どうにかしたい」って思ってそうだけど、
実質、ABIがさえ合えば問題無し、って程簡単じゃないから
再コンパイルした方が良い。
UNIX、Linux系ではオプションの変更程度で再makeすることも多いし。
それに完全にバイナリで使うなら.soとか.dllで考え方が良い。
- 807 :デフォルトの名無しさん:2008/05/15(木) 23:46:07
- 例外とか this ポインタの実装手段の違いとかも問題になるんじゃね。
- 808 :デフォルトの名無しさん:2008/05/16(金) 00:27:21
- >>797 で言っている問題で、何でも使うか使わないかは、
compile し直そうが残る問題が多いけど。特に保守性考えると。
件の ABI の問題は compile し直せばいい問題じゃないの?
(だから問題になりえないと言っているわけではないが)
ちょっと違うことを問題にしていて議論が混ざってる気がする。
- 809 :デフォルトの名無しさん:2008/05/16(金) 21:20:35
- 質問があります
代入演算子をprotectedないしprivateにしたいんですが、
実装はデフォルトで生成されるものそのままでいいんです
class Hoge
{
// さまざまなメンバ変数(代入演算子があったりなかったりする)
Hage hage;
Fuga fuga;
int hensuu;
protected:
Hoge& operator=(const Hoge&);
};
ってやったらリンクエラーになるんですがどうすればいいでしょう
イチイチ中身書くのも面倒で・・・
- 810 :デフォルトの名無しさん:2008/05/16(金) 22:07:43
- イチイチ中身書くしかない
- 811 :デフォルトの名無しさん:2008/05/16(金) 23:25:47
- C++0x では default キーワードでデフォルト実装を作ってくれるそうです。
- 812 :デフォルトの名無しさん:2008/05/16(金) 23:26:25
- handle-bodyイディオムで書いて、handleの代入演算子をprotectedなりにすればどう?
- 813 :デフォルトの名無しさん:2008/05/17(土) 01:09:30
- バイナリとしての0x00をchar配列に格納したいんですが、終端文字として認識されてしまいます。
こういう時ってどうすればいいのでしょうか??
ご教示いただけると幸いです。
- 814 :デフォルトの名無しさん:2008/05/17(土) 01:16:56
- もしかしてstrcpyとか使ってるのか?
- 815 :デフォルトの名無しさん:2008/05/17(土) 01:21:39
- レスどもです。
いえ、const char [] 型に0x00を含む文字列を格納して、cout とかで出力しようとすると0x00以降が出力されないんです。
- 816 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/05/17(土) 01:28:55
- いや作れるよ
char配列の内容がNTCSであることを仮定している関数・APIに
NTCSでないchar配列を突っ込んでいることが間違いなだけ
- 823 :デフォルトの名無しさん:2008/05/17(土) 01:47:42
- なるほど!
0x00を入れると格納はされているけど出力できていなかったということですね。
長さを指定したら出力できました。
レス下さった方々ありがとうございましたm(_ _)m
201 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【高速?】2ちゃんねるターボ 15壷目 [ソフトウェア]
◆こんなソフトウェアつくってください〜Part11〜◆ [ソフトウェア]
隔月刊コミックヴァルキリー12 [漫画]
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.5.0 2008/04/02
FOX ★ DSO(Dynamic Shared Object)