[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 06/02 12:37 / Filesize : 89 KB / Number-of Response : 349
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.66【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 01:08:48 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.65【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1239326399/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。

256 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:24:55 ]
>>254
使う必要がない、ではなく使えないだな。
www.fides.dti.ne.jp/~oka-t/cpplab-placement-new-2.html
placement newの文字通り引数を取る形式new(hoge) Tにたいして、delete(hoge) pという構文がないという話。

メモリ確保処理を自前でやるとしたら、
クラス・構造体にnew/deleteなどを定義するか、
アロケータクラスを作って、確保解放はvectorとかに任せる
という形態のほうが多いと思う。ほかの人はどう考えているか分からないけど。

257 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:13:45 ]
placement newを使いにくいとは思わないけど、むやみに使うものでもない。
>>256の言うように、クラス・構造体にnew/deleteを定義するとか
アロケータとコンテナを組み合わせるのがいいと思う。

258 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:16:07 ]
c++で複数のクラスからの継承ってできますか?

たとえば
数値Aと
class NoA{
//ここに関数A
}

class NoB{
//ここに関数B
}

ここでNoAもNoBも引き継いだclass NoC
(NoC.関数AとNoC.関数Bの両方ができ)

みたいなことってできるの?

259 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:18:52 ]
>>258
www.geocities.jp/ky_webid/cpp/language/033.html

260 名前:デフォルトの名無しさん [2009/06/09(火) 09:41:04 ]
C++に動的にクラスを生成する方法がないって本当ですか?
文字列としてクラス名があったとして、それでオブジェクトを作ることができないって読んだんですけど。

自由度高そうなのに。
ごにょごにょしてやる方法あります?

261 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:46:39 ]
>>260
Smalltalkみたいな使い物にならないインタープリタと一緒にすんな

262 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:30 ]
>>260
こういう話か?
std::map<std::string, boost::shared_ptr>

263 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:56:44 ]
インタプリタ村の村民らしい要望だな
だな

264 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:05:56 ]
クラスの動的生成ではないがC++にリフレクション機能は
あってもよかったと思う



265 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:18:47 ]
オーバーヘッドが好きな奴が多いな。

266 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:36:38 ]
>>260
やろうと思えばなんだってできるよ、コンパイラ呼び出しDLLにコンパイル、出来上がったDLL動的にリンク、そして呼び出す。
面倒くさくてやらないけど。

267 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:40:41 ]
.NETを見ていると、標準ライブラリにコンパイラコレクションが入っていると便利なのだがと思う事はあるな・・・
ターゲットの環境にコンパイラをインストールなんて余りやりたくないからね

268 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:40:29 ]
fscanfの引数の場合分けがうまくいかないんだけどどうして?
引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない
switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる


269 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:44:10 ]
>>268
C言語でおk

270 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:47:18 ]
swichの方はswith{}←のカッコを忘れてただけでした

271 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:51:27 ]
fscanfの感じがわからん
fscanfした時点で一行バッファに入ってそこから指定した型の順で前から取っていく感じでしょ?
3つ目で型が合わないことがわかったらどうなるの?

272 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:42:01 ]
>>271
行は関係ないよ
合う型を探して改行関係なしにファイルの最後まで行ったら終わり
3個目が見つからなかったら戻り値で2を返すだけ

273 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:59:17 ]
サンクス
行関係無いのか
どっかのページ1行読み込むって書いてあったのに

274 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:25:48 ]
scanfのほうの使用を思い出すんだ



275 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:29:48 ]
caseってcase(1||2||3||4):って使えますか?
なんか使ってないのに違う行のcaseの所でcaseの値"1"は既に使用されていますって出るんだけど

276 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:34:30 ]
1〜4 までの整数を1箇所で引っ掛ける時は
case 1:
case 2:
case 3:
case 4:
 /* 本体 */
 break;

こう書く

