■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part21
251 名前:デフォルトの名無しさん :03/07/18 18:20
perlとかのsplitみたいにstringを複数のstringに分割する関数はないですか?

252 名前:デフォルトの名無しさん :03/07/18 18:25
>>251
boost::tokenizerがいいと思う。
#include <boost/tokenizer.hpp>だけで使えるし

253 名前:デフォルトの名無しさん :03/07/18 18:27
>>251
split みたいなのは知らんなぁ。
文字列の切り出しは substr くらいかな?

あとはここでも読んでちょ。
http://www.wakhok.ac.jp/~sumi/stl/index.html

254 名前:デフォルトの名無しさん :03/07/18 18:32
>>252
> #include <boost/tokenizer.hpp>だけで使えるし
だと良いね

255 名前:デフォルトの名無しさん :03/07/18 18:40
>> #include <boost/tokenizer.hpp>だけで使えるし
>だと良いね

良いよぉ。まさかお前C++を使っていてboostを
構築はともかくインストールしていない訳じゃああるまい

256 名前:デフォルトの名無しさん :03/07/18 18:42
その言い訳は苦しい

257 名前:デフォルトの名無しさん :03/07/18 18:44
まあインストールしていないのは英語が分からない奴くらいだろうな

258 名前:デフォルトの名無しさん :03/07/18 18:48
言えば言うほど見苦しい

259 名前:デフォルトの名無しさん :03/07/18 18:49
芳ばしい臭いがするので、ちょっと晒し上げておこう

260 名前:デフォルトの名無しさん :03/07/18 18:49
>>257
コンパイラがしょぼいのも無理ぽ。

261 名前:デフォルトの名無しさん :03/07/18 18:50
むしろラインセンス

262 名前:デフォルトの名無しさん :03/07/18 18:52
ちょっと指摘されただけで英語云々持ち出さんでも・・・
「boostにはこんなのあるよ」の一言を忘れただけなんだから次回から気をつければいいだけだろ・・・

263 名前:デフォルトの名無しさん :03/07/18 18:56
>>262
なんだお前は英語が読めないのか?
>「boostにはこんなのあるよ」
そう言う内容なのは明らかだろ。お前は読解力ゼロ

264 名前:デフォルトの名無しさん :03/07/18 18:59
boostつかうと保守に問題が出るよな。

265 名前:デフォルトの名無しさん :03/07/18 19:01
英語厨のおでましか

266 名前:デフォルトの名無しさん :03/07/18 19:01
>>264
お前は今後一切使うな

267 名前:デフォルトの名無しさん :03/07/18 19:04
>>263
読解力無いのはオメーだろ。
内容が明らかなのとboostがインストール済みかどうかはまったく別問題だ。
boostにケチはつけんが、boostスレじゃない場所でboostがインストール済みであることを前提に話す奴は逝ってよい。
相手は初心者かもしれん。

268 名前:デフォルトの名無しさん :03/07/18 19:05
必死なのがいるなぁ。俺も晒し上げておこう。上から2スレ目だけど。

269 名前:デフォルトの名無しさん :03/07/18 19:09
まぁ煽り文句で「英語が読めないのか」は王道だよな

270 名前:デフォルトの名無しさん :03/07/18 19:32
どっかの会社が、boostを商用ライブラリとして出してくれないかなぁ

271 名前:デフォルトの名無しさん :03/07/18 19:39
>>268
ワロタ

272 名前:デフォルトの名無しさん :03/07/18 20:39
つーか、boostのライセンスのどこが問題なんでしょう?
regex使ったら、使ったこと書いてね!!
以外になんか不満あるようなもんあるんでしょうか?

273 名前:デフォルトの名無しさん :03/07/18 20:47
完全にboostスレ向きの質問だと思うが

274 名前:デフォルトの名無しさん :03/07/18 21:37
そしてboostスレでもライセンスの話題は何度か出ている。

275 名前:デフォルトの名無しさん :03/07/18 23:35
stringstream の中身をクリアするにはどうしたらいいんですか?
clear()を呼んでも残っているみたいなんですが。

276 名前:デフォルトの名無しさん :03/07/18 23:56
>>275
たぶんそれは、basic_ios::clear()を呼んでいる。
中身をクリアするってのはないけど、
str(string const&)で文字列を割り当てることができるので、
空の文字列を割り当てればよい。つまり
str(string());

277 名前:デフォルトの名無しさん :03/07/19 00:37
>>275
eraseしろ!!

>>273
boostスレではライセンスに(商用でも)問題ない(らしい)という結果だったはず。
でも、問題があるよといわれれば、どこが問題なのかやはり気になるもんでね。

278 名前:デフォルトの名無しさん :03/07/19 00:51
ttp://www.tietew.jp/cppll/archive/5777


279 名前:277 :03/07/19 01:09
>>278
大変ありがたいのだが、すでにそのページは拝見しております。
私が気になるのは、問題があるという人は何をもってしてそう判断したのか?ということです。
新しい発見(?)したとか。何かの特許に抵触したとか・・・。

280 名前:デフォルトの名無しさん :03/07/19 01:46
>>279 英語を読めない人の妄言です。

281 名前:デフォルトの名無しさん :03/07/19 03:31
C++自体の質問なのでスレ違いかもしれませんが、よろしければご教授ください。


A.cppというファイルからB.hとC.hをIncludeして使おうと思っています。
C.hではクラスの宣言をしています。
そして、A.cppではそのインスタンスを作成しています。

しかし、B.hで作成したインスタンスのメンバーを読み込もうとすると、
コンパイル時に、そのインスタンスが『未定義』とされエラーがでてしまいます。
その後、A.cppでインスタンスを作成する場所でも『再定義』というエラーがでるので、
きっと、宣言の順番の問題なんだろうと思うのですが、何かよい解決策はないでしょうか。

わかりにくい文章ですみませんが、よろしくおねがいします。

282 名前:281 :03/07/19 03:34
すみません。
最初にこのスレを見つけられずに、他のスレッドに書き込もうとしていたので、
その時書いた文章の残骸が残ってしまいました。
スレ違い云々は気にしないでください。
申し訳ありませんでした。

283 名前:デフォルトの名無しさん :03/07/19 04:04
いつもいつも思うんだが
質問したいならageろ!
よろしくお願いしたいならageろ!
あほか。なにがメール欄に「sage」だよ。
きどってんじゃねーよ。

