[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 08/27 18:32 / Filesize : 189 KB / Number-of Response : 742
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:29:45 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.36【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1175436073/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


159 名前:155 mailto:sage [2007/05/14(月) 19:02:58 ]
#include <iostream>

using namespace std;

int main()
{
char line[] = "abcde¥012345¥0ABCDE";
for(int i=0; i<18; i++){
cout << "(" << line[i] << "," << (int)line[i] << ")";
} // i

return 0;
}

$ ./a.out
(a,97)(b,98)(c,99)(d,100)(e,101)(
,10)(3,51)(4,52)(5,53)(,0)(A,65)(B,66)(C,67)(D,68)(E,69)(,0)(,0)(,0)

となります。

160 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 19:05:13 ]
>>159
コンソールで確認するなよ・・・

161 名前:155 mailto:sage [2007/05/14(月) 19:07:45 ]
> lineの中身は"abcde¥0"となってしまいます。
は不正確でした。すみません。
"12345"の"12"が改行コードLF=10になっています。


162 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 19:08:43 ]
>>159
char line[] = "abcde\0" "12345\0" "ABCDE";
こうしとけ。

163 名前:155 mailto:sage [2007/05/14(月) 19:10:14 ]
>>160
あれ?なんかまずかったですか?
見やすいかと思って。
i=15, 16, 17のときに(,0)となってるので、
ここに何も入ってないんですよね。
なんで"¥012"が"¥0¥n"に化けてしまうのか。

164 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 19:12:28 ]
"\012" が {'\0', '1', '2'} ではなく {'\012'} とみなされてるんだから、
配列の全長が2文字分みじかくなってる。

つまり最後の二つの0は不正なアクセス。

165 名前:155 mailto:sage [2007/05/14(月) 19:12:35 ]
>>162
その方法で、
(a,97)(b,98)(c,99)(d,100)(e,101)(,0)(1,49)(2,50)(3,51)(4,52)(5,53)(,0)(A,65)(B,66)(C,67)(D,68)(E,69)(,0)
になりました。
ありがとうございます。

166 名前:155 mailto:sage [2007/05/14(月) 19:13:53 ]
>>164
ああ、octで解釈されてるわけですか。
なるほど。



167 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 19:24:34 ]
>>159
みたいに
for(int i=0; i<10; i++){
} // i
とか
if(hoge){
} // if
っていう書き方を推奨してる本って、
なんかありませんでしたっけ?
この書き方をどっかで読んだ記憶があるんです。



168 名前:54 mailto:sage [2007/05/14(月) 21:52:47 ]
>>55-58
class A
{
int a;
public:
A(int i) : a(i) {}
A& geta() { return *this; }
virtual void prt() const { printf("a:%d\n", a); }
};
class B : public A
{
int b;
public:
B(int i) : A(0), b(i) {}
virtual void prt() const { printf("b:%d\n", b); }
};
int main()
{
B b(100);
b.geta().prt();
}

これを動かすと「b:100」と表示されて、geta()はA&を戻す筈なのに実際は
B&を戻している訳ですよ。B&を返すメソッドを勝手に定義してくれたほうが
よっぽど自然だと思うんですが、私が愚かしいこと言ってるんですかね?


169 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 22:21:23 ]
うん、けっこう愚かしいと思うよ…。

170 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 22:25:34 ]
>>168が理解できない
どこでB&を戻してるの?

171 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 22:28:25 ]
>>168
class C : public B
{
public:
  A& geta()
  {
    static A a(0);
    return a;
  }
  //コンストラクタほか省略
};
このとき、こうされたらどうする?
C c;
B& b = c;
b.geta().ptr();
B型の式に対してgeta()を呼ぶとB&が返ってくることにしたら、
このb.geta()ではA型のインスタンスへの参照を返しているので型システムを侵すことになる。

だから暗黙的にやらないで、B内ではB&を返すgetaを明示的にオーバーライドしてやったほうがいい。
次のコードはC::getaでコンパイルエラーになる
struct A {virtual A& geta();};
struct B : A {virtual B& geta();};
struct C : B {virtual A& geta();};