case (1||2||3||4): は
定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから
結局 case 1: と書いてるのと同じ意味になってしまう

277 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:44:09 ]
ありがとうございました!
あんまり載って無いですね、初心者ならやってしまいがちだとおもうのですが

278 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:51:46 ]
習得順的には
if { } 〜 else if { } 〜 else { }
の羅列のほうが先にじゃねーかな?

break しない case を持つ switch 文って個人的にはあまり好きじゃない。
見直したときに 「あれ? break 忘れてるんじゃね?」 って勘違いしちゃう可能性があるもの

279 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:57:11 ]
むしろcase で || 使うというのをはじめてみた

280 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:21:52 ]
他言語から来た人とか?

281 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:24:57 ]
普通の初心者でつ

282 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:28:39 ]
>>280
勉強中でROMしてます

>>276
>case (1||2||3||4): は
>定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから
>結局 case 1: と書いてるのと同じ意味になってしまう
として処理されるならそもそも書く必要すらないですしこういう記述を知ってる必要もない気が・・・

つまり
>case 1:
>case 2:
>case 3:
>case 4:
> /* 本体 */
> break;
こっちを知ってればいいかと。
それかジャンプテーブルとかで処理しちゃうか

283 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:02:48 ]
>>282
知るべきことは "case の後ろは定数式" であること だ。

・定数式のうち 論理演算式だけは 演算結果が所詮 0/1 にしかならないのでおいしくない

・四則演算な定数式や ビット毎の論理演算定数式 記述が簡単になったり可読性が上がるかもしれない

四則演算の例:
#define TOP (100)
case TOP+1:

ビット毎の論理演算の例
#define A (1<<0)
#define B (1<<1)
case A|B:


284 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:40:14 ]
string が色変わらないんだけどなんで?ちゃんとインクルードしてるのに



285 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:49:42 ]
>>284
メモ帳で書いてろ

286 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:56:58 ]
他の関数でもポップアップが出なくなった
なんでだろう

287 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:09:35 ]
>>286
{}とかが上手くいってないと出ないよ

288 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:41:44 ]
>>287
ありがとうございました

289 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:53:26 ]
caseに式を使えたらいいのにぁ
else ifの梯子なんてダサすぎる…

290 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:55:40 ]
制限は多いけど、その条件を満たす場合はパフォーマンスを発揮できると考えるべき。

291 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:21:01 ]
switch case のコンパイルコードに期待を持つなんてオールドタイプのバッドノウハウ

292 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:37:30 ]
>>289
条件演算子を使えば似たような書き方で好きな式を条件に出来る。
C++だけだったかも知れんが。


293 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:24:46 ]
else if するくらいなら

(x==0||x==1||x==2||x==3)&&(func0(),true)
||x==4&&(func4(),true)
||x==5&&(func5(),true)
||(func_default(),false);

294 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:26:09 ]
あ、カッコ不足だった



295 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:49:34 ]
AクラスのaにBクラスからアクセスしたいのですが、うまくいきません。
どうしたらいいでしょうか。。

#include <stdio.h>

class A
{
  public:
    A(int);
  private:
    int a;
  private:
    class B
    {
      public:
        B() { printf("constructer B\n"); }
        void some_func(void){ printf("a: %d\n", a); }
    };
};

A::A(int x)
{
  a = x;
  B* b = new B();
  b->some_func();
}

int main(void)
{
  A a(10);
  return 0;
}

296 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:08:01 ]
>291
でもブレイクスルーとdefaultの機能って、状況さえ許せば凄く便利じゃね?

297 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:30:32 ]
>>295
class A{
public:
A(int);
private:
int a;
class B
{
public:
B(A&a) : a(a) { printf("constructer B¥n"); }
void some_func(void){ printf("a: %d¥n", a.a); }
private:
A&a;
};
friend class B;
};
A::A(int x){
a = x;
B* b = new B(*this);
b->some_func();
}

