規格書には、「_ で始まる名前はグローバルな名前空間 (と ::std) で
使うために予約されている」 とある。
あと、「__ を含む名前、または _[A-Z] で始まる名前は、任意の用途で
使うために予約されている」とも書いてある。
>>951それはC++で予約されてる名前だろ
_から始まる名前(2つ、3つ連続している物も含む)はC言語の頃から予約されてた
んで、C++になって明示的に_2つが予約されて、C言語用のキーワードと差別化が
計られた。
_3つ以上が予約されているのは現在も変わらず。
WyvernでMP3聞きながらコンパイルしてる漏れは逝ってヨシですか?
>>954 漏れも昔よくやってた。Pentium/120MHzのノートでな(w
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
スタックに置かれるか、ヒープに置かれるか、
その辺の違いだと判断しました。
そーかー、漏れは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)が壊れているか、だろうな。
>>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*型な。
あ?
(void)printf()?
>>988 printf() を void キャストするとどうなるんですか?
>>989 lint の警告(戻り値が捨てられている)が出なくなる。
・lintが静かになる。
・I/O error処理なしの糞Cプログラムに。
・そういうことにしたいのですね:)
あ、
・compilerが"pop"する確信を持てるようになる。
を忘れた(w
>>989-990 lint 対策ですか。関数の戻り値までチェックしてるんですね。
ありがとうございました。
新スレ立てれなかった。誰か立てて下さい。
996
↓お前が必ず立てろ。
やっぱり次すれがたったのね。
ついで。
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。