172 名前:171 mailto:sage [2007/05/14(月) 22:30:14 ]
すまん
168のgetaも仮想関数だと思い込んでいたorz

173 名前:デフォルトの名無しさん [2007/05/14(月) 22:41:55 ]
とあるソースを読んでいる初心者です.
クラスClass1のヘッダファイル先頭に,下記のように他のクラスClass2,Class3の記述がありました.

#ifndef *******
#include ************
class Class2; class Class3; ←これ

class Class1
public 以下略

これはいったいどういう意味を持つのでしょうか?

174 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 22:57:07 ]
Class2, Class3は別のところでちゃんと定義されてますよ
ってコンパイラに教えるためのおまじない

175 名前:54 mailto:sage [2007/05/14(月) 22:58:24 ]
>>171
なるほど。そのとおりでした。
サンクス。

176 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 23:01:02 ]
>>173
試しにその行を削除するなりコメントアウトするなりしてコンパイルしてみろ
たぶんエラー吐くから

177 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 02:58:46 ]
>>168
そのルールでいくと、自分の型のポインタか参照を返すようなメソッドは
すべて下位クラスで再定義する必要がある。
('return *this' だけのメソッドは特別なんていうルールを採用する?)
ちなみに、以下のようなプログラムではどんな結果になるべき?

void prt3(A* obj) { printf("prt3(A)\n"); }
void prt3(B* obj) { printf("prt3(B)\n"); }

class A {
public:
 A() {}
 virtual void prt() const { printf("A::prt\n"); }
 void prt2() const { printf("A::prt2\n"); }
 // thisの型はA?,B? return時だけB?
 A& geta() { prt(); prt2(); prt3(*this); return *this; }
};

class B : public A {
public:
 B() {}
 virtual void prt() const { printf("B::prt\n"); }
 void prt2() const { printf("B::prt2\n"); }
};

int main() {B b; b.geta(); }

結果
B::prt
?::prt2
prt3(?)



178 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 03:35:58 ]
*thisをthisにしてVC2003でコンパイル

結果:
B::prt
A::prt2
prt3(A)

179 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 18:49:47 ]
VS2005,XPです。

HWND hwnd;
RECT rc;
GetWindowRect(hwnd,&rc);
if ((rc.bottom-rc.top) == GetSystemMetrics(SM_CYCAPTION))

うまくいかないのですが、こういう比較の仕方は使えないのでしょうか?
使えない場合、どのように直せばいいですか?



180 名前:デフォルトの名無しさん [2007/05/15(火) 19:33:30 ]
クラスなどを使って、通常存在しないサイズの変数にアクセスできませんか?
int型の変数を24と8ビットに分けて使うような

x.aは24bit
x.bは8bit
として使いたいんですが

181 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 19:33:42 ]
>>17
D&Eには、できるようにしたところでメリットがない(オーバーライドできる仮想関数がない)し、
Cの型変換のルールが混沌としていて内蔵型をクラスとして扱おうとしてもうまくいかないと、
そうできるようにしなかった理由が書かれている。


182 名前:180 [2007/05/15(火) 19:34:31 ]
代入、参照が普通の変数のように出来る方法を教えてください

183 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 19:35:55 ]
>>180
どうしてもやりたいなら、ビットフィールドがその目的に使える。
但し、移植性を大きく損なうことになりかねないので注意。

184 名前:デフォルトの名無しさん [2007/05/15(火) 19:40:06 ]
>>183
サンクス!!!

185 名前:デフォルトの名無しさん [2007/05/15(火) 19:59:46 ]
>>183
すみません boolとcharだとどっちを使った方がいいとかありますか???

struct A{
char n : 1; char m : 7;
};

struct A{
bool n : 1; bool m : 7;
};

186 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:02:53 ]
>>179
何をしたいのか分からんが、使える。

187 名前:185 [2007/05/15(火) 20:07:05 ]
自己解決しました
移植性を考慮して、unsigned char n : 1; にしておきますね



188 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:10:51 ]
移植性が欲しいならunsigned intにしておけ

189 名前:デフォルトの名無しさん [2007/05/15(火) 20:12:37 ]
>>188
サイズは出来るだけ削りたいんです
上の例では32bit使っていますけど
8bit以内ならcharのほうが削れます

