【初心者歓迎】C/C++室 Ver.61【環境依存OK】
C++/CLI使えばいいお
reference countっていうidiomがあります
で、それを実装に利用したのがスマートポインタなんですねーこれが
>>955 未初期化の結果生まれる不定値は危険なバグの元だから。
初期化処理を省きたければ C と同じように書けばいいわけで、
逆に初期化しない理由が無い。
switchの中で配列を作ると↓と言われて動かないです。
どうすればいいですかー?
error C2361: 'items' の初期化が 'default' ラベルによって行われませんでした。
caseの中身を{}でブロック化し、その中で変数を宣言する。
case 0:
{
int a[100];
}
みたいに{}でくくるとうまくいかないか?
ブロック
わぁお被った
できたです。どーもです。
自分はこれがイヤだから、switchではなくifで分けるほうが多いな。
>>956 C++/CLIはどうか知らんが、int型にデフォルトコンストラクタなんて
ないし、クラスのコンストラクタで初期化していないのだから、C++
の言語仕様では0にはならんだろ。
それに初期値として0が妥当かどうかはケースバイケース。
見かけ上であればあるよな
int x(10);とか
int y;
y = int(10;
とか
y = int(10);
とか
y = int();
だってクラスだもん
>>956 その説明では納得できないな。
P p; と P() は両方変数を作成する構文なのに
後者の場合だけメンバ変数まで初期化するのに妥当な理由が見出せない。
仕様のどこに規定されている?
>>968 前者は変数を作成する構文で、後者は値を生成する構文。
>>969 組み込み型の話をしてないか?
964や967の言うとおりクラスの話なんだが。
両方ともオブジェクトをインスタンス化する構文だろ。
>>971 ん、ごめん。よく分からないな。
P()は一時「変数を作成」する構文だと思ってるのだけど、
「値の生成」なの?
そこがよく分からなかったので、970で、「それは組み込み型の話じゃないの?」って
聞いたんだけど。
デフォルトコンストラクタとコピーコンストラクタといってくれ
>>972 一時変数ではなくて一時オブジェクトなのだが
どう違うの?
976 :
デフォルトの名無しさん:2008/12/11(木) 22:57:18
ウィンドウズのGUIアプリを作りたいんですが、今の主流はなんですか?WIN32API?
wpf
>>976 フリーソフトやパッケージソフトの類なら、その通りかな
#include<iostream>
using namespace std;
struct A{int i;};
A ga;
int main(){
static A sa;
A la;
cout << "ga.i = " << ga.i << endl;
cout << "sa.i = " << sa.i << endl;
cout << "la.i = " << la.i << endl;
cout << "ra.i = " << A().i << endl;
}
結果(VC2008)
ga.i = 0
sa.i = 0
la.i = 2406644
ra.i = 0
普通の変数と一緒だな
>>968 5.2.3の2段落目や8.5の7段落目でT()は値初期化するとなっているが、
8.5の9段落目では、デフォルトコンストラクタを持たない型で
初期化子のないオブジェクトは初期化されないと決められている。
newだと両方の書き方ができるので、分かりやすいかもしれない。
new intは初期化子がないので、初期化されない。
new int()は空の初期化子を持つので値初期化(組込型ではゼロ初期化)される。
イテレータのポインタへの変換ってやっても大丈夫なの?
とりあえず動いてはいるみたいなんだけど・・・
>>981 キャストしての変換だったら駄目ぜったい。
&*itなら、vectorならおk、basic_stringも今度から認められる。
配列へのポインタのごとく足したり引いたりしていい。
それ以外のコンテナでの&*itは、単純にその要素へのポインタとしてしか使えない。
cをちょこちょこっとかじってからc++に移行し始め、今まで毎回バグって全然動かなかったDxのプログラムが初めてマトモに動いた
イィィヤッッッッホオォォォー
* + 巛 ヽ
〒 ! +
+ 。 | |
* + / / +
∧_∧ / /
(´∀` / / +
,- f
/ ュヘ | *
〈_} ) |
/ ! +
./ ,ヘ |
ガタン ||| j / | | |||
―――――――――――――
誰かに届け、この喜び
>>964 int にデフォルトコンストラクタがあるとか初期値として 0 が常に妥当だとか、
誰もそんなこと言ってないのになんで偉そうに間抜けを晒すかね。
>>982 ありがとう、気をつけるよ
そしてうまくいかないのは別の原因だった罠・・・orz
CString str = _T(test 1 test 2 test 3);
CString in = str.SpanIncluding(_T("1234567890"));
in に 123 がはいりません_T("")になってます。どうしてですか?
文字列の最初の文字から始まり、pszCharSet. にない文字が出現するところで終了する
だった解決した
>>980 ありがとう。規格を読んで全部ではないが理解できた。
PODでは0初期化されるんだな。
そしてnon-POD class typeではデフォルトコンストラクタが呼ばれるから0初期化されないと。
979でstruct A{int i; virtual void Func(){}}; とすると A().i != 0 となったよ。
俺はPODでもこうなると勘違いしてたよ。勉強になった。
しかし、 古いコンパイラだと実際には初期化してくれないことも・・・
void func()
{
int i;
cout << i << endl;
}
現実問題、市販フリー問わず現在市場に出回ってるコンパイラで、iの
値が0に初期化されることが保証されるコンパイラってあるのか?
警告レベル上げれば初期化されていない変数を参照しているって警告を
出すけど、ほとんどのコンパイラでiの値は不定だと思うが?
セグメント次第
つぎすれ だれか たのむ
>>995 初期化されると思う方がどうかしている。話題になっているのは、その書き方の話ではない。
千と千尋の金閣寺
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。