284 名前:デフォルトの名無しさん :03/07/19 04:05
B.h には何が書いてあるの?

285 名前:デフォルトの名無しさん :03/07/19 04:05
癖でsageちゃうことはよくあるよね。

286 名前:デフォルトの名無しさん :03/07/19 04:20
yes

287 名前:デフォルトの名無しさん :03/07/19 04:23
いつもいつも思うんだが
スレ違いの事を書き込むならsageろ!
晒し上げじゃないならsageろ!
あほか。なにがメール欄に「nuge」だよ。
荒らしてんじゃねーよ。

288 名前:デフォルトの名無しさん :03/07/19 04:25
代わりに上げてやってるんじゃないか。
しかもアドバイスしてさ。
親切じゃない。

289 名前:デフォルトの名無しさん :03/07/19 04:31
余計な御世話じゃないの?
漏れなら、アドバイスだけして、本人に揚げさせる

290 名前:デフォルトの名無しさん :03/07/19 04:38
まぁ、こういうどうでもいいレスで
ちゃんとしたレスを埋もれさせるのが一番不本意なので、
ちゃんとしたレスにアンカーを貼っておこう。

質問 >>281

レス >>284



291 名前:デフォルトの名無しさん :03/07/19 05:32
余計な御世話

292 名前:デフォルトの名無しさん :03/07/19 11:49
クラス内で定義されている名前を
クラス外で::なしで使うにはどうすればよいですか?
class A
{
public:
typedef int type;
static const size_t SIZE;
};
みたいなときに
A::type i; size_t n = A::SIZE;
とかではなく
type i; n = SIZE;
とか書く方法はないでしょうか。
using A::type;
とかはだめみたいです。

293 名前:デフォルトの名無しさん :03/07/19 11:51
クラス外で定義しろ

294 名前:292 :03/07/19 11:56
>>293
ごめんなさい。よくわかりません。

295 名前:デフォルトの名無しさん :03/07/19 11:57
>>292
出来るが、そんなことして欲しくないので教えない。

296 名前:デフォルトの名無しさん :03/07/19 12:01
>>292
typedef A::type type;
const int SIZE=A::SIZE;

と事前に書いとく

297 名前:292 :03/07/19 12:01
>>295
いじわるしないでぇ
そんなことして欲しくない理由と共に教えてください。
ちっちゃな翻訳単位ローカルに使うんだったら
そんなに悪くないとおもうんですが。

298 名前:デフォルトの名無しさん :03/07/19 12:02
何のためにそんな事するのか小1時間・・・

299 名前:292 :03/07/19 12:03
>>296
なるほど。っていうかそんなことも思いつかん褐炭か>俺
ありがとうございます。

300 名前:デフォルトの名無しさん :03/07/19 12:04
やるのかよ。
いや、別にいいけどさぁ・・

301 名前:292 :03/07/19 12:05
いやぁん♥
冷たくしないでぇ

302 名前:デフォルトの名無しさん :03/07/19 12:14
(c +_+) なんだかなあ……

303 名前:292 :03/07/19 12:16
はじめて自分の偽者とであいました。
こんにちは>>301

304 名前:281 :03/07/19 13:10
>>281 です。

>>284
わかりにくくてすみません。
B.hでは別のクラスが宣言されています。
簡単に書くと、こんな感じです。

[B.h]
class CHuman
{
int Speed;
void SetSpeed(void)  { Speed = Ball.Spin; } ●1
};
-------------------
[C.h]
class CBall
{
int Spin;
};
-------------------
[A.cpp]
#include "B.h"
#include "C.h"
CHuman tanaka;
CBall Ball; ●2
main()
{ tanaka.SetSpeed(); }

●1が、未定義のエラーが出るところ、●2が再定義のエラーが出るところで、
それぞれの変数はpublicで宣言されていて、コンストラクタで数値が代入されていると考えてください。

たびたびの長文すみませんが、よろしくおねがいします。

305 名前:デフォルトの名無しさん :03/07/19 13:12
そりゃ出るわな

306 名前:デフォルトの名無しさん :03/07/19 13:13
>>281
ポインタで宣言してコンストラクタで new すれば?

307 名前:デフォルトの名無しさん :03/07/19 13:14
>>304
B.hで
#include "C.h"
extern CBall Ball;
とするか、SetSpeed の実装をcppに分ける。

308 名前:デフォルトの名無しさん :03/07/19 13:16
印来るドのジュンバン

#include "C.h"
#include "B.h"

CBall Ball; はいらない。



と思う漏れは実はC++なんてよく知らないのだが(w


309 名前:デフォルトの名無しさん :03/07/19 13:21
継承したクラスのコンストラクタについての質問です。
CParentと、それを継承したCInheritedがあります。
CInheritedのコンストラクタで、
1.
CInherited::CInherited():CParent(){
}
2.
CInherited::CInherited(){
  CParent::CParent();
}
は何が違うのでしょうか。

310 名前:デフォルトの名無しさん :03/07/19 13:33
>>304
#include "C.h"
CBall Ball;
#include "B.h"
CHuman tanaka;
こんなかんじにしたら


311 名前:デフォルトの名無しさん :03/07/19 13:36
>>309
初期化の優先順位が違う。
こんな感じ

312 名前:デフォルトの名無しさん :03/07/19 13:37
>>281
もしやとは思うが、
ヘッダを
#ifndef HOGE
#define HOGE
//ここに本文
#endif
でくくる方法は知ってるよな?

313 名前:デフォルトの名無しさん :03/07/19 13:38
プリプロセッサで再定義を防げばインクルードの順番なんて関係ないはずだぞ。

314 名前:281 :03/07/19 13:47
>>312
すみません、知りませんでした。
調べてみる事にします。

結局>>307のやり方でやってみたら、なんとかできました。
こたえてくださったみなさん、ありがとうございました。

315 名前:デフォルトの名無しさん :03/07/19 13:50
>>309
struct A{
A(){
std::cout<<this<<" A"<<std::endl;
}
};

struct B : public A{
B():A(){
std::cout<<this<<" B"<<std::endl;
}
};
/*
struct B : public A{
B(){
A::A();
std::cout<<this<<" B"<<std::endl;
}
};*/

Bの定義を入れ替えて実行結果を見てみろ。

>>311はアホ

316 名前:デフォルトの名無しさん :03/07/19 13:55
CParent::CParent(); は一時オブジェクトってこった。


317 名前:デフォルトの名無しさん :03/07/19 14:29
標準C++ではコンストラクタには名前がないから
CParent::CParent()などとして呼ぶことはできない

318 名前:デフォルトの名無しさん :03/07/19 15:54
map<int,int> hoge;
return hoge[0];

とかやったら、intにコンストラクタはないから返り値は未定ですよね。
int型とかにコンストラクタをつけたい場合は新しくクラスを作るしかないですか?

319 名前:デフォルトの名無しさん :03/07/19 16:15
>>318
intはデフォルト初期化で0になるので返値は0です。

320 名前:デフォルトの名無しさん :03/07/19 17:12
template<typename Iter>
class Value_iter : public Iter
{
public:
    Value_iter(const Iter &it): Iter(it){}
    typedef typename Iter::value_type::second_type value_type;
    value_type operator*()
    {
        return Iter::operator*().second;
    }
    value_type operator->()
    {
        return Iter::operator->().second;
    }
};

こういう感じで、一部の関数を上書きするために公開継承を使っても問題はないでしょうか。
std::map<A,B>::iterator 辺りを渡されることを期待するテンプレートです。

321 名前:320 :03/07/19 17:15
考えてみれば operator-> は要らなかった…

322 名前:デフォルトの名無しさん :03/07/19 17:26
>>318

int n = int();  // デフォルトコンストラクタ
          // 0で初期化
assert(n == 0);


323 名前:デフォルトの名無しさん :03/07/19 17:49
>>320
ほとんどの場合、問題「ある」。例えばその例なら、

Value_iter<map<key,val>::iterator> i;
val x = *i++; // error

324 名前:デフォルトの名無しさん :03/07/19 18:17
>>323
ああ、なるほど。理解しました。有難うございました。

325 名前:デフォルトの名無しさん :03/07/19 19:17
クラスメンバのconstな関数ポインタ変数って初期化できんのー?

class CMoe {
const void (*pFunc)();
public:
CMoe(void (*func)()):
pFunc(func) // だめぽ
{
}
};

326 名前:デフォルトの名無しさん :03/07/19 19:38
void (* const pFunc)();
だろ

327 名前:デフォルトの名無しさん :03/07/19 19:42
const void型って何だ(笑)

328 名前:デフォルトの名無しさん :03/07/19 21:00
>>323
何ゆえ *i++ ←(increment operator)関数どこ?
>>320
意味ない。何のためのiteratorがあるのかわかる?
>>327
const void はそのままじゃんか。何か?

329 名前:デフォルトの名無しさん :03/07/19 21:51
>>328
キミ、会話の意味がわかってないなら黙ってた方がいいと思うよ。

330 名前:Error 改行が多すぎます :03/07/19 22:19
>>325
#include <iostream>
using namespace std;
const void test(){
    cout << "test" << endl;
}

class CMoe{
protected:
    const void (*pFunc)();
public:
    CMoe(const void (*func)());
    void Do();
};

CMoe::CMoe(const void (*func)()){
    pFunc = func;
}

void CMoe::Do(){
    (*pFunc)();
}

int main(){
    CMoe moe(test);
    moe.Do();
    return 0;
}



331 名前:325 :03/07/19 22:20
>>326
なーる。サンクス!

スマソ、も1つ。
class CHoe {
 // うにょにょ〜(operator=なし)
};
int main() {
 CHoe hoe;
 vector<CHoe> Moe;
 Moe[0] = hoe;  // CHoeにoperator=が定義されてない。
 return 0;
}

ちゃんと定義しないとダメ?

332 名前:325 :03/07/19 22:24
>>325
そう、まさにそれがやりたかった。ありがと。

333 名前:デフォルトの名無しさん :03/07/19 22:44
>>332


334 名前:328 :03/07/19 23:36
>>329
意味わかんないかな?
こんなのは使わんけど。
#include <iostream>
#include <map>
#include <string>

template<class T,class U>
struct TorU : std::map<T,U>::iterator
{
  typedef typename std::map<T,U>::iterator base;
  TorU(std::map<T,U>& m) : base(m.begin()){}
  operator T(){ return base::operator ->()->first; }
  operator U(){ return base::operator ->()->second; }
};

int main()
{
  using namespace std;
  map<int,string> cs;
  cs.insert(pair<int,string>(0,"ring 0")) ;
  cs.insert(pair<int,string>(1,"ring 1")) ;
  TorU<int,string> tu(cs);
  while(tu != cs.end()){
    cout<<(int)tu<<' '<<(string)tu<<'\n';//castめんどくせー
    ++tu;//ここがポイントなのよ
  }
}


335 名前:デフォルトの名無しさん :03/07/19 23:44
>>334 黙ってた方がいいと思うよ。

336 名前:const void??? :03/07/19 23:49
誰か>>328を日本語に訳してくれないか?

337 名前:328 :03/07/20 00:12
沈黙・・・・・・

338 名前:328 :03/07/20 00:45
なんだconstのほうかよ
これで納得いかないか?
#include <iostream>

template<class T> struct Imitation;

template<>
struct Imitation<void>
{ static void fun(){ std::cout<<"Variant"<<std::endl; } };

template<>
struct Imitation<const void>
{ static void fun(){ std::cout<<"Constant"<<std::endl; } };

int main()
{
  Imitation<const void>::fun();
  Imitation<void>::fun();
}



339 名前:328 :03/07/20 00:51
おおっと
>>320よみなおしたら意味違ったすまん。

340 名前:デフォルトの名無しさん :03/07/20 01:53
むしろ>>332>>325を日本語に訳して欲しいわけだが…

341 名前:331 :03/07/20 06:34
ごめ。
単にCHoeのメンバがconstだったり参照だったりしてただけだった。
代入演算子が生成されないんだね。

342 名前:_ :03/07/20 06:42
http://homepage.mac.com/hiroyuki44/

343 名前:デフォルトの名無しさん :03/07/20 15:29
template <class T> void foo(T){}
template <class T> struct bar{};
template <class T> void foo(bar<T>){}

int main(){
bar<int> b;
foo(b);
}

以上のプログラムがコンパイル通りません。
そこで以下のようにしたら無事とおりました。下のプログラムはC++的に正しいですか?

template <class T> void foo(T){}
template <class T> struct bar{
friend void foo(bar<T>){}
};

int main(){
bar<int> b;
foo(b);
}



344 名前:デフォルトの名無しさん :03/07/20 15:31
うわー、びっくりした。

345 名前:デフォルトの名無しさん :03/07/20 15:34
static 変数をメンバに持つクラスから、幾つかのクラスを派生させ、
それぞれの派生クラスのインスタンスを作った場合、
ベースクラスから継承した一つの static 変数をそれらで共有することになりますか?
厨でスマソ。

346 名前:デフォルトの名無しさん :03/07/20 15:37
>>345
なる

347 名前:デフォルトの名無しさん :03/07/20 15:39
>>343
上の通るなあ。bcc32

348 名前:343 :03/07/20 15:42
>>347
VC7では通らなかったのですが、、、

上の例は関数の部分的特殊化に当たるから不可、なのではないのですか?

349 名前:345 :03/07/20 15:42
>>346 つまらない質問に付き合って下さって、ありがとうございます。

350 名前:デフォルトの名無しさん :03/07/20 15:53
>>348
ISOのドキュメントによると関数テンプレートのオーバーロードに相当して
より特殊化したものが選ばれる。事になっていて問題ないようだけど…

より詳しい人よろしく

351 名前:デフォルトの名無しさん :03/07/20 16:35
>>348
関数があいまいてVC7(VC6も?)はエラーがでるから
おしえてあげればいいのでは?
foo<int>(b);
しってたらごめん。

352 名前:343 :03/07/20 17:09
>>350
なるほど thx!
ってことはVC7はそこラ変がまだまだだったってことでしょうか

>>351
明示的に指定せずに上手くいく方法を探してます。すいません。

353 名前:デフォルトの名無しさん :03/07/20 20:41
void func()関数で宣言したclassHogeクラスのオブジェクトcHogeを
グローバル変数に渡したいのですが、どのようにすればよいのでしょうか?
(ローカル変数のスコープをグローバルに変換したい)

自分がやってみたのは以下のとおりです。
おかしな点があったらご指摘頂けないでしょうか。

// グローバル
classHoge* global_ptr_cHoge;

//
void func()
{
  classHoge cHoge; // オブジェクト作成
  global_ptr_cHoge = &cHoge; // オブジェクトのアドレスをグローバルに格納
  test(global_ptr_cHoge); // テスト用関数
}

void test(classHoge* ptr_cHoge)
{
  ptr_cHoge->Method();
  ...
}

354 名前:デフォルトの名無しさん :03/07/20 20:52
>>343
VC7.1では上ので通る

355 名前:デフォルトの名無しさん :03/07/20 20:56
>>353
funcを抜けてからアクセスしなければ大丈夫

356 名前:デフォルトの名無しさん :03/07/20 20:58
>>353
> ローカル変数のスコープをグローバルに変換したい
ここがおかしい。

357 名前:デフォルトの名無しさん :03/07/20 20:59
>>353
諦めてグローバルにインスタンス置いと毛

358 名前:353 :03/07/20 21:11
>>355
func外からも使いたかったんですが、
funcを抜けるとやっぱりまずいですよね・・・

>>356
う、確かに・・・

>>357
はい、そうしときます。
変な質問してしまいすみませんでした。



359 名前:デフォルトの名無しさん :03/07/21 03:56
みんなちゃんと理由を説明してやれよ。かわいそうに。
>>353
func を抜けたら func の auto 変数の cHoge は destruct されるから
それ以降に触るのは危険。
というか cHoge を func 内の static にしておけばいいんだけど
それだとやりたい事と意味があっているかどうかはわからん。

360 名前:デフォルトの名無しさん :03/07/21 11:40
>>359
かわいそうも何も明らかに普通でない質問だろう。
「変な質問」と自覚していて、それでもやりたいというならば、
それこそその理由を述べるべきだ。


361 名前:sage :03/07/21 14:31
//
void func()
{
  global_ptr_cHoge = new classHoge; // オブジェクトのアドレスをグローバルに格納
  test(global_ptr_cHoge); // テスト用関数
}


362 名前:デフォルトの名無しさん :03/07/21 15:09
template <class T> struct bar;

classと指定してるとvc6だと組み込み型の宣言ができない。
組み込み型も宣言したいときはtypenameで指定すればよかったと思われ。

template < typename T> struct bar;

もう解決してるかね?

363 名前:362 :03/07/21 15:12
上のレスは
>>343 へのレスですー。

2重カキコすまそ。

364 名前:デフォルトの名無しさん :03/07/21 15:27
using namespace std;
とネームスペースを一括?指定するのはよくないことなの?

365 名前:デフォルトの名無しさん :03/07/21 15:30
>>364
俺は .cpp でやるんなら別にいいと思うが、
.h でやるのはお行儀悪いと思う派。

366 名前:デフォルトの名無しさん :03/07/21 15:53
そのことで前揉めてたな
モミモミ

367 名前:364 :03/07/21 15:57
>>365
それはなぜなんでしょう?

368 名前:デフォルトの名無しさん :03/07/21 16:02
>>367
名前のバッティングを防ぐためにわざわざnamespaceに入れたのに、それをあえて同じ名前空間にインポートして無意味にしてしまうusingを、複数のソースファイルで共有されうるヘッダーファイルで使うのは問題だろ?

369 名前:デフォルトの名無しさん :03/07/21 16:10
そういう理由なら.cppでやるのも同じように問題な気もするが・・・
(複数のソースファイルから共有されるという点は別だけど)

370 名前:デフォルトの名無しさん :03/07/21 16:21
>>369
>複数のソースファイルから共有されるという点は別だけど
これは重要な違いだと思うがね。
まぁ、それでも using が嫌いという人がいるのも分かるし、
usign 使わないのを止(と)めようとは思わんが。

371 名前:デフォルトの名無しさん :03/07/21 16:24
>>369
> (複数のソースファイルから共有されるという点は別だけど)
大きなポイントじゃないすか? 衝突の可能性を広い範囲に作っちゃうのは
やっぱ怖いというか、安心できないですよ。
自分(cppファイル)の中だけで「曖昧だ」とかコンパイラに怒られるだけなら
屁でもないですから。

些細なことかもしれないけど、この程度のことで未来に何かを課したくはないです、俺は。

372 名前:デフォルトの名無しさん :03/07/21 16:26
using 論争ですが、
ヘッダファイルは公共の場所、
実装ファイルは家の中などのプライベートな場所、
っていう雰囲気があると思う。

家の中で素っ裸になるのは個人の自由だけど、
表でやったらタイーホの予感。

実装で using を使って怠けるのは自由だけど
ヘッダで using を使うのは(明日の自分も含めた)他人への迷惑をかえりみない行為。


373 名前:デフォルトの名無しさん :03/07/21 16:40
かわいいおにゃにょこの裸ならお外でも・・・・・ハァハァ

374 名前:デフォルトの名無しさん :03/07/21 16:46
>>373
つまりそれは std と boost だけはヘッダで using してもいいという事ですか?

375 名前:デフォルトの名無しさん :03/07/21 16:52
>>374
ネタです

376 名前:デフォルトの名無しさん :03/07/21 17:09
>>375
いや、「わたしかわいいおにゃにょこだからだいじょうぶね♪」といって
ネカマデブ、ババア、破壊的ブスどもが裸で街を跳梁跋扈する闇の時代がくるという予言です。


377 名前:デフォルトの名無しさん :03/07/21 18:07
>破壊的ブス

ワラタ

378 名前:デフォルトの名無しさん :03/07/21 18:44
>>369
あほ。全然違うだろ。

379 名前:378 :03/07/21 18:45
あ、>>369の言いたいことが分かった。
普段
#include "hoge.cpp"
とかやってるだろ?1から勉強し直した方がいいぞ。

380 名前:デフォルトの名無しさん :03/07/21 19:24
久しぶりだな、半角?くん。

381 名前:デフォルトの名無しさん :03/07/21 19:32
>>380
久しぶりだな、半角?くんを半角?くんと呼ぶお前。

つーか半角で?を打つ奴が一人しか居ないと考え
決め付けるお前の浅はかさには閉口してしまうよ?

382 名前:デフォルトの名無しさん :03/07/21 19:40
ヴァカが紛れ込んできたようですね

383 名前:デフォルトの名無しさん :03/07/21 19:44
どうでもいいけどどこに半角?があるんだ?誤爆?

384 名前:デフォルトの名無しさん :03/07/21 19:45
>>2だな

385 名前:>>378 :03/07/21 19:47
天然?

386 名前:デフォルトの名無しさん :03/07/21 20:19
>>364
スコープ内でusing使ってください。
あと名前のバッティングなんて別に怖いもんでないような?
エラーが出たら一括に名前付けて置換すりゃーいいんだし。

387 名前:デフォルトの名無しさん :03/07/21 20:26
>>385
>>369読んで出直して来い。

>>384
ありがと。
そんな2週間も前のやつにレスしてたのか。


388 名前:デフォルトの名無しさん :03/07/21 20:29
??????????

389 名前:デフォルトの名無しさん :03/07/21 20:32
>>386
シグネチャがほとんど同じだどエラーが出なくて通ってしまい、
挙動のおかしさ悩むこともある

390 名前:デフォルトの名無しさん :03/07/21 21:38
かなりお馬鹿な質問ですが、
C++で作った関数をC言語プログラムに組み込む方法はないでしょうか?

391 名前:デフォルトの名無しさん :03/07/21 21:41
絵x手rん ”C"

392 名前:デフォルトの名無しさん :03/07/21 22:58
>>390
#if cplusuplus
extern "C"
{
#endif
 void MyCPlusPlusFunc(void);
#if cplusuplus
}
#endif

どぞー

393 名前:デフォルトの名無しさん :03/07/21 23:30
マングリ返し

394 名前:デフォルトの名無しさん :03/07/21 23:52
>>392
__cplusplus をデフォルトでサポートしてくれているコンパイラが殆どなので、
__cplusplus と書いておいた方が楽っぽ。
あと、#ifdef な。

395 名前:デフォルトの名無しさん :03/07/21 23:58
>>394
__cplusplusは規格で必要とされている。

396 名前:デフォルトの名無しさん :03/07/22 00:44
>>395
あ、ホンマや。
昔は規格外だったと思ったけど。
199711L で定義されてるってことは、
1997 年 11 月の規格で導入されたんだろうな。

397 名前:デフォルトの名無しさん :03/07/22 01:14
C++ のソースファイルの拡張子が .cpp とか .cxx とか色々ある歴史的理由を教えて下さい。

398 名前:デフォルトの名無しさん :03/07/22 01:48
#ifdef じゃあ
C で
#define __cplusplus (0)
と定義されたらやヴぁくない?

399 名前:デフォルトの名無しさん :03/07/22 02:06
>>398
#define __cplusplus (1)
と定義され(ry

400 名前:デフォルトの名無しさん :03/07/22 02:14
#ifdef じゃあ

エラー

401 名前:390 :03/07/22 09:55
#if __cplusplus
#endif

でできました。ありがとうございます。



402 名前:デフォルトの名無しさん :03/07/22 13:44
普段Javaですが、都合でC++初めて使っているのですがかなり参ってます。
例えばデストラクタの使用で、

...
Test::~Test(){
printf("%d",0);
}
...
Test *t;
t = new Test();
for(int i=0;i<100;i++) delete(t);

これで0が100回出力されてしまうのが謎です。
tが指しているオブジェクトは1回deleteを行った時点で
破棄されているはずじゃないのでしょうか?
どうして100回デストラクタが働くのでしょう?

403 名前:_ :03/07/22 13:45
http://homepage.mac.com/hiroyuki44/

404 名前:デフォルトの名無しさん :03/07/22 13:52
C++では、ポインタの指しているオブジェクトの生き死にには、
自分で責任を持たないといけない。以上

405 名前:デフォルトの名無しさん :03/07/22 14:11
クソ言語だな。おい。

406 名前:デフォルトの名無しさん :03/07/22 14:12
( ´,_ゝ`) プッ

407 名前:デフォルトの名無しさん :03/07/22 14:16
boost::shared_ptrとかstd::auto_ptrとかあるからその辺使えばdeleteのタイミングをあまり気にする必要なし。
例外対策にはほぼ確実に必要だし。


408 名前:402 :03/07/22 14:43
>>404,407
えーと、つまり
こんなふうにdelete100回書いちゃっても問題ないのでしょうか?
それともこの場合たまたま0が100回出力されただけで
2回目以降は偶然って考えのほうがよいでしょうか?

うーん、Javaよりむずい。

409 名前:デフォルトの名無しさん :03/07/22 14:45
>>408
> こんなふうにdelete100回書いちゃっても問題ないのでしょうか?

大問題。

410 名前:デフォルトの名無しさん :03/07/22 14:50
同じポインタを複数回deleteした場合、どうなっても知らない。ただそれだけだ。
それがいやならdelete後に0でも代入しておくという手もないではないが、
複数回deleteが呼ばれうるという時点で設計が間違ってる。

メンバ変数に触らない非仮想のメンバ関数はthisの値がどうなっていてもエラー
にならないことが多いから動いているように見えただけ。

411 名前:デフォルトの名無しさん :03/07/22 14:55
デストラクタを呼ぶ部分はともかく、
メモリ解放処理がなぜエラーにならないか無気味だな。

412 名前:デフォルトの名無しさん :03/07/22 16:44
template<typename T>
inline void safe_delete(T*& ptr ){
delete ptr;
ptr = 0;
}



413 名前:デフォルトの名無しさん :03/07/22 16:49
オブジェクトは1度目のdeleteで破棄された(無くなった)
 ↓
デストラクタも無くなった
 ↓
無くなってるはずのデストラクタが呼ばれる
 ↓
なんで???

って疑問なんじゃないの?

414 名前:デフォルトの名無しさん :03/07/22 17:16
>>413
デストラクタなんぞ、
メンバ変数(仮想関数テーブル含む)使わん限り
普通の関数と大して変わらんじゃんかよ。

415 名前:402 :03/07/22 17:38
>>413
そういうことです。

>>414
なるほどと思って
別の関数を作ってdeleteした後に呼んでみた、すなわち

for(int a=0;a<10;a++)
delete(t3);
printf("%d\n",t3->test2());

これでもエラー起きないんだね。
deleteってのは振る舞いを未定義にするだけで
解放するって認識はやめたほうがいいのかな・・・

416 名前:デフォルトの名無しさん :03/07/22 17:42
>>415
違う
一度削除されたオブジェクトへのアクセスは未定義だから、
プログラムがクラッシュすることもあれば、
突然ディスプレイが火を噴くこともある。
アドレス帳の全メアドに添付ファイルつきメールを送りつけることもある。

もちろん一見うまく行っているように見えることもある。

417 名前:デフォルトの名無しさん :03/07/22 17:43
複数回deleteした時の振る舞いが未定義なんじゃないの?
資源の解放という認識でいいと思うけど。

418 名前:416 :03/07/22 17:45
紛らわしくてスマン
「削除されたオブジェクトへのアクセス」は>>417の意味

419 名前:デフォルトの名無しさん :03/07/22 17:49
正直、一見何事もないかのように見えるのが一番やっかい。

420 名前:デフォルトの名無しさん :03/07/22 17:52
俺は同じメモリを100回deleteしてみる奴始めてみた。
動作を確認してみようという姿勢は悪くは無いが。

421 名前:デフォルトの名無しさん :03/07/22 17:56
死体に鞭打つような真似はやめようよ...。> delete 100 回

422 名前:デフォルトの名無しさん :03/07/22 17:58
100回加熱殺菌とか

423 名前:デフォルトの名無しさん :03/07/22 18:06
ただ、deleteによって対象のポインタがNULLになると勘違いしてる奴は沢山いる。
こういう奴は「NULLをdeleteしても問題ないから」と考えるかもしれない。

424 名前:デフォルトの名無しさん :03/07/22 18:13
たまたま開放したままで誰もヒープをいじってないから
残骸のアドレスは空き領域で、再度開放は単にこっそり失敗してるだけだろうな。
デストラクタ自体は単なる関数だからオブジェクトがいなくなっても消えないが。

...もしデストラクタが仮想関数だと少し事情が違うかもしれないが
これも呼び出し時点で対象オブジェクトのクラスが明らかな場合は
最適化で直接呼び出しになってるかもしれんか。


425 名前:デフォルトの名無しさん :03/07/22 18:17
template<class T>void del(T *&p){delete p;p=0;return;}

426 名前:デフォルトの名無しさん :03/07/22 18:20
メモリ管理嫌ならJava使え。

427 名前:デフォルトの名無しさん :03/07/22 18:33
safe_deleteみたいに2回目以降も安全なのと、
2回目以降は例外投げてくれるのとどっちがいい?

前者の方が楽だけど、後者の方が鬱陶しい代わりに
バグの温床を早めに発見できるので。

428 名前:デフォルトの名無しさん :03/07/22 18:48
>>427
どっちも使わないのが良い。
ポインタなんて複数箇所から同じオブジェクトを指すんだから、一箇所だけ0クリアしたって焼け石に水。
でもそれをわかった上で使うなら前者がいいと思う。
複数回deleteするかもしれないからこそわざわざsafe_delete使うんだし、それがダメなら自分でチェックすれば良い。

429 名前:デフォルトの名無しさん :03/07/22 18:58
早い話、生のポインタなんか使うなってこった

430 名前:デフォルトの名無しさん :03/07/22 19:02
>>428
なるほど参考になります。
そうすると下手に自作するより、Boost等のスマートポインタが
うまくやってくれるのに任せるのも安全&&楽ちんで良いですね。

431 名前:デフォルトの名無しさん :03/07/22 19:03
結局GCになるのか。

432 名前:デフォルトの名無しさん :03/07/22 19:05
ループで集中してdeleteしてるから、無事に動いてるように見えるけど、

delete p;
.
ヒープを扱う処理
.
delete p;

みたいに、間をおいて実行すると、すごいことになる予感。

433 名前:デフォルトの名無しさん :03/07/22 19:11
boost::shared_ptrみたいにすでにあるもの使うこともできるし。
機能に不満があったら自作することもできるし。
選択肢が多いのはいいことだと思う。


434 名前:デフォルトの名無しさん :03/07/22 20:10
> 選択肢が多いのはいいことだと思う。
勉強用としてはね。
実用としては悪いことになりえる。

435 名前:デフォルトの名無しさん :03/07/22 20:40
実用としては選択肢が少ない方が良いとでも?
馬鹿じゃねぇのか?
お前はBASICでも使ってろ。選択肢少ないぞ

436 名前:デフォルトの名無しさん :03/07/22 20:50
選択肢が多い方がいいのは応用の部分じゃねーかな。
基礎の部分で多いのは困るぜ。
たとえばライブラリごとに使ってるスマートポインタが違かったりする。
コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。

437 名前:デフォルトの名無しさん :03/07/22 20:58
C++は設計からしておかしいからね。
クソと言われてもしかたないよ。

438 名前:デフォルトの名無しさん :03/07/22 20:59
> コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。
ATLは言語に依存しないCOMのため。
MFCはSTLがVC++にまともに搭載される前からのもの。


439 名前:デフォルトの名無しさん :03/07/22 21:00
>>435
少ない方がいいとはいわんが
必要ないものはいらん。

440 名前:デフォルトの名無しさん :03/07/23 02:01
>>437
どこが?

441 名前:デフォルトの名無しさん :03/07/23 02:16
>>440
いつもの荒らしだろ
放置しろよ。

442 名前:デフォルトの名無しさん :03/07/23 03:12
>>436
例えば文字列ですかね>応用

C由来 : char*, wchar_t*
C++由来 : std::string, std::wstring
SourcePro由来 : RWCString, RWWString
Xerces由来 : DOMString, XMLString
Xalan由来 : XalanDOMString
ICU由来 : UnicodeString
SGI由来 : std::rope
MFC由来 : CString


443 名前:デフォルトの名無しさん :03/07/23 03:22
>>436
VCの不満はマイクロソフトに言え
C++に文句言うのはお門違いだ

444 名前:hoge :03/07/23 03:39

(*hoge)->hoge_f
って()で囲んで*つけると普通の構造体参照とどう異なるの?

445 名前:デフォルトの名無しさん :03/07/23 04:29
>>444
hogeはstruct tag **hoge
ここまで言えば分かるでしょ。

446 名前:デフォルトの名無しさん :03/07/23 05:22
(*hoge).hoge_f
の間違いじゃないのか

447 名前:hoge :03/07/23 05:25
>>444
ポインタのポインタを指す場合は()で囲んで*をつけるのですね@@;
ありがと

448 名前:デフォルトの名無しさん :03/07/23 05:45
>>446
それならhoge->hoge_fとかくだろ

449 名前:_ :03/07/23 05:52
http://homepage.mac.com/hiroyuki44/

450 名前:教えてください :03/07/23 13:27
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、
波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。
どなたか、教えてくれませんでしょうか?
参考URLなどご存知でしたらお願いします。
せめて、WAVEデータをテキスト変換するプログラムを教えてください。

お願いします。


451 名前:デフォルトの名無しさん :03/07/23 13:29
↓次の質問ドゾー

452 名前:教えてください :03/07/23 13:33
煽ってないでお願いします。

453 名前:デフォルトの名無しさん :03/07/23 13:34
↑次の質問キター

454 名前:デフォルトの名無しさん :03/07/23 13:42
>>450
テキストに変換、の意味がわからん
音声認識じゃないだろうし

455 名前:教えてください :03/07/23 15:11
>>454
音声認識です。


456 名前:デフォルトの名無しさん :03/07/23 15:17
音声認識ソフト作ってる会社に金払って教えてもらえ

457 名前:デフォルトの名無しさん :03/07/23 15:43
音声認識ならMicrosoftのSpeechエンジンが無料で使えるぞ

458 名前:デフォルトの名無しさん :03/07/24 00:09
void printf2(const char *str, ...)
{
  printf(str, ...);
}
可変個数で受け取った引数を、さらに別の関数の可変個数の引数として
渡すことってできますか? ↑のような感じに。


459 名前:デフォルトの名無しさん :03/07/24 00:27
>>458
void myprintf( const char* str, va_list args ) { ... }
void printf2(const char *str, ...)
{
 va_list args;
 va_start( args, str );
 myprintf(str, args);
 va_end( args );
}
とかなんとか。標準(だったけ?)ライブラリにvprintf関数
ってのがあるから、そのソース見るとかすればわかると思う。

460 名前:459 :03/07/24 00:28
あー、つまりその、printf に対する vprintf みたいなのが用意されてれば、
そっちに va_list を渡せばいい。そういうのが用意されてないと、無理。

461 名前:デフォルトの名無しさん :03/07/24 00:56
通常は反則技だが。

__declspec(naked)
void printf2(const char* str, ...)
{
 __asm {
  jmp printf
 }
}

462 名前:163 :03/07/24 01:09
あれ(>>163)から幾度か規格を漁るうちに、また妙な記述を見つけました。

offsetof@cstddef が引数として受け取る型は、
POD structure か、 POD union だと規格に書かれていました。(18.1 -5-)

やっぱりC++の規格は、非POD型オブジェクトについて何か想像を絶するメモリレイアウトを受け入れる余地を
意図的に残しているのだろうか?誰か知らないですか?

463 名前:hoge :03/07/24 03:54
if ( au & kddi )
の&ってどういう処理?

464 名前:デフォルトの名無しさん :03/07/24 03:55
byってゆー処理

465 名前:デフォルトの名無しさん :03/07/24 03:56
>>463
ビットAND

466 名前:デフォルトの名無しさん :03/07/24 04:01
C++ 始めたばかりだけど、std::string spaces(10, ' '); って構文はどうなのよ?
C では () が付くと関数というルールがあると思うけど、上のはどう解釈すれば良いのかな?

467 名前:デフォルトの名無しさん :03/07/24 04:09
コンストラクタに引数を渡しているだけでは・・・

468 名前:デフォルトの名無しさん :03/07/24 04:34
コンストラクタとクラス名は違っても良いんだ? なるほど。
コンストラクタが「インスタンス名()」って変なの。

469 名前:hoge :03/07/24 04:39
>>465
ありがと^^

ちなみに sig = (num < 0)
はnumが0未満だったらsigに代入するって事?

470 名前:hoge :03/07/24 04:41
もひとつ^^;
ハイビットセット処理って何?

471 名前:_ :03/07/24 04:43
http://homepage.mac.com/hiroyuki44/hankaku10.html

472 名前:デフォルトの名無しさん :03/07/24 05:01
>>468
え??
std::string型のspacesを定義してコンストラクタには(10,' ')を渡すんだと思っていたけど違うの??

473 名前:デフォルトの名無しさん :03/07/24 05:28
>472
下のコードの sharp(10, '#'); の部分ってどう理解したら良いのやら検討が付きません。
sharp は変数名なのに引き数を取っている?

#include <iostream>
#include <string>
int main()

    std::string sharp(10, '#');
    std::cout << sharp << std::endl;
    return 0;
}

474 名前:デフォルトの名無しさん :03/07/24 05:29
編集中に int main() の次の行の { が抜けてしまいました。

475 名前:デフォルトの名無しさん :03/07/24 05:42
>>473
そういう仕様だからしかたないんだよね・・・・
どうしても気になるならstd::string sharp=std::string(10, '#');と書きなよ。
std::string sharp(10, '#'); は上記の省略形。

476 名前:デフォルトの名無しさん :03/07/24 05:42
>>473
コンストラクタはその型のインスタンスが構築される際に働く関数で、
変数の定義時に変数名の右に引数を書いて渡すのは、まぁ、そういう決まりってこと。

ちなみにintとかの組み込み型でも
int hoge(100);
っていう書き方ができるよ。この場合はint型の変数hogeを100で初期化してる。

477 名前:476 :03/07/24 05:43
かぶって候

478 名前:デフォルトの名無しさん :03/07/24 06:02
>>475-477
レスありがとうございます。
今まで色々な言語を見てきましたが、難解ですね。ある変数を初期化、代入するのには型、変数名、
初期値があれば良いと言うのは分かりますが、「型 変数名(初期値)」という構文は脳が異次元に
ワープしそうです。

479 名前:デフォルトの名無しさん :03/07/24 07:29
>>478
それのどこが難解なんだよ。本当に色々な言語を見てきたのか?

つーか難解さで言えば関数ポインタ型の変数の方がもっと上だろ。

480 名前:デフォルトの名無しさん :03/07/24 08:01
>>478
 × 型名 変数名(初期値);
 ○ 型名 変数名(コンストラクタへ渡す引数のリスト);
だ。あと、std::string(10, '#') なんかも
 型名(コンストラクタへ渡す引数のリスト)
とそのまんまに解釈すべき文であって
 コンストラクタ関数(コンストラクタへ渡す引数のリスト)
という意味ではないので誤解せん方がよい。

() が関数呼び出し、という固定観念から離れた方がいいと思うが、
まあ、関数と紛らわしいってのはその通りで、
 string s( istream_iterator<char>(cin), istream_iterator<char>() );
と書いて変数定義をしたつもりが関数の宣言とみなされて困ったりはするのだが。

481 名前:デフォルトの名無しさん :03/07/24 08:18
コンストラクタも関数なんだから、()は関数呼び出しという認識でも、つじつまは合う?

482 名前:デフォルトの名無しさん :03/07/24 09:36
関数の戻り値を参照で返すとき、関数内でreturn Class1(arg1, arg2);という
具合に引数つきコンストラクタで初期化したクラスで値を返すとします。
このとき、Class1の実体が保持されているタイミングはどこまでなのでしょうか。

483 名前:デフォルトの名無しさん :03/07/24 10:32
>>482
関数内まで。
というか、エラーも警告もなしにコンパイル通る?

484 名前:デフォルトの名無しさん :03/07/24 16:46
>>483
警告を出してくれないコンパイラも困りものだが、
これでエラーがでたらそれはコンパイラのバグ。

485 名前:デフォルトの名無しさん :03/07/24 17:31
>>484
非 const の場合、g++ だとエラーになったよ。

486 名前:デフォルトの名無しさん :03/07/24 20:08
>>485
確かにこの場合、非 const だとエラーにはなるだろうが、
それは右辺値・左辺値の問題なのでオブジェクトの寿命の問題とはまた別。

487 名前:デフォルトの名無しさん :03/07/24 20:51
今、ファイルへ書き込みするプログラム作ってるんだけど、
複数あるクラスのデータを、基本クラスのtypeプロパティを読み込んで
switchで派生クラスのデータをそれぞれ書いてるんだけど、
なんか、あまり綺麗じゃないんです。
ちなみに、基本クラスから派生しているクラスは5種類くらいあって
中身がそれぞれ違うんで、switchみたいなの使わないといけないんですが
なんか他にいい方法ないですかね?

488 名前:_ :03/07/24 20:55
http://homepage.mac.com/hiroyuki44/

489 名前:デフォルトの名無しさん :03/07/24 21:02
>>487
元クラスを弄れないと仮定して、MixJなら楽勝なんだが…Visitorかな?

490 名前:デフォルトの名無しさん :03/07/24 21:25
Siralizableとかいうインターフェースを保存したいクラスに実装してそれぞれでSirializeをオーバーライドしたら?

491 名前:デフォルトの名無しさん :03/07/24 21:34
>>489
とりあえず、Visitorで検索したけど、
これで、いいんですかね?
http://member.nifty.ne.jp/yamazaki/doc/cpp_design_pattern.html#Visitor

>>490
それ、書き込んだ後に思いつきました。
とりあえずやってみます。

492 名前:デフォルトの名無しさん :03/07/25 00:18
>>486
いや、だから寿命の話じゃなくて
エラーがでないってことはないよってことで...。

493 名前:hoge :03/07/25 01:52
malloc()で動的にメモリ領域を確保して

構造体を格納してその後にprintfで内容を出力、
実行するとprintfの所で

Segmentation fault (core dumped)

gdbでデバッグしてみると
#0 0x610ba041 in strlen () from /usr/bin/cygwin1.dll
で落ちている...

strlenで落ちる(しかもprintf)のはどうしてでしょうか?


494 名前:デフォルトの名無しさん :03/07/25 02:02
>>493
訳が分からんが、普通strlen()で落ちるのは'\0'がないからでは?

495 名前:hoge :03/07/25 03:29
>>494

返答ありがとう^^
調べたのですが多分\0がないからと思います。
なぜならcharに数値を代入しているみたいです(こんな事ありえますか?)


496 名前:デフォルトの名無しさん :03/07/25 03:30
ワケワカラン。
一体どんな状況なんだ?

497 名前:hoge :03/07/25 03:45
new->s_pt = new->s_ft + BYTE_LEN;

charで定義されたs_ptに数値が代入されている恐怖の構造体みたいっす
最初は構造体の宣言に沿ってprintfの書式を決定していたのですが...w

498 名前:デフォルトの名無しさん :03/07/25 03:55
char は整数型だから、普通の整数値として扱うこともあるが。
まぁ、その場合は普通 singed か unsigned か付けるけど、
0 〜 127 しか扱わんなら問題になることはまれだと思う。

それにこれは C じゃないのか?

499 名前:hoge :03/07/25 03:59
>>494
ゴメ C言語なら俺に聞け! Part 62 が適当でしたね^^;;

charの謎が解けました^^;ありがと

500 名前:デフォルトの名無しさん :03/07/25 09:56
500


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.