190 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:13:25 ]
ビットフィールドに使えるのはsignedかunsignedのintだけ。

191 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:15:54 ]
ビットフィールドの移植性って実のところどうなの?
一応、標準だよね?

192 名前:デフォルトの名無しさん [2007/05/15(火) 20:16:15 ]
bcc(c++)だと使えますけど

193 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:21:35 ]
>>192
処理系依存で他の型が使えても構わないことにはなっている。

194 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:22:42 ]
C++ならほとんどの整数型が使えるだろ。

195 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:31:15 ]
>>189
unsigned charがビットフィールドに使える処理系で、
同じ8ビットのビットフィールドでもunsigned intにするかunsigned charにするかで
違いが生じるなんて話聞いたことがない。

196 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:42:39 ]
>>195
#include <iostream>
template<typename T> struct S { T a: 1; T b: 7; };
int main() {
std::cout << "sizeof(S<unsigned int>) = " << sizeof(S<unsigned int>) << std::endl;
std::cout << "sizeof(S<unsigned char>) = " << sizeof(S<unsigned char>) << std::endl;
}

g++だと違う結果になったが。

197 名前:デフォルトの名無しさん [2007/05/15(火) 20:42:42 ]
>>195
違いますけど・・・

#include <stdio.h>
int main(void){
struct A{
unsigned int m : 1;
unsigned int n : 7;};

struct B{
unsigned char m : 1;
unsigned char n : 7;};

printf( "%u\n", sizeof(struct A) );
printf( "%u\n", sizeof(struct B) );
return 0;}



198 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 20:51:15 ]
VC8で確認。こちらも違った。

199 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:54:53 ]
VC7.1でも違った。

200 名前:デフォルトの名無しさん [2007/05/15(火) 21:58:58 ]
ふつう違うよな
int とchar
一バイトと四バイトだんもんな

201 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:01:29 ]
その理屈はおかしい。

202 名前:デフォルトの名無しさん [2007/05/15(火) 22:29:47 ]
BCC55で次のソースをコンパイルするとリンカがエラーを出すのですが、
私は何を誤っているのでしょうか?
どう直せばよいか教えていただけないでしょうか。

●ソース
#include<iostream>
class Singleton {
public:
 static Singleton getInstance() {
  if(&singleton == '\0') {
   singleton = *(new Singleton());
   std::cout << "Created!" << std::endl;
  } else {
   std::cout << "Not Created!" << std::endl;
  }
  return singleton;
 }
 ~Singleton() {}
private:
 static Singleton singleton;
 Singleton() {}
};

int main() {
 Singleton s1 = Singleton::getInstance();
 Singleton s2 = Singleton::getInstance();
}


203 名前:202 [2007/05/15(火) 22:31:15 ]
エラーの内容は次の通りです。

●コマンドラインとエラー
X:\>bcc32 -nX:\data\bin -5 -f X:\data\src\Singleton.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
X:\data\src\Singleton.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル 'Singleton::singleton' が未解決(X:\DATA\BIN\SINGLETON.OBJ が参照)

204 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:33:49 ]
一時オブジェクトとして使うならコンストラクタ呼び出さないと駄目ぽ
Singleton()::getInstance();

205 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:39:53 ]
static変数の実体がないって怒ってるわけなんだが…

そんなことよりも、何もかもが誤りだから
ポインタと参照とシングルトンの勉強をしたほうがいいと思うよ。

206 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:41:02 ]
>>202
クラスの静的メンバ変数は、外部で定義しなければならない。
Cのグローバル変数がヘッダで宣言して、どこか1ヶ所で定義するのと同じ理屈。

それはともかくマルチスレッドを考慮しないのなら、単にこうでいい。
class Singleton {
public:
 static Singleton getInstance() {
  return singleton;
 }
 ~Singleton() {}
private:
 static Singleton singleton;
 Singleton() {}
};

static Singleton Singleton::singleton;
マルチスレッドを考慮するなら、Singletonはポインタ、
当然std::auto_ptrやboost::scoped_ptrあたりにすべき。