298 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:32:38 ]
>>295
friend

299 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:35:43 ]
>>296
Duff's Deviceくらいしか使い道なくね?

300 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:17:05 ]
>>296
ブレイクスルーちゃう
fall through

301 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:18:14 ]
ブレイクするんちゃう?

302 名前:デフォルトの名無しさん [2009/06/10(水) 01:23:48 ]
std::coutとかstd::endl;って
スレッドセーフですか?


303 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:06 ]
コンパイラごとに違うので、コンパイラの仕様書を読んでください。
っていうか、C++の規約にはスレッドセーフに関する記述はないんじゃなかったっけ?

304 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:28:30 ]
ライブラリによるしな



305 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:04:54 ]
>300
失礼、別のと混ざった

306 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:23:36 ]
class A{ public: void A( void ); virtual void ~A( void ); };
と書きたい今日この頃
なぜこの書き方でエラーがでるのかがわからない

307 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:13 ]
気持ちは分かるけどさ。
「もともと戻り値は存在しないもの」と、「戻り値は使わないことを宣言する」の違いじゃない?

308 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:38 ]
void

309 名前:デフォルトの名無しさん [2009/06/10(水) 14:47:46 ]
sprintf関数について質問です。
strcatとかstrcpyを使うよりも、便利だと教えられたのですが、いまいちどこが便利なのかわかりません。
教えてください。

310 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:53:53 ]
具体的にstrcatとかstrcpyを使ったコード書いてみて
それをsprintfに置き換えてみりゃわかるだろ。

もちろん、strcatとかstrcpy一発で済むような例はstrcatとかstrcpy使えばいいのはわかるよな。

311 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:54:06 ]
HOGE_01、HOGE_02 …… みたいな文字列を生成するときは、sprintfじゃないとやってらんないと思う

312 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:29:14 ]
sprintfなんてキケンな物使っちゃいけません

313 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:33:01 ]
sprintf_sがあるから無問題

314 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:03:03 ]
>>312
#pragma warning (disable : 4996)



315 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:52 ]
ltoaで小数点以下の数値を文字にするにはどうするの?

316 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:59 ]
sprintf_sにしろsnprintfにしろ標準じゃないし、こいつらはこいつらで危なかったりするし(ヌル終端しないとか)
いずれにせよsprintf一族はロクなもんじゃないから書き捨てコード以外には使うべきでない

317 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:08:06 ]
>>316
安全な使い方をすればいいだろ

318 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:11:26 ]
sprintf系を使って本当に安全なコードを書こうとすると#ifdef地獄だぞ
挙動バラバラだし、本当にクソみたいなsnprintfとかがいるから
ヌル終端しないくらいならカワイイもんで、例えば
一昔前のLinuxはnをガン無視してsprintfにブン投げるようになってることがある
本当に死ねばいいと思う

319 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:13:28 ]
C/C++にしろJavaにしろ安全は保障されないし、こいつらはこいつらで危なかったりするし(すぐに暴走するし)
いずれにせよプログラミング言語一族はロクなもんじゃないから書き捨てコード以外には使うべきでない


320 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:20:16 ]
snprintfはC99標準……。
ま、糞実装なsnprintfの存在以前にC99自体アレだが。

321 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:44:16 ]
C99の仕様以前に、C99の対応率が。。。

322 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:50:11 ]
C99の方が便利なのに、どうしてC99に移行しないんだろうね?
異なるプラットフォーム間で利用されるソフトを開発しているならともかく
そうでない、小さなプロジェクト(おそらく世のプロジェクトの大部分)は
C89よりC99で開発したほうが(わずかだろうけど)コスト削減になりそうなものだが。

323 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:52:42 ]
世の中Cじゃ無くてC++方向に走ったからね。いまさら感があるよ

324 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:59:07 ]
便利な物だけつまみ食いしとけばいいんだよ
__func__とか__VA_ARGS__とか_Pragmaとか<stdint.h>とか

