【初心者歓迎】C/C++室 Ver.77【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/12/12(月) 21:21:26.11ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.76【環境依存OK
http://hibari.2ch.net/test/read.cgi/tech/1312621728/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
0153デフォルトの名無しさん
2011/12/20(火) 23:40:38.22ONE.value, ONE.name
0154デフォルトの名無しさん
2011/12/21(水) 01:24:23.57inline 関数は定義がいっぱいあってもその内容が完全に同じならおk
0155デフォルトの名無しさん
2011/12/21(水) 01:28:28.64こんな感じでがんばれ。
http://d.hatena.ne.jp/Cryolite/20110920#p1
0156デフォルトの名無しさん
2011/12/21(水) 02:27:39.19引数が SIZEの関数があったので
func(SIZE(CX,CY));
と記述したらエラーとなりました。
SIZE size={CX,CY};
func(size); とするとOKでした。
変数を作らずに関数に値を渡すにはどう記述すればいいのでしょうか。
0157デフォルトの名無しさん
2011/12/21(水) 02:31:33.13コンパイラがC99またはC++11対応ならSIZE{CX,CY}でいけるんじゃないかな。
0158デフォルトの名無しさん
2011/12/21(水) 03:42:27.32ありがとう。動作しました。
こんな文法があるとは。
ただ、これらを配列としてアクセスしたかったりします。
printf(const_array[ONE].name);
のように。
>>149の原理が分かってないので、応用できないというか…
なにか参考URLはないでしょうか
構造体でググっても見つかりません…
01592011新作展示
2011/12/21(水) 03:44:15.42N級最高等級時計大量入荷
新品種類がそろっています。
http://baidurl.cn/4ye
http://baidurl.cn/555
http://baidurl.cn/556
http://baidurl.cn/557
http://baidurl.cn/559
0161デフォルトの名無しさん
2011/12/21(水) 08:52:44.73bool operator < (S const & a, S const & b) {
return a.value < b.value;
}
std::map<S, S> make_array(void) {
std::map<S, S> array;
array.insert(ONE, ONE);
array.insert(THREE, THREE);
attay.insert(FIVE, FIVE);
return array;
}
static std::map<S, S> const const_array = make_array();
int main(void) {
std::cout << const_array[ONE].value << std::endl;
std::cout << const_array[ONE].name << std::endl;
}
0162デフォルトの名無しさん
2011/12/21(水) 23:11:15.45解散コールは1:55から
12.19 街頭演説、国民の怒りと危機管理への不安
http://www.youtube.com/watch?v=6PQf9GvXWB0
国民に罵声を浴びせられ駅前交番に避難するテレビアカヒの取材班 12/19正午 新橋駅前
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/111219_124643_ed.jpg
,:' .l .::;',. :::;/..://:: /,':/ ', l、 .i ヽ
. ,' ..::| .::;',' :;:','フ'7フ''7/ ',.ト',_|, , ',.',
,' .::::::!'''l/!:;'/ /'゙ / '! ゙;:|:、.|、| 'l
. ,'. .:::::::{ l'.l/ 、_ _,. 'l/',|.';|
l :::::::::::';、ヾ  ̄ `‐-‐'/! ';. '
. ! :::::::::::/ `‐、 ゝ |'゙ |
| ::::::::/ \ 、_, _.,.,_ ノ::: ! 野田政権が早く終わりますように
|::::/. _rl`': 、_ ///;ト,゙;:::::./
.. `´ /\\ `i;┬:////゙l゙l ヾ/
,.:く::::::::`:、\ 〉l゙:l / !.|
. /:.:.:.:\:.:.:.:.`:、ソ/:.:| | | 19日の報道ステーション
/.:.:.:.:.:.:.:.:.:\:.:.:.:У:.:;l http://livedoor.blogimg.jp/kingcurtis/imgs/e/d/ed2dbc66.jpg
0163デフォルトの名無しさん
2011/12/22(木) 06:29:56.60int hoge(){}
}
と書いてもコンパイルエラーにならないが、
class A{
int hoge();
}
int A::hoge(){}
と書くと、「値を返さなければいけません」のようなコンパイルエラーになるのは何故ですか?
両者は同じではないですか?
0164デフォルトの名無しさん
2011/12/22(木) 06:37:16.94文句言われるけど
0165163
2011/12/22(木) 07:40:15.39ありがとうございます。
気になったらとりあえずcodepadに行ってみるのがいい感じですね。
mingwだと良く見ると警告が出ていて、
ideon、Visual C++だと警告すら出ませんでした。
警告に対する設定の違い見たいですね。。。
0166デフォルトの名無しさん
2011/12/22(木) 07:41:49.560167デフォルトの名無しさん
2011/12/22(木) 07:49:11.02class A{
private:
int ababababa(void)
{
std::cout << "hoge";
return 1;
}
};
int main()
{
A a;
a.ababababa();
std::cout << "foo";
}
単体試験をしたいのですが、ababababa(void)がprivateであるためアクセスできません。
クラスを変更せずに試験を行うことは出来ませんか?
クラスの内部にfriendを書く以外の方法があれば教えて欲しいです。
0168デフォルトの名無しさん
2011/12/22(木) 07:50:39.960169デフォルトの名無しさん
2011/12/22(木) 08:48:37.01対象のクラスのポインタをそのクラスのポインタにキャストする
0170167
2011/12/22(木) 09:41:48.72これは…。
恐ろしいものを知りました。
>名前の違う、自由に改変可能な、同じ内容のクラスを作って
ちょっと労力が大きいかも。
おふたかた、ありがとうございます。
因みに、プロの方ですか?現場でもこういったことをするのですか?
0171デフォルトの名無しさん
2011/12/22(木) 09:43:46.66!
呼ばれなければコンパイルされないのか…。
ありがとうございます。
0172デフォルトの名無しさん
2011/12/22(木) 09:47:35.110173デフォルトの名無しさん
2011/12/22(木) 10:47:13.94背筋が凍った
0174デフォルトの名無しさん
2011/12/22(木) 11:56:21.380175デフォルトの名無しさん
2011/12/22(木) 12:18:10.65テストをした方が良いと思うんだが。
0176デフォルトの名無しさん
2011/12/22(木) 14:39:19.81呼ばれないメンバ関数をコンパイルしない代表は、VC++。
他人が使うクラスを作るときは要注意。
0177デフォルトの名無しさん
2011/12/22(木) 16:14:40.38実例よろ
0178デフォルトの名無しさん
2011/12/22(木) 16:31:36.66前者はインライン関数。
インライン関数は一部は一部文法チェックされるようだけど、
呼ばれなければ、returnがなくても怒られないね。
バイナリには含まれないから問題ない。
後者はインライン関数ではないので
呼ばれなくてもバイナリに含まれるから
returnがなければ怒られる。
よって両者は異なる。
0179デフォルトの名無しさん
2011/12/22(木) 22:37:11.150180デフォルトの名無しさん
2011/12/22(木) 22:46:22.31インライン関数のマージ作業に意味解析済みである必要は無いというかそもそも無駄なんだから
0181デフォルトの名無しさん
2011/12/22(木) 22:54:10.81リリースモードならともかく、デバッグモードではちゃんとコンパイルエラーを出して欲しい。
DEFCON^h^h^h^h^h^h警告レベル4でもでなのかしら? …実験してみるかな。
0182デフォルトの名無しさん
2011/12/22(木) 23:02:13.290183デフォルトの名無しさん
2011/12/22(木) 23:53:24.85なんと!
クラス宣言の中に書いてしまうとインライン扱いになるということ?
警告してくれるようなオプションってないのかな?
後で邪魔になっても困る人もいるのでは?
0184デフォルトの名無しさん
2011/12/23(金) 01:09:32.25/::::::::::::::::::::::::::::::;;::ノ ヽ;::\
/::::::::;;;;;;;;;,,,;;...-‐''"~ ヽ:;::l
|:::::::::::| 岡田 異音 |ミ|
|:::::::/ ,,, ヽ,、 '|ミ|
'|:::::::l '''"" ゙゙゙゙` |ミ|
|:::::|. ,,r ‐、 ,, - 、 |/
,/⌒| ノ ・ _), (. ・ `つ|
| ( "''''" |"'''''" |
ヽ,,. ヽ |
| ^-^_,, -、 |
| _,, --‐''~ ) | マニフェストもう守れない。どうしよう・・・・
'ヽ ( ,r''''''‐-‐′ /
震災後
|:::::::::/ |ミ|
|::::::::| ,,,,, ,,,,, |ミ|
|彡|. '''"""'' ''"""'' |/
/⌒| -=・=‐, =・=- |
| ( "''''" | "''''" |
.ヽ,, ヽ .| キリッ
| ^-^ |
. | ‐-===- | 大震災が起こったのだからマニフェストの破綻も致し方ありません
,\. "'''''''" /
朝鮮民主党
解党
0185デフォルトの名無しさん
2011/12/23(金) 08:52:29.38「WSAStartup()」と対になって、
初期化・開放 のようなものかと思っていたのですが、
調べてみると、
「WSAStartup()」はメモリを取得するが、
「WSACleanup()」をしても開放しないので、そのうちヒープか何かが無くなって落ちると知りました。
0186デフォルトの名無しさん
2011/12/23(金) 09:00:06.220187デフォルトの名無しさん
2011/12/23(金) 12:32:56.69std::ofstream out("test.txt", std::ios::out | std::ios::binary);
double num = 100.45;
out.write((char *) &num, sizeof(double));
の(char *) &numって何で&numなんですか?
0188デフォルトの名無しさん
2011/12/23(金) 12:38:00.47事故解決しました
0189デフォルトの名無しさん
2011/12/23(金) 13:14:39.78プロセス中で複数回呼ぶのはNGで、
プロセスが終了したら開放されるのであれば、
「WSACleanup()」しなくてもいいってことにならないのでしょうか?
もうひとつお願いします。
ソケットが使える常態かそうではないかはどのように確認できますか?
WSARecv()などで受信してみないとわからないでしょうか?
0190デフォルトの名無しさん
2011/12/24(土) 07:15:28.99Visual C++では、警告:C4251 が示されます。
privateとして利用している場合は、OKなのでしょうか、NGなのでしょうか。
インタフェースとして利用している場合は、std::mapの実装が異なる可能性があるのでNGというのは、なんとなくわかるのですが、
内部で利用するだけであれば問題がある理由がわからないです。
inlineを利用してアクセスするのがNGというのも良くわからないです。
この件では、ヘッダの内容を全てcpp側にコピーしても同じ警告が出ます。どうしてなのでしょうか?
コンパイラがインタフェースに利用されているか判断するのが困難だからでしょうか?
「class 'std::map<_Kty,_Ty>' は __export キーワードを使って class 'info::driver::InetPromiscuousDriver' にエクスポートしてください。」
とは、どこの何に対して、__exportを追記するとエクスポートできるのでしょうか?
エスパー出来れば、この辺りについて教えてください。
0191デフォルトの名無しさん
2011/12/24(土) 08:48:18.60で奇麗に整形されたソースになると思ったら
とんでもない壊れたものしか出力されない
何かオプションでもいるの?
0192片山博文MZ ◆0lBZNi.Q7evd
2011/12/24(土) 10:22:48.99http://www.6809.net/tenk/html/lib/doc/astyle_j.htm
0193デフォルトの名無しさん
2011/12/24(土) 17:43:03.67private メンバもクラスのサイズに影響する。
inline でアクセスしてたらDLL内外で実装の異なる map アクセスが展開される可能性がある。
0194デフォルトの名無しさん
2011/12/24(土) 22:55:08.76めんどくさくなってきたから全部doubleにしてしまいたい
0195デフォルトの名無しさん
2011/12/24(土) 23:10:57.90>1/2*2
0
>1.0/2.0*2.0
1.000000
0196デフォルトの名無しさん
2011/12/24(土) 23:20:24.96>めんどくさくなってきたから全部doubleにしてしまいたい
すれば?
余計面倒なことになると思うが。
0197デフォルトの名無しさん
2011/12/25(日) 00:38:18.530198デフォルトの名無しさん
2011/12/25(日) 00:39:23.250199デフォルトの名無しさん
2011/12/25(日) 00:44:23.33[]を小数点切り捨てとすると
[a/n + b/n]
[a/n] + [b/n]
は異なる。
0200デフォルトの名無しさん
2011/12/25(日) 00:54:18.15世も末だなw
0201デフォルトの名無しさん
2011/12/25(日) 02:57:13.99double i;
for(i=0;i<1;i+=0.01)printf("%f ",i);
と
int i;
for(i=0;i<100;i++)printf("%f ",(double)i/100.0);
とは違うことがある。
0202デフォルトの名無しさん
2011/12/25(日) 03:48:17.300203デフォルトの名無しさん
2011/12/25(日) 13:54:45.42実数でループできるように言語仕様を変えるべきでは?
0204デフォルトの名無しさん
2011/12/25(日) 14:00:55.120205デフォルトの名無しさん
2011/12/25(日) 14:06:30.240206デフォルトの名無しさん
2011/12/25(日) 14:24:16.46マシーンで計算精度が異なる。
整数型であればズレが出ない。
0207デフォルトの名無しさん
2011/12/25(日) 15:16:35.680208デフォルトの名無しさん
2011/12/25(日) 18:36:46.52コード・ソースを晒せば早いかもしれませんが、はじめのうちはなかなか勇気がでないかもしれません。
0210デフォルトの名無しさん
2011/12/25(日) 23:20:09.77糞コードを晒す厚顔無恥さは勇気とは言わないけどな
具体的に
0212デフォルトの名無しさん
2011/12/25(日) 23:39:55.690213デフォルトの名無しさん
2011/12/25(日) 23:44:05.64糞コードを改善する答えやヒントを人に与えることができる人間以外は必要ありません
0214デフォルトの名無しさん
2011/12/25(日) 23:56:37.990215デフォルトの名無しさん
2011/12/26(月) 22:56:39.860216デフォルトの名無しさん
2011/12/27(火) 00:10:20.44intと暗黙で相互変換可能なクラスを作ればそれですむ。
厳密な意味での整数型が作りたければコンパイラに手を入れる必要がある。
0217デフォルトの名無しさん
2011/12/27(火) 00:59:27.390218デフォルトの名無しさん
2011/12/27(火) 11:09:05.80少ないビット幅しか使えないなら配列で多倍長数を表現する。
ハードウェアの対応でないから演算速度は落ちる。
0219デフォルトの名無しさん
2011/12/27(火) 14:44:51.44vector<auto_ptr<Hoge> > hoge_pointers(num, NULL);
for (int i = 0; i < num; i++) { hoge_pointers[i].reset(new Hoge); }
// pushするループで例外を投げたくないから、先行してhoge_userの内部にメモリを確保する
hoge_user.reserve(hoge_pointers.size());
// pushされた時点からポインタはhoge_userが管理する
for (int i = 0; i < num; i++) { hoge_user.push(hoge_pointers[i].release()); }
こんな感じで、hoge_userの外でHogeインスタンスをたくさん作成してから
hoge_userにポインタを渡したいんですが、どういう風にすればいいでしょうか
例外が起こった場合には、hoge_pointersがすべて解放されて、
hoge_userにpushされたポインタはすべてなかったことにしたいです
で、スマポを使おうと思ったのですが、auto_ptrはSTLのvectorに突っ込めなくて、
boost::shared_ptrはポインタを取り出すことができないのでやめました
try/catch 使えって話ですが、なにか他にいい解決策はありますか?
0220デフォルトの名無しさん
2011/12/27(火) 15:20:55.13コンテナにauto_ptrを入れる行為はCOAPと呼ばれ厳禁
Effective STLを読め
0221デフォルトの名無しさん
2011/12/27(火) 15:25:10.76vector<Hoge *> v;
try {
v.reserve(N);
for(int i(0); i != N; ++i) {
v.push_back(new Hoge);
}
}
catch(...) {
int n(v.size());
for(int i(0); i != n; ++i) {
delete v[i] ;
}
throw ;
}
どうしてもtry/catchが嫌ならcatchブロックの部分をデストラクタで実行するクラスを作ってvのアドレスをもたせればいい
0222デフォルトの名無しさん
2011/12/27(火) 15:59:34.02意地でもtry/catchを使いたくないので、そちらのコードを参考にしてクラスを自作したいと思います
0223デフォルトの名無しさん
2011/12/27(火) 18:41:37.49public ref struct A {
array<int> a;
A() {
a = gcnew array<int>(10);
}
~A(){
delete a;
}
};
A^ s = gcnew A();
delete s;
で~A()が呼び出されて内部のリソースも削除される?
0224デフォルトの名無しさん
2011/12/27(火) 19:09:14.58節子それC++やない、C++/CLIや
0225デフォルトの名無しさん
2011/12/27(火) 19:32:32.67すいません
0226デフォルトの名無しさん
2011/12/27(火) 21:00:27.48とりあえずスレ一覧をCLIで検索してみれ。
0227デフォルトの名無しさん
2011/12/28(水) 00:12:20.49プリミティブ型の値をvectorに大量に一括設定する際、vector::assign以上に高速に
設定する方法はないでしょうか?
VC++2010を使っています。
0228227
2011/12/28(水) 00:24:38.84vector等のSTLのコンテナを含む静的ライブラリ(型を限定してコンパイルした上で提供)を作成しているのですが、
Debug版の遅さに我慢できません(VC++2010)。
ライブラリのリリースでは内部実装がDebug版である必要はないため、
Debugビルド向けにもReleaseでビルドして提供したいと考えています。
しかし、イテレータデバッグレベルがどうのこうのっていうエラーが発生してしまいます。
なんとか回避する方法はないでしょうか?
0229デフォルトの名無しさん
2011/12/28(水) 01:30:39.39たぶん無いね。あっても大差無いだろう。
>>228
_SECURE_SCL の設定で片付くんじゃないの?
http://msdn.microsoft.com/ja-jp/library/aa985965.aspx
あと、エラーメッセージは正確にね。
0230227
2011/12/28(水) 03:28:57.27ありがとうございます。
_SECURE_SCLについてはやってみましたが、プロジェクト全体で同じ値に設定しないとダメなようです。
Debugのプロジェクトは
利用者側 ... デバッグ作業がしたいので_SECURE_SCL=1にしたい
ライブラリ側 ... デバッグは済んでいて高速に処理したいので_SECURE_SCL=0にしたい
としたいのですが、下のLNK2038と同じエラーになってしいます。
> あと、エラーメッセージは正確にね。
申し訳ありません。
手元に環境がないため、ググッた結果になりますが、
error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。
だと思います。
自前のクラスを作って置き換えるか、より高速なSTLの実装があれば、それを使うというのもありなのかもしれませんが…。
0231デフォルトの名無しさん
2011/12/28(水) 09:16:58.000232デフォルトの名無しさん
2011/12/28(水) 10:50:07.41速くしたければリリース使う。
0233227
2011/12/28(水) 21:10:53.96227に関しては早くなるかもしれませんね。
でも、今はなくなってしまったようです。
VC++2008のalgorithm
http://msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.90%29.aspx
VC++2010のalgorithm
http://msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.100%29.aspx
make_checked_iteratorは残っていますが、これを使ってstd::copyしても、内部で
_DEBUG_RANGE
_DEBUG_POINTER
が呼ばれた後、ようやくコピー処理が走るようになってるようです。
>>232
それが、我慢出来ないくらい遅いんですよ。
ソースコードデバッグを開始すると数分反応が帰って来ませんし。
0234デフォルトの名無しさん
2011/12/28(水) 21:15:11.47そういうのじゃないよね?
0235デフォルトの名無しさん
2011/12/28(水) 21:27:54.730236デフォルトの名無しさん
2011/12/28(水) 21:29:53.57SECURE_SCLのせいでatも[]も変わらなくなってるよ
最初に気がついたときは怒りで発狂するかと思ったw
ありなしでDLLまたげないしね
ほんと面倒だわ
>>233
うちもけっこうでかいプログラム作ってるけどSECUrE_SCLをOFFにしてDebug版は素直に使ってる
ただ、デバッグ実行じゃなくてexeを直に叩いて立ち上げてからアタッチしたほうが
結構速い気がするのでそっちを使ってる
0238227
2011/12/28(水) 21:45:42.75reserveして設定も試しています。
[]で設定する他、生ポインタに変換して設定したり、OpenMPを使ってみたりしてみましたが…、
assignの方が早かったです。
どうも、reserveも要素ごとに配置newが発生したり、_DEBUG_RANGEなどが走ったりしているようで、
値の設定分、遅くなってしまうようです。
>>236
立ち上がってアタッチってのはたしかに有用かもしれませんね。
ありがとうございます。
0239デフォルトの名無しさん
2011/12/28(水) 21:52:35.700240227
2011/12/28(水) 23:13:13.60ソースは手元に無いので、覚えている範囲で似たようなコードを書きました。
あと、うちにあるのはExpressなので、OpenMPが動くかどうかは不明です。
http://codepad.org/kqZndGzg
ちなみに >>238 はreserveではなくて、resizeでした。
申し訳ありません。
reserveも試してはいますが、assignの方が早かったと思います。
0241デフォルトの名無しさん
2011/12/29(木) 01:07:24.97この際だからmemcpyでいいんじゃねというくらいしかまともな方法は思いつかない
boost::container::vectorとか使って望む結果になるかどうかも試したことないからわからないな
0242デフォルトの名無しさん
2011/12/29(木) 04:03:07.90という関数に渡された引数が &hoge[1]だった場合、
関数の中ではhoge[0]はarg[-1]という表現でいいんですか?
0244デフォルトの名無しさん
2011/12/29(木) 08:20:41.31Header <boost/container/container_fwd.hpp>
Header <boost/container/deque.hpp>
Header <boost/container/flat_map.hpp>
Header <boost/container/flat_set.hpp>
Header <boost/container/list.hpp>
Header <boost/container/map.hpp>
Header <boost/container/set.hpp>
Header <boost/container/slist.hpp>
Header <boost/container/stable_vector.hpp>
Header <boost/container/string.hpp>
Header <boost/container/vector.hpp>
ひと通りどんな内容なのか目を通しておくとよい
boostは今や膨大な内容になっていてとても全部目を通すのは不可能に
近くなってきたから興味のある所だけでも見ておこう
0245デフォルトの名無しさん
2011/12/29(木) 08:29:02.28これ使うやつはアホウだ。
0246デフォルトの名無しさん
2011/12/29(木) 08:31:19.60有名なライブラリがあったりtimerなど3行程度で自作できるだろ。
バージョン違いで動作が変わる可能性あるし、インクルードするやつはアホウ。
0247デフォルトの名無しさん
2011/12/29(木) 08:37:09.53ソースコードを張ったり公開するところでboostはダメだな。
0248デフォルトの名無しさん
2011/12/29(木) 11:24:02.760249デフォルトの名無しさん
2011/12/29(木) 13:11:43.53STLを使っとけばスコープ外れたら自動で解放するだろ。
どうやってnewの使用が回避出来なかったら手動で開放しろよ。
もしくはデストラクタに組み込めよ。そしたらいらん。
0250デフォルトの名無しさん
2011/12/29(木) 13:59:55.29使ってもみないでただ批判ばかりしてる
0251デフォルトの名無しさん
2011/12/29(木) 14:33:10.27>デストラクタに組み込めよ
これを毎回書くのがだるいからスマポ使うんだろ
0252デフォルトの名無しさん
2011/12/29(木) 14:33:12.78boostが優れている所なんてないだろ。
使う意味なし。
■ このスレッドは過去ログ倉庫に格納されています