207 名前:202 mailto:sage [2007/05/15(火) 23:07:21 ]
>>204-206
有難うございます。
マルチスレッドやboostのライブラリは当分手を出しません。
コマンドラインアプリをある程度満足に作れるようになってから先に行きます。
まだポインタの使い方も習得できてないわけですし。

ずっとJavaをやってきたんですが、アレは全部参照扱いだから
ポインタと実体を意識するシーンは限定されてたんですが、
C++はそうでないから難しいです。
C++プログラマにJavaを教える本はあるのに、その逆はないんですよね。
仕事ではないので、手探りでなんとかやっていこうと思います。



208 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 23:12:41 ]
Accelerated C++マジオヌヌメ

209 名前:206 mailto:sage [2007/05/16(水) 00:07:44 ]
>>206
getInstanceがSingletonへの参照を返すようにするのを忘れていたorz
正しくはこう
class Singleton {
public:
  static Singleton& getInstance() {
    return singleton;
  }
private:
  static Singleton singleton;
  Singleton() {}
  Singleton(const Singleton&);
  ~Singleton() {}
  Singleton& operator =(const Singleton&);
};


210 名前:202 mailto:sage [2007/05/16(水) 01:31:34 ]
>>208
Amazonのレビューによると、
既に他言語の知識がある人間にとって丁度良い本のようですね。
店頭で探してみます。

>>209
ありがとうございます。
operatorを使うんですね・・・。
まだ「パッと見」で、なぜこれがシングルトンを実現するのかが
分からないレベルなので、ソースを研究してみます。

211 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 01:44:03 ]
Singleton(const Singleton&);
Singleton& operator =(const Singleton&);
はインスタンスのコピーを禁止するためのちょっとした工夫だよ。
privateにする&処理の内容を記述しないことで、
コピーしようとしたらコンパイルエラーになるようにしてる。
あと、コンストラクタをprivateにしてるのも、
getInstance()以外で勝手にインスタンスを作られないようにするため。

212 名前:202 mailto:sage [2007/05/16(水) 01:58:23 ]
>>211
ありがとうございます。
なるほど、インスタンスのコピー禁止も意識しないといけないんですね。
privateなコンストラクタについては、Javaも同じ手法なのでわかりました。

213 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 06:57:01 ]
C++で読むデザインパターン
ttp://www.01-tec.com/document/cpp_design_pattern.html

214 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 09:59:08 ]
XPです。
タスクトレイのアイコンを指定しても違うアイコン(赤い×マーク)が出るんですけど何故でしょうか?
アイコンは32x32,256色と16x16,256色が入ってます。

215 名前:214 mailto:sage [2007/05/16(水) 10:36:34 ]
ソース
nid.hIcon = (HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, 0);
リソース
IDI_ICON1 ICON "1.ico"
こんな感じで読み込んでます。

それとあともう一つお願いします。
タスクトレイのアイコンを右クリックしたらTrackPopupMenuという便利な位置指定できる関数がありますが、
右クリックメニューからダイアログなどのウィンドウを開いた場合のウィンドウ位置の指定はどうやるのがスマートでしょうか?
タスクバーを移動してる場合にも、アイコン位置の角に表示させたいです。
それぞれの位置の場合の処理を書く必要があるんでしょうか?

216 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 10:51:57 ]
そのアイコンを試しにクライアントエリアに描いてみては
位置指定は、、、思ったとおりにやってみなよ

217 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 13:59:23 ]
struct base{};

template<typename T>struct drived:base{
template<typename TT>bool typecmp(){ return typeid(T)==typeid(TT); }
};

base *p1=new drived<int> , *p2=new drived<char>;

//で、base*からdrived::typecmpにアクセスしたい訳だが



218 名前:デフォルトの名無しさん [2007/05/16(水) 14:01:53 ]
vipの方が人がいそうなので。

pc11.2ch.net/test/read.cgi/tech/1178432985/217
217 名前:デフォルトの名無しさん[sage] 投稿日:2007/05/16(水) 13:59:23
 struct base{};
 
 template<typename T>struct drived:base{
 template<typename TT>bool typecmp(){ return typeid(T)==typeid(TT); }
 };
 
 base *p1=new drived<int> , *p2=new drived<char>;
 
 //で、base*からdrived::typecmpにアクセスしたい訳だが