restrictやら可変長配列やらはいりません



325 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:53:03 ]
僕は複合リテラルだけ居てくれればそれでいい。

326 名前:デフォルトの名無しさん [2009/06/11(木) 01:48:37 ]
C++でクラスの配列を作ったのですが、配列の要素数をどうやって求めればいいでしょうか。

class hoge
{
public:
int a,b,c,d,e;
void func1();
void func2();
};

hoge h[]={
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
};
このとき
sizeof(h)/sizeof(hoge)
とやっても正しく出てくれません。


327 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:53:50 ]
template<X>unsigned is(hoge[X]&){return X;}

kazu=is(h);

328 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:00:41 ]
class Hoge
{
int a
}

というクラスがあったとき
Hogeのインスタンス同士の比較をメンバ変数aの大小で行う場合
演算子をオーバーロードしたほうが良いのか
int GetA()という関数を比較するのが良いでしょうか?

またHogeインスタンスとintを比較することも考えてますがこういう場合はどうでしょうか?

329 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:02:44 ]
>>326
いやそれであっている。
うまくいかないならほかに原因がある。

330 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:37:59 ]
>>328
Hoge同士の比較方法がそれ以外にあり得ないなら演算子オーバーロードでいいんじゃね?

331 名前:デフォルトの名無しさん [2009/06/11(木) 02:50:23 ]
>>329
すいません。
クラス配列を作るとき、
hoge h[]={
hoge{1,2,3,4,5},
hoge{1,2,3,4,5},
hoge{1,2,3,4,5},
hoge{1,2,3,4,5},
};

と書くようにしたら先のやり方で配列の要素数が取れました。
環境はVS2008なのですが、最初の書き方ではだめだったでしょうか?


332 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:10:02 ]
コンパイラ何使ってる?
あと、どんな結果が出たのかも書いて欲しいかなかな。

333 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:35:46 ]
hoge{1,2,3,4,5} ←なにこれ?

334 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:03:30 ]
新しいコンストラクタの呼び方



335 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:35:48 ]
デタラメ書くなカス

336 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 15:17:42 ]
>>331
自分もVS2008だけど、これはエラーなくコンパイルできて4と出力される。むしろ>>331がコンパイルエラーになる。
#include <iostream>

class hoge
{
public:
int a,b,c,d,e;
void func1();
void func2();
};

hoge h[]={
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
};

int main()
{
std::cout << sizeof(h)/sizeof(hoge) << std::endl;
}

337 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 19:58:37 ]
gcc4.3以上なら通るな
initializer_listだろ

338 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:57 ]
C99の機能をC++に持ち込むなクズ

339 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:22:27 ]
C++0xではC99の一部機能が採用されるよ。
委員会の人たちにクズと言わないと意味ない。

340 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:51 ]
restrictとか_Complexとか可変長配列みたいな
本当にしょうもない物は入らないから大丈夫だと思うけどね

341 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:53:38 ]
>>339
ここはC++0xのスレじゃないよ

342 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:20:40 ]
>>340
特に、restrictはC++89のときに否決された過去があるから、
今回も入れられるわけないw

343 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:51 ]
restrictは入れると一つだけ利点があるんだよなあ

FORTRAN並みに配列演算が高速化できる可能性がある
科学技術計算にはFORTRANを、と言わなくて済むようになるんだがな

それ以外には取り立てて利点はない

344 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:13:12 ]
>>341
ここがC++0xのスレかどうかなんて、>>338-339の流れには関係ないよ。



345 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:08:43 ]
>>344
スレ違いだクズ

346 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:24:45 ]
いいえ。

347 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:52:32 ]
いいえ。

348 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:56:38 ]
iccでもオプション指定さえすればrestrictが使えるんだよね。
メモリのアクセスパターンががらっと変わる可能性があるから入れて欲しいけどねぇ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<89KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef