■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part38
251
名前:
デフォルトの名無しさん
:04/12/09 20:13:21
たかが宣伝のためのリップサービスをまともに受け取っている馬鹿がいる。
RubyはPerlと全く関係がない。作者自身がそれを明言している。
252
名前:
デフォルトの名無しさん
:04/12/09 20:57:20
ここが C++ スレだということを忘れそうになる惨状だな……
253
名前:
マイク
◆yrBrqfF1Ew
:04/12/09 21:57:19
>>240
使い分ける必要はないな。
好きな言語を作る自由があるから沢山言語があるだけだ。
254
名前:
デフォルトの名無しさん
:04/12/09 23:57:14
Rubyが大好きだということはわかったから、連投はやめれ
255
名前:
デフォルトの名無しさん
:04/12/10 00:02:17
C++がRubyよりはるかに劣った存在であるということもご理解いただけましたか?
256
名前:
デフォルトの名無しさん
:04/12/10 00:10:56
Ruby使ってるとキチガイになるということがよく分かった。
257
名前:
デフォルトの名無しさん
:04/12/10 00:17:45
matz氏がイカレポンチであると再認識した
258
名前:
デフォルトの名無しさん
:04/12/10 00:52:42
JISX3014が閲覧可能。日本語版のANSI/ISO14882:2003のようなもんだな。
http://www.jisc.go.jp/app/pager?id=120287
259
名前:
デフォルトの名無しさん
:04/12/10 00:54:31
げっ、こいつ一丁前にreferrer見てやがる。
トップページから、JIS検索→X3014とやって見てくれ。
http://www.jisc.go.jp/
260
名前:
デフォルトの名無しさん
:04/12/10 01:07:32
JISのPDFは画像データだから検索が出来ないんだよな…
261
名前:
デフォルトの名無しさん
:04/12/10 01:08:23
>>260
できないね。糞だわ。でもタダだし一応取っておいて損はない鴨。
262
名前:
デフォルトの名無しさん
:04/12/10 05:30:46
その点ドキュメントの充実しているRubyとは違うね。
263
名前:
デフォルトの名無しさん
:04/12/10 09:40:01
質問です。
何らかのタイプ設定をenumでセットするクラスがあるとすると、通常はこういう構成になると思います。
class Hoge{
public:
enum TYPE {A,B,C};
Set(TYPE type);
private:
TYPE type_;
};
Hoge hoge; hoge.Set(Hoge::A); hoge.Set(Hoge::B); hoge.Set(Hoge::C);
Setを呼び出すたびにHoge::という修飾が必要なのがわずらわしいので、
以下のように名前空間を利用できないだろうかと考えています。
なお、名前空間名は必ずクラス名をすべて大文字にしたもの、で統一するつもりです。
namespace HOGE { enum TYPE {A,B,C}; }
class Hoge{
public:
Set(HOGE::TYPE type);
private:
HOGE::TYPE type_;
};
using namespace HOGE; Hoge hoge; hoge.Set(A); hoge.Set(B); hoge.Set(C);
クラス利用者がusingディレクティブによって必要に応じて冗長な修飾を
削れるため、後者のほうが、優れた手法だと思っています。
なにか見落としている欠点などありますでしょうか?
264
名前:
デフォルトの名無しさん
:04/12/10 11:02:15
>>263
他の同じようなクラスで、enum TYPE {A, B, C};のようなことができない。
例えば、class Hageでも同じようなenumがあったとして、
名前空間を使わなければhoge.Set(Hoge::A) と hage.Set(Hage::A) で使い分けられる。
名前がぶつからないようにHageの方ではAを使わないようにするくらいなら、
初めからenumをclass内に閉じ込める必要ないと思う。
265
名前:
デフォルトの名無しさん
:04/12/10 11:06:03
class Hoge{
public:
SetHogeA();
SetHogeB();
SetHogeC();
};
にしとけば利用者の手間は一番減る
266
名前:
デフォルトの名無しさん
:04/12/10 11:14:27
>>264
>名前空間を使わなければhoge.Set(Hoge::A) と hage.Set(Hage::A) で使い分けられる。
名前空間を使っても使い分けられるよ
267
名前:
デフォルトの名無しさん
:04/12/10 11:44:32
template<class Foo>
class Hoge {...}
という場合、Hoge は「テンプレート クラス」ですが、
Foo はなんと呼べばよいでしょうか?
268
名前:
デフォルトの名無しさん
:04/12/10 11:51:17
>>267
テンプレート引数。
実際に渡される実引数と区別するなら仮引数。
intなどの非型引数と区別するなら型引数。
ちなみに、Hogeは規格中の言葉の「クラステンプレート」のほうをお勧めしたい。
269
名前:
263
:04/12/10 11:56:30
>>264
すでに
>>266
さんが指摘されてますが、名前空間でもその点は問題ありません。
ちなみにEfffective C++の28項に解説してあります。
>>265
なるほど、つまりこうですね。
class Hoge{
public:
void SetTypeA(void){Set(A);}
void SetTypeB(void){Set(B);}
void SetTypeC(void){Set(C);}
protected:
enum TYPE {A,B,C};
Set(TYPE type);
private:
TYPE type_;
};
インラインだから余計なコストもおそらくないし、全部クラス内に収まってるし、
enumの範囲チェックも不要になるしで、どうもこれがベストの手法に思えます。
ありがとうございました。
>>267
ついでの横レスですが、
×テンプレートクラス
○クラステンプレート
だったはずですよ。
270
名前:
デフォルトの名無しさん
:04/12/10 13:27:02
>>258
前まで売ってたやつですか?
次回からテンプレ追加ですね。しかし混んでいるのか落とせねぇ
271
名前:
デフォルトの名無しさん
:04/12/10 13:35:55
常に定数しか引数にしないのか?
272
名前:
デフォルトの名無しさん
:04/12/10 13:37:40
float型やdouble型に対する
% 演算子的な標準関数または手法ってあるんでしょうか?
なければ作るまでですが、自分で変なの拵えるよりはと。
273
名前:
デフォルトの名無しさん
:04/12/10 13:40:48
fmod
274
名前:
デフォルトの名無しさん
:04/12/10 13:42:45
>>273
即レスありがとうございました。助かりました。
275
名前:
267
:04/12/10 14:00:02
>>268
>>269
ありがとうございます。
クラス テンプレート、テンプレート引数、ですか。
あともう一つ呼び名が分からないのですが、
クラス テンプレートのテンプレート引数として指定するクラスの
シグニチャのことを何と呼ぶのでしょうか?
たとえば、
template<class Junk, class Food>
class JunkFood {...};
となっていて、Junk と Food には、
ある種のプロトタイプのメンバ関数が必ず必要とします。
このような場合、私はダミークラスを定義しているのですが、
// 実装のないシグニチャだけのクラス
class JunkTempl {
void Weight(void);
double Value(void);
};
このような JunkTempl を一般になんと呼ぶのでしょうか?
276
名前:
デフォルトの名無しさん
:04/12/10 14:03:07
インターフェースクラス
277
名前:
デフォルトの名無しさん
:04/12/10 14:05:01
クラスインターフェースか(´・ω・`)
しかも微妙に違ってるorz
278
名前:
ネムー
:04/12/10 15:36:26
forループの中に、計算データを保存するプログラムを書いて、
10ループ毎に計算データを保存するというような事はできるんでしょうか?
ファイル名をループ毎に自動で指定させる事ができなくて困っています。
bccを使っています。
わかる方教えてください。よろしくお願いします。
279
名前:
デフォルトの名無しさん
:04/12/10 15:37:56
>>278
std::stringstream
280
名前:
デフォルトの名無しさん
:04/12/10 15:41:19
>>278
単なる一例ですが。
#include <iostream>
#include <sstream>
#include <string>
int main()
{
for (int i = 0; i < 100; i++)
if ((i % 10) == 0) {
std::string s;
std::stringstream str(s);
str << "filename" << i / 10;
std::cout << str.str() << std::endl;
}
}
281
名前:
デフォルトの名無しさん
:04/12/10 21:10:37
>>261
思いっきりナメられてるな
OCR 書ける香具師はこんなの見ねえってさw
282
名前:
デフォルトの名無しさん
:04/12/11 00:53:02
ウインドウモードの時、指定した画面サイズ(W,H)から周りの枠線やタイトルバーを除いた幅と高さはどうやって求めればいいのですか?
283
名前:
デフォルトの名無しさん
:04/12/11 01:01:01
スレ違い
284
名前:
282
:04/12/11 01:56:40
ん?C++スレの質問ですよね?
間違っていないと思うんですが、一体どこで質問しろとorz
285
名前:
デフォルトの名無しさん
:04/12/11 02:00:04
ウィンドウ(GUI)が出てくる時点で標準C++の規格外。
WindowsならAPIスレなりMFCスレに逝くべし。
286
名前:
デフォルトの名無しさん
:04/12/11 02:01:17
>>284
このスレは機種に依存しない話題だけをメインに扱っている。
多分Win32APIかどこかで聞いた方がいい。
287
名前:
デフォルトの名無しさん
:04/12/11 02:06:51
どこが適切な場所かわからないなら環境依存OKスレで聞いとけ。
288
名前:
デフォルトの名無しさん
:04/12/11 02:11:44
それを言うならこっちだろ
http://pc5.2ch.net/test/read.cgi/tech/1100963189/
289
名前:
282
:04/12/11 02:16:38
そうなんですか、知らなかった・・・ソウイウダイジナコトハテンプレニイレテテクダサイヨorz
VBでは領域を調べることができるのでC(++)でもできるのかと思ってました。
>>288
なんかこれもスレ違いな気がするけど行ってきます(´`)>
290
名前:
デフォルトの名無しさん
:04/12/11 02:20:27
iteratorを扱う関数って、NULLチェックとend()チェックしないとダメなの?
void f(T::iterator i) {
if (i && i->ptr) {
x = i->ptr->data;
}
}
もっと簡単にできる?
291
名前:
デフォルトの名無しさん
:04/12/11 02:21:27
C++はマイクロソフトの商品名じゃねぇぞ。アフォ。
292
名前:
デフォルトの名無しさん
:04/12/11 02:22:20
まちがえた。
void f(T::iterator i) {
if (i && i != c.end() {
x = i->data;
}
}
293
名前:
デフォルトの名無しさん
:04/12/11 02:29:36
このスレでたまに初心者を煽ってる人いるんだが、
本来、C++プログラマってあんまり劣等感に満ち溢れた奴って少ないだろ?
会社などでも比較的優秀な人材をC/C++に配属するしさ。
でありながら、
>>291
のように誹謗の機会をうかがう哀れな負け組がこのスレにくるのは何故だろう・・・?
会社の研修でC/C++をやらされたが会社側に事実上のダメ出しされたために屈折してしまった馬鹿が
Cプログラマを装ってスレを荒らしているのではないか?
私の知ってるCプログラマは、皆、温厚で忍耐強いがなぁ。
私は、短気なCプログラマに出会ったことがない。
294
名前:
デフォルトの名無しさん
:04/12/11 02:30:41
iteratorの有効性なんぞ呼び出し側に保証させとけ
295
名前:
デフォルトの名無しさん
:04/12/11 02:35:13
Dプログラマだから
296
名前:
デフォルトの名無しさん
:04/12/11 02:40:12
Dプログラマは所詮お遊び。仕事には使えない。
297
名前:
270
:04/12/11 02:45:29
クッキー切ってたorz
298
名前:
デフォルトの名無しさん
:04/12/11 02:45:57
GNU次第
299
名前:
デフォルトの名無しさん
:04/12/11 08:59:34
>>293
>私の知ってるCプログラマは、皆、温厚で忍耐強いがなぁ。
お前はそいつらの何を知ってる?全部を知り尽くしてるのか?
表で温厚で忍耐強くがんばってる分、抑圧されたストレスも他の人より多いだろう。
300
名前:
デフォルトの名無しさん
:04/12/11 09:05:18
つうかそもそも
>>282
のことぐらいググるなり、MSDN検索するなりして自分で調べろ、と思うんだが。
301
名前:
デフォルトの名無しさん
:04/12/11 14:36:39
>>299
> 表で温厚で忍耐強くがんばってる分、抑圧されたストレスも他の人より多いだろう。
お前はそいつらの何を知ってる?全部を知り尽くしてるのか?
302
名前:
デフォルトの名無しさん
:04/12/11 15:55:18
ostringstream o("aaa");
o << "bbb";
cout << o.str() << endl;
これを実行するとbbbとしか表示されないのですが
正しい挙動ですか?
aaabbbと表示されるのを期待していたのですが。
303
名前:
デフォルトの名無しさん
:04/12/11 16:02:37
>>258
これローカルに落とせないの?
304
名前:
デフォルトの名無しさん
:04/12/11 16:18:18
>>302
std::ostringstreamのコンストラクタは std:string を引数に取る。
従って、
std::ostringstrem o("aaa"); は、
std::ostingstream(std::string("ooo")); と同じ。
以降はこの一時stringオブジェクトに対して操作が行われる。
そして、最初の出力を実行した時、書き込みポインタはバッファの
先頭にあるため、"aaa"が"bbb"で上書きされる。
もし期待通りの結果を得たければ、先に o.seekp(3); としておかなければならない。
305
名前:
デフォルトの名無しさん
:04/12/11 16:19:43
>>303
大きな声では言えないが、Temporary Internet Filesの中にあるはず。
これ以上は自分で考えろ。
306
名前:
デフォルトの名無しさん
:04/12/11 16:29:15
>>304
ありがとうございました。
o.seekp(3);を挟んだらaaabbbと表示されました。
本にo << "aaa" << "bbb";を、
>>303
のように書くこともできる
と書いてあったので困惑してました。
307
名前:
デフォルトの名無しさん
:04/12/11 16:33:47
>>306
ちなみに、それ、何て本?
308
名前:
デフォルトの名無しさん
:04/12/11 16:36:08
>>307
プログラミング言語C++第3版です
309
名前:
デフォルトの名無しさん
:04/12/11 16:37:03
>>304
std::stringstreamが取るのはconst std::string&だろ?
310
名前:
デフォルトの名無しさん
:04/12/11 16:41:57
つか日本語訳なんていらんだろ
311
名前:
デフォルトの名無しさん
:04/12/11 16:43:45
>>308
何章かな?
>>309
確かにそうだね。という事は バッファの中身をいじっても元の std::stringは
不変である事を保証しているのかな?謎だ・・・・
312
名前:
デフォルトの名無しさん
:04/12/11 16:47:54
スマソ。
>>304
には間違いがありました。
std::stringstreamは独自の内部バッファを持ち、コンストラクタに取った
std::stringの中身は内部バッファにコピーされるんでした。だから
const std::string& なんだね。
しかし、書き込み/読み取りポインタがバッファの先頭にある事は変わり
ないので、書き込んだり読み取ったりすると、先頭から行われるのは
変わらない。
313
名前:
デフォルトの名無しさん
:04/12/11 16:49:22
>>311
21.5.3の文字列ストリームの732ページ
>>280
で知って、使ってみようとちょっと読んだだけなので
自分が間違ってるかも。
314
名前:
デフォルトの名無しさん
:04/12/11 16:51:14
>>313
今読んでみたが、
>>306
のような事は書いてない。
ま、文字列ストリームは普通のファイルストリームと似たような感覚で
扱えばいいんじゃない?
315
名前:
デフォルトの名無しさん
:04/12/11 17:02:23
今日本語訳の方ではなく、元の方のerrataを見たら
ostringstream o("aaa",ios_base::ate);
こんな風に直されてました。
316
名前:
デフォルトの名無しさん
:04/12/11 17:05:41
>>315
それなら分かる。std::ios_base::ateは、ファイルを開いた後にファイルの最後に
移動するオープンモードフラグだから。
317
名前:
デフォルトの名無しさん
:04/12/11 17:11:17
>>299
,301
Cプログラマに外向的な性格の人は少ないでしょ。
ストレスを他者への攻撃に転化するタイプは少ないように思う。
ただし、あくまで人数が多い少ないの話であって2chを訪れる人の中には、
Cプログラマの適性がないにもかかわらず、
Cをやってるorやらされてる、迷惑な人が少ないながらもいるんだろう。
C/C++は古い言語ということもあって新しい言語よりも理不尽。
その理不尽さに耐えるだけの適性がないと、辛いわな。
318
名前:
デフォルトの名無しさん
:04/12/11 17:33:41
>>303
,305
>大きな声では言えないが、Temporary Internet Filesの中にあるはず。
>これ以上は自分で考えろ。
大きな声で言えないも何もkonquerorだと開くか保存するかを聞いて来るのだけど
これってローカルに入れちゃダメなの?
319
名前:
デフォルトの名無しさん
:04/12/11 17:50:31
言語で性格がくくれると思っている人は、星座占いとか好きそうだな
320
名前:
318
:04/12/11 18:04:50
>>319
私は、星座占いや血液型占いは全く信じないし、
TVの朝のニュース番組で占いが出てくると即、チャンネルを変える。
朝のバタバタした時間帯に占いを流すTV局が増えたのは実に情けないことだと思っている。
非科学的な分野が市民権を得ていることが情けない。
公共の電波は落書き帖じゃねーんだ。そういうことは毒電波専門チャンネルで流せ、な?(AA略)
と、心の中でツッコミを入れている次第である。
321
名前:
デフォルトの名無しさん
:04/12/11 18:16:50
このコードを強引にコンパイルする方法はありますか?
struct Object
{
    static void static_hoge() {};
};
void Hoge()
{
   Object.static_hoge(); // この2行は、
   Object object; // 一切変更できない
}
例えば、
typedef Object* ObjectPtr;
const Object& Object = *((ObjectPtr)0);
をグローバル宣言することでstatic_funcの呼び出しは解決しますが、
型名と変数名が衝突してしまいます。
目的はパズル的な事なので意味はありません。
322
名前:
デフォルトの名無しさん
:04/12/11 18:19:32
よくわからん。出直せ。
323
名前:
デフォルトの名無しさん
:04/12/11 18:27:05
>>332
Object::static_hoge();
ではなく
Object.static_hoge();
でアクセスできないかという意味です
324
名前:
デフォルトの名無しさん
:04/12/11 19:08:21
txtファイルに文字をうって
そのあと、そのファイルに文字を追加入力するには
どうすればいいのでしょう?
読み込んだ配列に配列を足すでは無理みたいで
325
名前:
デフォルトの名無しさん
:04/12/11 19:20:43
>>323
staticメンバ変数はインスタンス無しで呼び出せるが、後者の書式は
インスタンスを必要とするので、何でもいいからObject型のオブジェクトを
作成すればいいのでは。
326
名前:
デフォルトの名無しさん
:04/12/11 19:33:39
>>325
Object.static_hoge();の部分は変更できませんので、
インスタンス名がObjectでないといけません。
そうするとObject objectの部分で型名と衝突し、
通常はコンパイルエラーが出ると思います。
また、適当なインスタンスを作成するよりは、
325の通りNULL参照を使う方が低コストかと考えました。
327
名前:
デフォルトの名無しさん
:04/12/11 19:41:25
つまり、JavaなりDelなりからC++に移って
記法が気に入らないから、合わせる方法はないか探しているということですね。
328
名前:
デフォルトの名無しさん
:04/12/11 19:53:56
>>327
そんなところです。
気に入らないわけではありませんが
同じコードが動けば楽かと思いまして。
329
名前:
デフォルトの名無しさん
:04/12/11 20:03:00
無理なものは無理
330
名前:
デフォルトの名無しさん
:04/12/11 20:05:38
プリプロセッサでも通せ
331
名前:
デフォルトの名無しさん
:04/12/11 20:34:21
namespaceで囲えばいいんでは?
namespace Hoge {
struct Object {
static void func() { cout << "Nurupo" << endl; }
};
}
typedef Hoge::Object *ObjectPtr;
const Hoge::Object& Object = *((ObjectPtr)0);
Object.func();
332
名前:
デフォルトの名無しさん
:04/12/11 20:55:30
>>331
この2行をクリアしたいのですが、無理ではないでしょうか
Object.func();
Object obj;
スレ違いな気もしますので、これ以上はやめておきます。
失礼しました。
333
名前:
デフォルトの名無しさん
:04/12/11 21:22:07
郷に入れば郷に従え
334
名前:
デフォルトの名無しさん
:04/12/11 21:29:03
>>332
cppで。
#define Object instance
Object.func();
#undef Object
#define Objec className
Object obj;
335
名前:
デフォルトの名無しさん
:04/12/12 11:58:12
インデックス値が、小さい方から大きい方へ順番に入っている
配列やリストを指す言葉ってありますか?大きい方から小さい方でも構いません。
336
名前:
335
:04/12/12 12:00:25
これじゃ意味不明だ。
ええとインデックス値というのは、ユーザ定義の序列みたいなものでお願いします。
どうでも良いといえば良いのですが、こういう概念を一言で表せると考えやすいので…。
337
名前:
デフォルトの名無しさん
:04/12/12 12:03:38
もしかして昇順、降順のことか?
338
名前:
デフォルトの名無しさん
:04/12/12 12:31:06
>>337
ありがとうございます
昇順リスト、昇順配列と呼ぶことにします
339
名前:
303
:04/12/12 14:30:21
>>305
いや、ここで聞く前にそこ探したんだけど
イメージが見つからなかったのよ… とほほ
340
名前:
デフォルトの名無しさん
:04/12/12 14:50:26
>>339
Cygwinでも入れてfindで探すとか。
341
名前:
デフォルトの名無しさん
:04/12/12 14:54:37
Operaで開こうとすると「保存しますか?」と出て保存できるのは内緒だ
342
名前:
デフォルトの名無しさん
:04/12/12 15:12:24
C99のときは再インストール後、Acrobat Readerをインストールする前にそこへ行ってきて、
お馴染み、ファイルのダウンロードのダイアログから堂々と保存しました。
今回はTemporary 〜 から引っぱってきたけどね。
343
名前:
デフォルトの名無しさん
:04/12/12 15:19:19
>>339
画面にPDF開いた状態で探さないと閉じたら消されるとかかもしれん。
画面に出したまま探してみ。拡張子PDFで。
344
名前:
デフォルトの名無しさん
:04/12/12 16:07:40
>>339
C:\Documents and Settings\XXXXXXX\Local Settings\Temp\
にPDFのtmpファイルがあったのでリネームでOKだったxp。
345
名前:
339
:04/12/12 17:05:37
>>340-344
みんなアリガト
ExplorerだとTemporary Internet Filesの下のContent.IE5とかが見えなかったんだけど
Cygwinでfind . -name '*.pdf'したら一発で見つかったよ
これローカルに落としてもAcrobatのメニューが使えないのね…
346
名前:
デフォルトの名無しさん
:04/12/12 17:27:31
>>345
画像データだから。
それからExplorerだと隠しフォルダ属性を取らないと見つからないかもね。
347
名前:
デフォルトの名無しさん
:04/12/12 18:21:14
コンテナからeraseするときは、iteratorを後置インクリメントすると良いと習ったのですが
for (iterator = container.begin(); it != container.end();){
if (条件が合えば){
container.erase( iterator++ );
// iterator = container.erase( iterator );
}
else {
++iterator;
}
}
これだとcontainerがvectorなどだと、最後尾のコンテナを削除したとき
エラーが出てしまいます(コメントアウトした方のやり方だと大丈夫)。
私が習ったやり方はあまり良い物では無いのでしょうか。
348
名前:
デフォルトの名無しさん
:04/12/12 18:26:45
>>347
Effective STL 嫁
削除系関数はイテレータを無効化するので
container.erase( iterator )
では iterator が無効化されてしまう
349
名前:
デフォルトの名無しさん
:04/12/12 18:27:40
>>347
>私が習ったやり方はあまり良い物では無いのでしょうか。
その通り。
350
名前:
348
:04/12/12 18:28:31
あ、スルーしてくり
351
名前:
デフォルトの名無しさん
:04/12/12 18:29:28
>>347
オマエ、もしかして早合点のクセないか?
そんなことを教えるわけがなさそう
352
名前:
デフォルトの名無しさん
:04/12/12 18:31:09
>>348-349
listとかだと上手くいくので、私が何か勘違いしているのかと不安でした。
今後はコメントアウトした方で行きます。Effective STLも求めてみます。
レスありがとうございました。
353
名前:
デフォルトの名無しさん
:04/12/12 18:41:17
>>352
「習った」とあるが、本当にそう教わったのなら教えた香具師が馬鹿。
教えた香具師が信頼できるのなら教わった藻前が早合点している。
354
名前:
デフォルトの名無しさん
:04/12/12 18:49:41
標準シーケンスコンテナではeraseの戻り値、
標準連想コンテナではのようにするってことじゃないの?
355
名前:
デフォルトの名無しさん
:04/12/12 22:02:51
基本的なことなんですけど、文字色はどうやったらかえれますか、
できたら教えてください。
356
名前:
デフォルトの名無しさん
:04/12/12 22:04:00
>>355
ちっとも基本的なことじゃないから安心しろ。
http://www.kumei.ne.jp/c_lang/intro/no_58.htm
357
名前:
デフォルトの名無しさん
:04/12/12 22:04:25
できないので教えられない
358
名前:
デフォルトの名無しさん
:04/12/12 22:04:52
なるほど、ありがとうございます
359
名前:
デフォルトの名無しさん
:04/12/13 00:03:23
wmpの視覚エフェクトを自分で作っているのですが、
現在再生中のファイル名と
再生した経過時間を取得するにはどうすればいいでしょうか。。
板違いだと思うのですが、どこで聞いてよいか分からなくて、、、
どなたかご教授ください。
360
名前:
デフォルトの名無しさん
:04/12/13 00:50:00
http://pc5.2ch.net/test/read.cgi/tech/1101393155/
361
名前:
359
:04/12/13 00:57:53
誘導ありがとうございます。
362
名前:
デフォルトの名無しさん
:04/12/13 11:27:29
以下のようなコード(ただしhoge_tはPODではない)で、クラスA,Bの
コンストラクタ起動時は変数a,bのコンストラクタ起動前なのに
a,bへのポインタを使っていますが、これはC++の規格的にOKですか?
#include<iostream>
class Base {
protected:
hoge_t a b, *ptr;
Base( hoge_t *p ) : a(), b(), ptr( p )
{ a= ...; b= ...; } //aとbの初期化処理
public:
const hoge_t get(void) { return *ptr; }
};
class A : public Base {
public:
A(void) : Base( &a ) {}
};
class B : public Base {
public:
B(void) : Base( &b ) {}
};
int main(void){
A a;
B b;
std::cout<< a.get()<< "\n";
std::cout<< b.get()<< "\n";
return 0;
}
363
名前:
デフォルトの名無しさん
:04/12/13 21:25:44
フラグを使うときにintなら
int f_hoge=0;
f_hoge = 1 - f_hoge;
みたいに出来ますが、
このフラグをboolでやるとすると
どのようになりますか?
364
名前:
デフォルトの名無しさん
:04/12/13 21:30:55
>>363
bool fHoge = false;
fHoge = !fHoge;
365
名前:
デフォルトの名無しさん
:04/12/13 21:32:04
>>362
hoge_tってどこから出てきた?
366
名前:
デフォルトの名無しさん
:04/12/13 22:15:46
>>362
それは結局「以下が可能か?」という問いに帰着されるような気がする
struct hoge_t {};
struct Base {
hoge_t a, *ptr;
Base() : ptr( &a ), a() {}
};
gccだと362は(typoを適当に直して)-Wallでも警告なしでコンパイルされるのに対して
上の例は警告が出る
規格だとどうなんでしょうね?
367
名前:
デフォルトの名無しさん
:04/12/13 22:22:07
>>362
struct hoge_t {};
class Base {
protected:
hoge_t a, b, *ptr;
Base() : a(), b(), ptr(0) {}
};
class A : public Base {
public:
A(void) : Base() {ptr = &a;}
};
class B : public Base {
public:
B(void) : Base() {ptr = &b;}
};
だと規格上確実だと思うけどダメかい?
368
名前:
デフォルトの名無しさん
:04/12/13 22:32:59
>>366
派生クラスの構築は、基底クラスのコンストラクタが呼び出されてから
メンバ、派生クラスの順に初期化されるから大丈夫じゃね?
gcc3.4.2で-Wallにしてみたが警告は出ない。
369
名前:
デフォルトの名無しさん
:04/12/13 22:35:56
>>367
あーそっか。aとbがまだ初期化されてないうちに使うとまずいね。
370
名前:
デフォルトの名無しさん
:04/12/14 01:43:18
皆さん回答ありがとうございます。
>365
氏
hoge_tは実際にはテンプレートを使ったクラスです。
>366
氏
そのコードでは、aへのポインタを得るタイミングが
>362
より若干遅い気がします。
>367
氏
最初はそのコードと同様にしてたのですが、それだと
・ptrをNULLで初期化してから派生クラスでもう一度設定しなおすという回りく
どい処理になる
・派生クラスでptrの設定をしなくてもコンパイルできてしまう(実行時まで派生
クラスでのptr設定忘れに気が付けない)
ので
>362
でコードを書いて、Win2KPro,cygwin1.5.9,gcc3.3.1という環境でコン
パイルは通るのですが、未初期化の変数へのポインタを使うことがC++の規格と
して正しいのか気になって質問しました。
私はなんとなくCの不完全型へのポインタと似た感じを受けるので規格違反して
いないと思っています。
371
名前:
362
:04/12/14 01:44:10
失礼しました。
>370
は私の書き込みです。
372
名前:
デフォルトの名無しさん
:04/12/14 01:51:48
>>370
未初期化の変数へのポインタが使えないと、自己参照型クラスは
作れなくなるぞ。
373
名前:
デフォルトの名無しさん
:04/12/14 01:56:34
>>370
もし hoge_t::operator&() があると、ctor の前にこれ呼ばれる?
374
名前:
デフォルトの名無しさん
:04/12/14 02:00:01
>373
それは完全にundefined behavior
375
名前:
デフォルトの名無しさん
:04/12/14 13:56:45
C++はC99と後方互換が無いんですか?
376
名前:
デフォルトの名無しさん
:04/12/14 14:02:22
>>375
後方互換の話ならC99スレを立ててそこで議論してくれ。
もちろん後方互換ではないけど。
377
名前:
デフォルトの名無しさん
:04/12/14 14:34:52
後方互換とはなんだと調べようとしたらIMEのやつ広報5巻って出してくる。
ワラッテサキヘススメン。
378
名前:
デフォルトの名無しさん
:04/12/14 18:22:11
% [ttt.cpp] %%%%%%%%%
#include <stdio.h>
class SampClass {
public:
SampClass();
~SampClass();
private:
void memFunc000(void);
};
typedef struct tagSampStruct {
struct {
SampClass aaa;
};
} SampStruct;
int
main(int argc, char **argv)
{
printf("Hello\n");
}
%%%%%%%%%%
というコードをgccでコンパイルすると、
> ttt.cpp:14: error: member SampClass tagSampStruct::<anonymous struct>::aaa'
> with constructor not allowed in anonymous aggregate
> ttt.cpp:14: error: member SampClass tagSampStruct::<anonymous struct>::aaa'
> with destructor not allowed in anonymous aggregate
というエラーが発生しますが、VC++ではエラーが発生しません。
VC++でも同様のエラー(ワーニングでも可)を発生させたいのですが
そのようなことは可能でしょうか?
ご教示おねがいいたします。
379
名前:
デフォルトの名無しさん
:04/12/14 20:06:08
教えて下さい!
参照って何 具体的な使用例とか、詳しいサンプルとかほしいなぁ
お勧めのホームページとか、あったら教えて欲しいし
お願いしますね
380
名前:
デフォルトの名無しさん
:04/12/14 20:09:14
>>379
詳しくはC++Primerをお読みください。
381
名前:
デフォルトの名無しさん
:04/12/14 20:10:45
>>378
警告レベルをW4にすると
warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。
と出てくれる
382
名前:
デフォルトの名無しさん
:04/12/14 20:15:52
>>380
ありがとうございます。
でも ごめんなさい・・・C++Primerって何処にあるんですか???
383
名前:
デフォルトの名無しさん
:04/12/14 20:16:22
本屋
384
名前:
デフォルトの名無しさん
:04/12/14 20:18:49
本屋さんですか?(泣)
C++Primerって本なんですか?困ったな
385
名前:
デフォルトの名無しさん
:04/12/14 20:26:08
>>384
初心者にありがちなのですが、初心者だから初めはWEBページでちょっと勉強してから、
というような人が多いようです。
しかし、誰か得体もしれぬ人が作ったようなWEBページは多くの場合、説明が不適切・
不親切であったり、まとまりにかけていたり、そうでなかったとしてもごく一部の
話題しか取り扱わなかったりして、とても読みにくいものです。
また、解かりやすい解説を捜し当てるのにかかる手間がかかるでしょう。
もし、許されるならば書籍を購入された方がはるかに有意義だと思いますよ。
386
名前:
デフォルトの名無しさん
:04/12/14 20:27:40
>>385
> また、解かりやすい解説を捜し当てるのにかかる手間がかかるでしょう。
訂正:また、解かりやすい解説を探し当てるのにわりと手間がかかるでしょう。
387
名前:
デフォルトの名無しさん
:04/12/14 21:26:44
C++Primerってヘンーナ日本語訳しているよね。
デリファレンスとか、インデクスとか。
388
名前:
デフォルトの名無しさん
:04/12/14 22:05:02
一見親切にも見えるWebページは情報が不正確だったり
最悪うその垂れ流しだったり、うのみにしてはいけない。
その判断が自分で出来ないなら書籍を買う方が良い。
ただし、書籍にも糞本はいっぱいあるから気を付けれ。
389
名前:
デフォルトの名無しさん
:04/12/14 22:17:13
糞本の代表
ttp://www.amazon.co.jp/exec/obidos/ASIN/4839912025/qid=1103030113/sr=1-43/ref=sr_1_2_43/249-3354889-3141955
390
名前:
デフォルトの名無しさん
:04/12/14 22:26:59
レビューがすごいな
391
名前:
デフォルトの名無しさん
:04/12/14 22:28:53
>>379
まずは、禿本だな
それでわからんかったとこを方々調べて解読
俺自身、そうやって憶えた
当時の禿本は初版だったが・・・
392
名前:
デフォルトの名無しさん
:04/12/14 22:30:39
>>389
俺もだまされたうちの一人
393
名前:
デフォルトの名無しさん
:04/12/14 23:23:58
>>389
にくらべればこっちの方が100倍マシ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4798008532/
394
名前:
デフォルトの名無しさん
:04/12/14 23:39:26
>>389
レビュー禿ワラタ
395
名前:
デフォルトの名無しさん
:04/12/14 23:40:21
立ち読みで判りそうなことばかり・・・ アフォかこいつら
396
名前:
デフォルトの名無しさん
:04/12/14 23:52:14
>>395
買わなくてもコメント出来るから君もすれば?
397
名前:
デフォルトの名無しさん
:04/12/15 00:25:45
構造体って必要ですか?
全部クラスに統一した方がスッキリすると思うんだけど。
398
名前:
デフォルトの名無しさん
:04/12/15 00:30:30
>>397
そもそもC++の構造体はクラスと大差ない。
399
名前:
デフォルトの名無しさん
:04/12/15 00:34:12
>>398
っていうかデフォルトの可視性以外全部一緒
400
名前:
デフォルトの名無しさん
:04/12/15 00:39:47
つーか、classのデフォルトもpublicでいいだろ。特に基底クラス
401
名前:
デフォルトの名無しさん
:04/12/15 00:39:51
>>399
機能としてはそうですよね。
言語仕様を無駄に煩雑にしてる気がするんですが、
クラスを使わず構造体を使う方が適切なケースってあります?
402
名前:
デフォルトの名無しさん
:04/12/15 00:40:56
Cからの遺産
403
名前:
デフォルトの名無しさん
:04/12/15 00:42:35
POD使いたい時
404
名前:
デフォルトの名無しさん
:04/12/15 00:46:43
>>400
だよな。デフォルトがprivateだからついついメンバ変数を先に書いちゃったりする。
普通に考えたらインターフェースであるpublicメンバ変数が上に来てるほうが良いってことは明らかなのに。
405
名前:
404
:04/12/15 00:48:19
>publicメンバ変数
publicメンバ関数
406
名前:
デフォルトの名無しさん
:04/12/15 00:48:49
C++FAQには短いプログラムを書くときにこの方が便利だからと
書いてあったが、やっぱ public が上にある方がいいよな
407
名前:
デフォルトの名無しさん
:04/12/15 01:01:19
>>406
その場合structで書けばいい。
関数オブジェクトはよくstructで書く。
408
名前:
デフォルトの名無しさん
:04/12/15 01:03:11
>>406
class いらねーよな
テンプレには typename だし
409
名前:
デフォルトの名無しさん
:04/12/15 02:29:05
C++自体がいらない
410
名前:
デフォルトの名無しさん
:04/12/15 02:41:20
>>409
んなこたぁーない。
411
名前:
デフォルトの名無しさん
:04/12/15 03:05:42
構造体がアラインされてないとパフォーマンスが大きく低下するって聞いたのですが、何故こうなるんですか?
412
名前:
デフォルトの名無しさん
:04/12/15 03:10:08
>>411
CPUによる。CPUによってはアラインされていないとバスエラーを起こして
そもそも動かないものもある。
413
名前:
デフォルトの名無しさん
:04/12/15 03:55:11
32bitのデータを32bit境界から開始しておけばそのまま32bitで取り出せるが
8bit境界で適当に開始されていると24bit+8bitとか16bit+16bitとか分離して
読み込んだあと結合しないといけないから。
414
名前:
デフォルトの名無しさん
:04/12/15 09:05:10
>>413
器用で、寧ろ余計なお世話なCPUだな。普通のCPUはそんなことしない。
415
名前:
デフォルトの名無しさん
:04/12/15 09:32:15
>>414
かつて "普通" だった CPU はしっかりやっていたが・・・
416
名前:
デフォルトの名無しさん
:04/12/15 09:49:53
余計なお世話というより、互換性のためにしょうがなくやってるって感じか。
417
名前:
デフォルトの名無しさん
:04/12/15 10:03:50
組込み系だといまだにそれが普通なんじゃないの?
418
名前:
デフォルトの名無しさん
:04/12/15 10:58:01
alignmentがいい加減でもパフォーマンスが落ちるか落ちないか
っていうのはRAM側の問題じゃないの?
419
名前:
デフォルトの名無しさん
:04/12/15 11:05:35
>>418
DSPなんかだと、RAMというよりコアの問題だと思う。
C++の話題じゃないけど(w
420
名前:
デフォルトの名無しさん
:04/12/15 11:12:08
>>418
dynamic phase alignment をサポートしてるかどうかってことでいいの?
スレ違いだけど
>>411
の疑問は解消しなければ
421
名前:
デフォルトの名無しさん
:04/12/15 11:15:02
RAMとは関係ないんじゃないの?
メモリ空間にマッピングされるのってRAMだけとは
限らないわけだし。(例えばレジスタとか)
422
名前:
デフォルトの名無しさん
:04/12/15 11:21:22
構造体のメンバーへのアクセスってメモリの先頭からのオフセットだよね?
mallocとかnewとかで確保した領域にアクセスする場合でも
最適化でレジスタに読まれてから処理されてるん?
アセンブラ出力させて調べてみよう・・・orz
423
名前:
デフォルトの名無しさん
:04/12/15 11:22:20
>>422
質問の意味がわからないけど、レジスタに入れないとなにもできないと思う……
424
名前:
デフォルトの名無しさん
:04/12/15 11:27:11
>>423
そうか?
425
名前:
デフォルトの名無しさん
:04/12/15 11:40:04
>>424
俺もわからん。解説してくれ。
426
名前:
423
:04/12/15 11:59:34
アホなこと言った?だったらゴメン。
レジスタ使わないでできることと言ったら、DMAくらいしか思いつかない……。
427
名前:
デフォルトの名無しさん
:04/12/15 12:18:25
x86系なら、一応メモリに直接演算出来るし
比較程度だったら、レジスタに読み出さないでやってるかも。
速度的には不利になる場合も多いけど。
でも、メモリに対して演算できても、
その結果を読み出して使う段では、普通はレジスタにロードするね。
関係ないけど、google翻訳(日→英)で、デストラクタを訳すと
Death Tractor (死のトラクター)になるらしい。
D言語スレで見た。
428
名前:
デフォルトの名無しさん
:04/12/15 14:11:13
むしろExcite翻訳がかなり正確にム用語を訳せて驚いた
429
名前:
デフォルトの名無しさん
:04/12/15 18:03:37
>>422
アーキテクチャに夜。
32bitと64bitでも違うことあるし。
430
名前:
デフォルトの名無しさん
:04/12/15 18:41:42
1+2+3,1+2-3,1-2-3,1*2-3,・・・・・・のように符号を変えていって値を
求めたいのですが、
char fugou[4]={'+','-','*','/'};
for(a=0; a<=2; a++){
cout<<1<<fugou[a]<<2<<fugou[a]<<3<<endl;
}
COUTからどのようにして答えを出せばいいのでしょうか?
431
名前:
デフォルトの名無しさん
:04/12/15 19:33:53
すっごい初歩的な事かもしれないんですが、いくら書籍&サイトを
探しても載ってなかったので質問です。
メンバにint mIntを持つクラスAがあったとして
A a;
int n = a; //int n = a.mInt;
というような代入をする演算子をオーバーロードする事は出来ますか?
既出だったらすみません。
432
名前:
デフォルトの名無しさん
:04/12/15 19:35:13
>>430
その宿題は演算子の優先順位も考慮しないといけないんじゃないのかな?
433
名前:
デフォルトの名無しさん
:04/12/15 19:42:00
>>431
intへのキャストをオーバーロードすればいいんでない?
434
名前:
デフォルトの名無しさん
:04/12/15 20:00:01
>>433
なるほど!!!!!
ありがとうございます!!!!
あ、キャストをオーバーロードした時って何か弊害ありますかねぇ?
435
名前:
デフォルトの名無しさん
:04/12/15 20:04:30
import java.awt.Graphics;
import java.applet.*;
import java.awt.Image;
public class Test extends Applet {
Image im[] = new Image[4];
public void init() {
im[0] = getImage(getDocumentBase(), "a.gif");
im[1] = getImage(getDocumentBase(), "b.gif");
im[2] = getImage(getDocumentBase(), "c.gif");
im[3] = getImage(getDocumentBase(), "d.gif");
}
public void paint(Graphics g) {
double x = Math.PI * 0;
double y = 200 - Math.sin(x);
for (int i=0; i<4; i++){
g.drawImage(im[i], 100 * x, y, this);
x += Math.PI * 1/4 ;
}
}
}
という画像をsinカーブ上に並べる プログラムを作成したのですが、コンパイルすると、
436
名前:
デフォルトの名無しさん
:04/12/15 20:04:50
シンボルを解決できません。
シンボル:メソッド drawImage (java.awt.Image,double,double,Test)
場所 : java.awt.Graphics の クラス
g.drawImage(im[i],100 * x,y,this);
^
エラー1個
というエラーがでてしまいます。どこがおかしいのでしょうか?
ttp://pc5.2ch.net/test/read.cgi/tech/1100559011/859-861
でも聞いたのですが直りません。お願いします。
437
名前:
デフォルトの名無しさん
:04/12/15 20:06:25
>>434
不用意にprivateメンバの保護を剥がすような(ポインタを返すような)事をしなければ大丈夫
438
名前:
デフォルトの名無しさん
:04/12/15 20:07:10
>>435
>>436
Java厨はスレ違いだから他へ逝け。
439
名前:
デフォルトの名無しさん
:04/12/15 20:09:35
標準偏差ってどう求めればいいの?
440
名前:
デフォルトの名無しさん
:04/12/15 20:16:39
>>439
分散の平方根でいいのでは?
441
名前:
デフォルトの名無しさん
:04/12/15 20:16:56
ぐぐれ
442
名前:
デフォルトの名無しさん
:04/12/15 20:17:39
>>439
平均値を出して、各値と平均値の差を二乗し、その和を取り、要素数-1で割り、平方根を取る
443
名前:
デフォルトの名無しさん
:04/12/15 20:25:39
>>437
ありがとうございました。早速使ってみます!
444
名前:
デフォルトの名無しさん
:04/12/15 20:26:35
> 要素数-1で割り
どっから出た
445
名前:
デフォルトの名無しさん
:04/12/15 20:30:01
>>444
高卒?
446
名前:
デフォルトの名無しさん
:04/12/15 20:33:46
>>444
1/nでもいいんだけど、n-1にしておくと
無作為にm個選んだ場合の分散の期待値が
全体の分散と一致するんだよ
447
名前:
デフォルトの名無しさん
:04/12/15 20:48:24
439です
どうもありがとう
エクセルのような関数ってないですか
448
名前:
デフォルトの名無しさん
:04/12/15 20:53:38
>>447
stdev及びstdevp
helpをみると446の話が出てくるはず
449
名前:
デフォルトの名無しさん
:04/12/15 20:54:38
>>447
>エクセルのような関数
なのね
間違ったorz
450
名前:
デフォルトの名無しさん
:04/12/15 20:58:28
>>447
gslとか
451
名前:
デフォルトの名無しさん
:04/12/15 21:00:27
gslはライブラリの名前です
ttp://www.gnu.org/software/gsl/
標準ではないと思う
452
名前:
デフォルトの名無しさん
:04/12/15 21:02:22
ていうかそれぐらい自作しる
453
名前:
デフォルトの名無しさん
:04/12/16 12:34:05
447です。
gsl 英語が読めないので自作します
ありがとうございます。
454
名前:
デフォルトの名無しさん
:04/12/16 13:31:26
template <class T, int A> T aaa()
{
return A + aaa<T, A - 1>();
}
template <class T> T aaa<T, 1>()
{
return 1;
}
エラーが出てコンパイル出来ないのですが
どこが間違えているのでしょうか?
455
名前:
デフォルトの名無しさん
:04/12/16 13:56:20
>>454
ModernC++Designにも書いてある通り、
関数テンプレートはメンバ/非メンバ問わず部分的な特殊化ができない。
(コンパイラはオーバーロードなのか特殊化なのか判別ができない)
オーバーロードを使って解決することも出来るけど、
その程度ならコンパイル時定数として保持するのが吉。
456
名前:
デフォルトの名無しさん
:04/12/16 14:02:54
>>455
ありがとうございます。
これは試しに書いてみただけなので困ることはないんですけど
すっきりしました。
457
名前:
デフォルトの名無しさん
:04/12/16 15:30:52
>>454
関数テンプレートの部分特殊化をエミュレートする方法として
クラステンプレート + 静的関数ってのがあるので,参考までに.
template<class T, int A>
class aaa
{
static T invoke(){ return A + aaa<T, A - 1>::invoke(); }
};
template<class T>
class aaa<T, 1>
{
static T invoke(){ return 1; }
};
aaa<int, 10>::invoke();
458
名前:
デフォルトの名無しさん
:04/12/16 17:53:25
標準入力の入力バッファをクリアする方法ってあるでしょうか?
scanf() するときに、以前に入力されたものが入力バッファに入っていると、
使いにくいプログラムになるので、
scanf() する前に入力バッファをクリアしたいのです。
459
名前:
デフォルトの名無しさん
:04/12/16 18:06:44
>>458
std::cin.readsome()ってのがあったような。
OSのバッファには効かないけど。
460
名前:
デフォルトの名無しさん
:04/12/16 18:10:50
>>458
while (getchar() != EOF); では駄目かな
461
名前:
デフォルトの名無しさん
:04/12/16 18:52:19
それだと、入力にウェイトがかかって無限ループになるだけ。
462
名前:
デフォルトの名無しさん
:04/12/16 19:36:33
直接のC++の相談じゃないんだけど、
C++でコンパイルして、MS−DOSで結果でた、そのウインドウを
そのウインドウ自体のまま画像にするのってどうしたらいいんでしょう??
463
名前:
デフォルトの名無しさん
:04/12/16 19:37:35
>>458
fgets()でめいっぱい読み込んでからsscanf()するのは、そういう問題が
起きないようにするためだ。
但しfgets()で指定した文字数よりも余計に入れられると、これもだめだ
けどね。
464
名前:
デフォルトの名無しさん
:04/12/16 19:53:10
>>462
デジカメで撮る。
465
名前:
デフォルトの名無しさん
:04/12/16 19:59:56
>>462
Alt + PrintScreen
466
名前:
デフォルトの名無しさん
:04/12/16 20:19:06
>>465
ありがとう。
でも、できないみたいけど・・・?
できてるとしたら、画像ってどこに配置されてる?
467
名前:
デフォルトの名無しさん
:04/12/16 20:20:15
>466
板違い。PC初心者板へ池
468
名前:
デフォルトの名無しさん
:04/12/16 20:23:25
>>466
ペイント開いて、Ctrl+V
469
名前:
デフォルトの名無しさん
:04/12/16 20:24:02
>>466
クリップボード
470
名前:
デフォルトの名無しさん
:04/12/16 22:14:14
>>462
つーか、何で画像にしたいの?
471
名前:
デフォルトの名無しさん
:04/12/17 01:20:12
>>462
foo.exe > foo.txt
これで済むんじゃないのん?
472
名前:
デフォルトの名無しさん
:04/12/17 02:21:45
Javaできる、C#できるって人がC++始めたいのに最適な書籍はありませんか?
その前にC覚えろって話しですか?
473
名前:
デフォルトの名無しさん
:04/12/17 03:24:10
その前に先ず日本語だろ。
474
名前:
デフォルトの名無しさん
:04/12/17 03:30:07
>>473
オマエガナー
475
名前:
デフォルトの名無しさん
:04/12/17 03:41:51
>>472
C++Primer
476
名前:
デフォルトの名無しさん
:04/12/17 11:09:28
タスク教えて
477
名前:
デフォルトの名無しさん
:04/12/17 11:44:08
>>476
どの?
478
名前:
デフォルトの名無しさん
:04/12/17 13:34:02
ゲイは澪タスク
479
名前:
デフォルトの名無しさん
:04/12/17 15:05:58
局所静的オブジェクトって最初に通る時に一度だけ初期化されるんですよね。これって
どうやってるんですか? 素直に考えてフラグを持って通るたびに条件分岐?
それとも最初に通った時に自分自身を書き換えるような事をしてるんでしょうか。
480
名前:
デフォルトの名無しさん
:04/12/17 15:08:13
>>479
もちろん実装依存だが、普通は毎回テストしてるはず。
481
名前:
デフォルトの名無しさん
:04/12/17 15:28:37
>>479-480
「最初に通る時に一度だけ初期化」っていうのはそういう意味じゃなくて、
「実行ファイルのロード時に局所変数領域にイミディエイト値もロードされる」
ってこと。
482
名前:
デフォルトの名無しさん
:04/12/17 15:31:50
局所変数領域がなんで最初に確保されるんだ?っていう突っ込みもあろうが、
それはコンパイラが提供するスコープ範囲の機能を実現する都合だけであって、
静的である以上はいつ確保しても同じ。
483
名前:
デフォルトの名無しさん
:04/12/17 15:34:08
>481-482
オブジェクトと変数は違うと思うけど・・・
484
名前:
デフォルトの名無しさん
:04/12/17 15:48:53
当然だとは思うけど
class Hage {・・・};
void hoge() { static Hage hage; }
hogeを複数スレッドから同時に呼び出した場合、hogeの初期化を同期なんてしてくれませんよね?
485
名前:
484
:04/12/17 15:49:33
hogeじゃなくてhageの初期化でした。
486
名前:
デフォルトの名無しさん
:04/12/17 15:50:44
static だからインスタンスは1個
同期も糞もないと思うが
487
名前:
デフォルトの名無しさん
:04/12/17 15:55:20
staticメンバはmain()関数の実行を開始する前に既に初期化を終えているんだっけ?
488
名前:
デフォルトの名無しさん
:04/12/17 16:11:45
>>486
関数内のstatic変数は最初に実行されたときに初期化されると規格で決まってるらしい。
489
名前:
デフォルトの名無しさん
:04/12/17 17:00:31
>>487
通常のローカル変数同様、変数宣言の字面上の位置で初期化される。
例えば int f(int a) { static b = a; return b; } があった場合、
b には初回呼び出し時の引数が代入され、以後ずっと変化しない。
>>486
一個だからこそ同期うんぬんという話が出てくるように思えるが・・・
490
名前:
デフォルトの名無しさん
:04/12/17 17:04:38
int f(int a) { static const b = a; return b; }
これなら大丈夫
491
名前:
デフォルトの名無しさん
:04/12/17 20:13:54
もちろん実装依存だとは思うけど
VC++,bcc,gccの3つは
初期化処理が必要な、関数内のstaticデータ
int f() { static int n = atoi("123"); return n; }
は、単純にフラグを使って
実行されるたびに初期化されたかを判定していて
同期処理は無しでした。
492
名前:
デフォルトの名無しさん
:04/12/17 22:40:50
C++ で行列クラスを作っていて、転置行列を返す関数を実装したいと思っています。
その場合、
class Matrix {
...
Matrix Transpose(void) const;
};
のような設計で問題ないでしょうか?
たとえば、
Matrix a;
Matrix b = a.Transpose()
とした場合、Matrix オブジェクトは一度しか生成されていない (それが b)
ということが保証されるでしょうか?
493
名前:
デフォルトの名無しさん
:04/12/17 22:48:20
いんにゃ
普通はコピーコンストラクタでコピーされる
設計は問題ないと思うけどね
494
名前:
デフォルトの名無しさん
:04/12/17 22:49:08
敢えて言うなら返値はconst Matrixの方がいいと思う
495
名前:
デフォルトの名無しさん
:04/12/17 22:50:32
>>493
そうですか。
やはり無駄なコピーを抑えたければ、
void Transpose(Matrix* m) const;
みたいにしないといけませんか。
>>494
え?その必要はないと思いますけど。。。
496
名前:
デフォルトの名無しさん
:04/12/17 22:52:48
>>494
参照でもないのに何で const ?
497
名前:
デフォルトの名無しさん
:04/12/17 22:54:04
一時オブジェクトへの代入を禁止するため?
498
名前:
デフォルトの名無しさん
:04/12/17 22:57:48
何も考えてないんじゃ?
499
名前:
デフォルトの名無しさん
:04/12/17 22:58:35
C++ にこんな仕様があると便利かも。
仮にキーワード noncopy を導入して
class Matrix {
noncopy Matrix Transpose(void)
{
noncopy Matrix m;
... m を転置行列としてセットアップ ...
return m;
}
};
と記述すると、戻り値の Matrix が引数の最後にポインタとして
渡されたかのように処理される。
そのポインタを受け取るのが、実装における noncopy 宣言された変数。
500
名前:
デフォルトの名無しさん
:04/12/17 23:02:33
>>493
実際は大抵最適化でコピーしないようになるし、規格だってそういう動作にしても良いと書いてあるはず。
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.