これをやりたいんだけど、やっぱり原理的に無理だよね?

219 名前:218 mailto:sage [2007/05/16(水) 14:02:42 ]
すみません、218は誤爆です

220 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 16:30:30 ]
>>215
IDI_ICON1の値が問題な希ガス
ヘッダでの#defineも晒したほうがいいとおも

221 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 16:48:29 ]
>>217
お勧めはしないがdynamic_cast<derived<int>*>(p1)->typecmp<int>()

222 名前:デフォルトの名無しさん [2007/05/16(水) 21:35:09 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3988.txt
誰か応えてください。

223 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 21:57:45 ]
>>222
よく読んでないけど、delete p;は実行されないと思うぞ
配列はmain関数側で作って渡した方がいいと思うぞ

224 名前:デフォルトの名無しさん [2007/05/16(水) 22:00:19 ]
あ、やっぱりそうですか。

・・・あ、なるほど、思いついた
ありがとさんでした

225 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 23:27:10 ]
>>221
仮想関数無いと dynamic_cast って効かないんじゃない?

>>217
new drived した直後なら static_cast でいいだろう。
やっぱりお勧めはできないんだけども。

226 名前:202 mailto:sage [2007/05/16(水) 23:39:03 ]
>>213
ありがとうございます。
こういうサイトは良いですね。
今は鯖落ちしてるようで、キャッシュを見ていますが・・・。

227 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 23:51:44 ]
なんで実行時に決まる子の型を、コンパイル時判定で
親が使いたい、なんて言う発想になるんだろう



228 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 23:54:10 ]
vectorについてどなたか教えて下さい。

例えば、メイン関数で空のvectorを定義して
別の関数でその中に数値を代入したい場合には
何を渡して、何を仮引数にとってやればいいのでしょうか?
あくまで別関数のreturnは0か1で返したく、別関数で代入するだけで
メイン関数vectorの値を操作したいのです。

sub(?????)
{
こちらで値を入れたい
}

int main()
{
vector<int>   Vint;
   sub(?????);
}

何も入っていないためかiteratorを渡しても駄目でした。
またmain{sub(&Vint)}で、sub(vecter<int> *Vint){}でも
値の代入は出来ませんでした。困っていますよろしくお願いします。

229 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 00:01:12 ]
>>228
一番最後のポインタを使った奴なら大丈夫なはず。
できなかったってのは、何をしたらどうなったんだ?

ポインタのかわりに参照を使うのが C++ 的に適切。

230 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 00:02:35 ]
>またmain{sub(&Vint)}で、sub(vecter<int> *Vint){}でも
>値の代入は出来ませんでした。

できるよ

…気になったんだが、main の中で値を入れることはできるの?
resize もせずに Vint[0] = 1; とかやってないよな?

231 名前:214 mailto:sage [2007/05/17(木) 00:38:52 ]
ありがとうございます。
>>216
クライアントエリアにも赤い×マークが描かれました。
>>220
#define IDI_ICON1 103
です。

232 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 00:54:09 ]
>>231
じゃあそういうデータなんだよ
複数の形式でアイコンが入ってるなら全部チェックしてみては

233 名前:214 mailto:sage [2007/05/17(木) 01:00:02 ]
自分で作ったアイコンなので赤い×マークなんて入ってないんですが・・・。
実行ファイルのアイコンとタイトルバー左上のアイコンも同じアイコンを使っていてそちらはちゃんと出ます。

234 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 01:54:58 ]
んじゃOEMアイコンを読んでるんだな。
hInstanceがNULLだったりしないか?

235 名前:214 mailto:sage [2007/05/17(木) 02:08:59 ]
ビンゴでした。
すいません、どうもありがとうございました。

236 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 04:06:34 ]
VC++で

ULONGLONG x = 0;
x += 10000000 * 60 * 60 * 3;

ULONGLONG y = 0;
y += (ULONGLONG)10000000 * 60 * 60 * 3;

if (x != y)
cout << "Different" << endl;

