C++相談室 part10

このエントリーをはてなブックマークに追加
規格書には、「_ で始まる名前はグローバルな名前空間 (と ::std) で
使うために予約されている」 とある。
あと、「__ を含む名前、または _[A-Z] で始まる名前は、任意の用途で
使うために予約されている」とも書いてある。
>>951それはC++で予約されてる名前だろ
_から始まる名前(2つ、3つ連続している物も含む)はC言語の頃から予約されてた
んで、C++になって明示的に_2つが予約されて、C言語用のキーワードと差別化が
計られた。

_3つ以上が予約されているのは現在も変わらず。
WyvernでMP3聞きながらコンパイルしてる漏れは逝ってヨシですか?
>>954
漏れも昔よくやってた。Pentium/120MHzのノートでな(w
956teset:02/09/17 03:41
double d;
__asm {
 movq d, mm0
emms
}
cout<<d<<endl;
957デフォルトの名無しさん:02/09/17 23:22
VBのVariant型変数と同じように扱えるC++のクラスってどっかに落ちてないかな。
Win32SDKのVALIANT使え。
>>957
boost::any とか。c++なので当たり前だがキャストが
色々要ってVariantよりは面倒だけど。
960デフォルトの名無しさん:02/09/17 23:55
CからC++への差分だけを学習させてくれ
せめてクラスは全部objectだったら良かったのにね。
962デフォルトの名無しさん:02/09/18 00:20
conservation
すべての親がvoidオブジェクトと考えるのはどうだ。
>>963
でvoidオブジェクトはどのようにして扱う?
>>960
柏原正三「標準C++の基礎知識」(ASCII)
っつー本で俺は学んだが。ちょうどC++を学びたいCプログラマ向け。
>>963
ということにしたいのですね :-)

…はともかく、void じゃなくて void* だよな。
全てはストラウストラープ氏の碁石のままん
(´д`)ママン・・・
いまさら文法の不備を指摘したところでもう手遅れ。
>>966
publish()メソッドで本を出版します
http://pc3.2ch.net/test/read.cgi/tech/1028553308/
でややすれ違いを指摘されたので、、こちらで。

>374 名前:デフォルトの名無しさん sage 投稿日:2002/09/18(水) 03:03
>オブジェクトを直接宣言する場合と、
> CTest oObj(Hoge);
>一旦ポインタの形で宣言しnewする場合は、
> CTest* pObj;
> pObj = new CTest(Hoge);
>どのように使い分ければいいのでしょうか?
>
>375 名前:デフォルトの名無しさん sage 投稿日:2002/09/18(水) 03:10
>スコープを外れても残したい時はnew。
>きっとここよりC++スレ向きの質問。

staticのようなイメージで捕らえればよいでしょうか?
Cで、autoな配列(int hoge[10]を使うべきか、
malooc(int *p=malloc(10*sizeof(int));)を使うべきかは
割と簡単に分かるとおもう。ぶっちゃけると、前者が
CTest oObj(Hoge)で、後者がnew CTest(Hoge)。
>972
おおよそのイメージがつかめました。
これからMDIのソースを見て勉強します。
どうも有り難う。
>>973
あれでわかるなんてすごいな。

> Cで、autoな配列(int hoge[10]を使うべきか、
> malooc(int *p=malloc(10*sizeof(int));)を使うべきかは
> 割と簡単に分かるとおもう。ぶっちゃけると、前者が
割と簡単にわかるというけど、これ難しいと思うんだけど。
>974
スタックに置かれるか、ヒープに置かれるか、
その辺の違いだと判断しました。
976972:02/09/18 04:51
そーかー、漏れはCでポインタバリバリのあとにC++に逝ったからなぁ。
今では危ない仮定なのかな?
977デフォルトの名無しさん:02/09/18 10:11
コンパイラ実装に関する質問です。
テンプレート関数なキャスト演算子を定義したテンプレートクラスの実体を使ったとき、
VC6だとコンパイルは通るのですが、実行時にプログラム自身が落ちてしまいます。
BCC だとちゃんと対応する型に変換できるのですが、
これは VC が馬鹿なのか、BCC が融通を利かせすぎなのか、私の書き方が間違っているのか
どれなのかわかりません。この動作は標準では許容されるのでしょうか?

template<typename T>
class TemplateClassX{
 private: T val_;
 
 public: template <class U>operator U(){
  std::cout << typeid(U).name();
  return val_;
 }
};

void main(){
 TemplateClassX<int> i = 10; // ここはそういうコンストラクタがあると思ってください。
 long l = i; // vc6 だとプログラムが落ちます、bcc ではちゃんとキャスト演算子が展開されるようです。
}
>>977
特におかしい所があるとは思えん。
コンストラクタが間違っているのか、あるいは
VCのtypeid(long)が壊れているか、だろうな。
979!963:02/09/18 12:53
>>966
Hoge *が指すのはHogeかそのサブクラスである。
ならばvoid *が差すのはvoidかそのサブクラスであるとするのが良い。
という事でないかと。
>>977
> std::cout << typeid(U).name();
この行を削っても落ちるね。
VC はメンバ関数テンプレートの展開が甘いんじゃないかな。
>>960
差分「だけ」というが、C++ - C >>>> C という罠
>>979
void*はvoidのポインタではない罠
罠多すぎ。。
>>979
「voidを指す」の意味がわかりません。
void 型へのキャストって「変数(の値)が一度も使用されていない」
などの警告を回避する目的以外にどんな場合で使われるんだろう。
>>985
煽りじゃないが,一応void型じゃなくてvoid*型な。
>>986
?
あ?
(void)printf()?
>>988
printf() を void キャストするとどうなるんですか?
>>989
lint の警告(戻り値が捨てられている)が出なくなる。
・lintが静かになる。
・I/O error処理なしの糞Cプログラムに。
・そういうことにしたいのですね:)
あ、
・compilerが"pop"する確信を持てるようになる。
を忘れた(w
>>989-990
lint 対策ですか。関数の戻り値までチェックしてるんですね。
ありがとうございました。
994993:02/09/18 18:12
ありゃまちがえた、
>>990-991
新スレ立てれなかった。誰か立てて下さい。
996
997997!:02/09/18 19:37
↓お前が必ず立てろ。
998v(^・^)v:02/09/18 19:54
次スレだす
http://pc3.2ch.net/test/read.cgi/tech/1032345774/
スレ立ててから続きを書こうと思ったらOSが落ちゃったよ。
やっぱり次すれがたったのね。
ついで。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。