とするとxの方はオーバーフローになってxとyが違う数字になってしまうんだけど
64ビットコンパイラではこれは起こらないんだよね? この辺の仕様について
書いてあるページとか無いだろうか?

237 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 04:17:24 ]
>>236
intが64bitなら起きないけど、VC++の64bitターゲットはintが32bitな
ので、起きる。

ページは知らね。探してないけど、Cの規格書にあるはず。




238 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 04:35:12 ]
整数定数は(特に記述が無ければ)int。
int同士の演算はintで行われ、結果もint。
これはどんなコンパイラでも一緒。

つまり、>>237の通り。俺もページは知らないが。

239 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 05:33:31 ]
VIPPERが意外と侮れない
昨日VIPでレスついてた

130 名前:以下、名無しにかわりましてVIPがお送りします。[] 投稿日:2007/05/16(水) 14:52:36.04 ID:G4TJRFdQ0
struct base
{
private:
virtual bool typecmp( const type_info &typeinfo ){ return false; };
public:
template<typename TT> bool typecmp(){ return typecmp( typeid(TT) ); };
};

template<typename T> struct drived : public base
{
public:
virtual bool typecmp( const type_info &typeinfo ){ return typeid(T) == typeinfo; }
};

こんなんでどうだい?

240 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 07:35:47 ]
>>229-230
一番下ので可能とのことで、もう一度やってみます。
resizeというものに関しては知らなかったです。
どうもありがとうございました。

241 名前:デフォルトの名無しさん [2007/05/17(木) 11:28:44 ]
char *strという変数に文字列を格納するのを関数で行う場合
どういう渡し方すれば良いんでしょうか?


242 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 11:29:48 ]
hoge(char *dst, int dst_size)

243 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 11:49:19 ]
>>241
その変数に、文字列は格納できない。

244 名前:241 mailto:sage [2007/05/17(木) 11:56:44 ]
あれ?文字列を格納するのって
char str[50]="hoge";
char *str="hoge";
の二種類でやるのではないのですか?
C言語は今日から勉強し始めたので激しく狂ったこと言ってたらすいません。

245 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 11:58:10 ]
おとなしく、配列とポインタの関係あたりを勉強してからにしろ。

246 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 14:23:09 ]
if(a==b)とif(b==a)って同じですか?

247 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 14:24:50 ]
>>246
それがC++で特殊な演算子オーバロードされていると言うことがないなら、同じ。



248 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 14:29:06 ]
a, b の型が異なっても同じだったけ?
int と long とか double と int とか

249 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 14:40:08 ]
>>248
promotion rule に従うってだけで同じじゃね?

250 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 17:31:45 ]
mallocはnew、freeはdeleteに置き換え可能だと思いますが、
reallocはどうしたらいいでしょうか。(STLのコンテナ使え、は無しで

251 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 17:42:35 ]
>>250
STLのコンテナを使わない理由を調べ、その理由如何では敢えてnew/deleteに置き換えずにそのままrealloc()を使うべし。

252 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 17:43:48 ]
C++の機能に置き換えるというなら、インラインアセンブリでシコシコ

253 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 18:06:40 ]
つplacement new

254 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 18:56:04 ]
>>236
(ULONGLONG)10000000よりも10000000ullのほうがすっきり

255 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 19:13:51 ]
意味が違うだろ。

256 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 20:26:09 ]
scanfでdouble型変数に数値を入力し、その数値を1/2,1/4,1/5の値を出力するプログラムを作成
したいのですが、どのようにして作ればいいのでしょうか?

257 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 20:32:49 ]
inline指定した関数がインライン展開されなかったとき、なんで警告が出ないの?
個人的には「この関数は現在の設定(orコンパイラ)ではインライン展開されません」という警告が低いレベルで出て欲しい。



258 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 20:37:56 ]
それでデバッグビルド/サイズ優先ビルドで警告が出まくりか?

259 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 20:41:57 ]
>>256
どこで躓いてるのか分からん。
scanfでint型変数に数値を入力し、その値を2, 4, 5倍して
出力するプログラムは作れるかい?






[ 続きを読む ] / [ 携帯版 ]

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

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