C++相談室 part82
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/06/02(水) 20:20:13ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part81
http://pc12.2ch.net/test/read.cgi/tech/1273407971/
0002デフォルトの名無しさん
2010/06/02(水) 20:22:03[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://www.cppreference.com/ (英語)
http://www.cppreference.com/wiki/jp/ (↑の日本語訳だけどまだ未完)
[禿 Stroustrup]
http://www.research.att.com/~bs/
[C++ International Standard]
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
http://www.jisc.go.jp/app/pager?id=15868
ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。
0003デフォルトの名無しさん
2010/06/02(水) 20:22:54[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
SGI-STL http://www.sgi.com/tech/stl/
STLport http://stlport.sourceforge.net/
GNU libstdc++ http://gcc.gnu.org/libstdc++/
Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
http://sourceforge.net/projects/loki-lib/
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0004デフォルトの名無しさん
2010/06/02(水) 20:23:52amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
http://www.amazon.com/exec/obidos/ASIN/0201760428/
0005デフォルトの名無しさん
2010/06/02(水) 20:25:24Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
http://www.amazon.com/exec/obidos/ASIN/0321227255/
■長いソースを貼るときはここへ。■
http://codepad.org/
0006デフォルトの名無しさん
2010/06/02(水) 21:17:030007デフォルトの名無しさん
2010/06/02(水) 21:34:290008デフォルトの名無しさん
2010/06/02(水) 22:36:520009デフォルトの名無しさん
2010/06/02(水) 23:09:030010デフォルトの名無しさん
2010/06/02(水) 23:34:36環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0011デフォルトの名無しさん
2010/06/03(木) 00:11:07地鎮祭乙
0012デフォルトの名無しさん
2010/06/03(木) 01:00:020013デフォルトの名無しさん
2010/06/03(木) 03:27:300014デフォルトの名無しさん
2010/06/03(木) 09:41:15Hoge & operator = (const Hoge & h) {
if(this == &h) return *this;
Hoge(h).swap(*this);
return *this;
}
↓
Hoge & operator = (const Hoge & h) { return this = &h ? *this : Hoge(h).swap(*this), *this; }
みたいな感じで行数減らせるようになって俺としては気持がいいんだけど…
あと意味的に連続してるような
a = aa;
b = bb;
c = cc;
みたいなばあいは
a = aa, b = bb, c = cc;
にした方が自然言語っぽくて見やすくない?
0015デフォルトの名無しさん
2010/06/03(木) 09:47:37これ , *this 要る?
this = &h ? *this : Hoge(h).swap(*this) だけで十分な気が。
> if(this == &h) return *this;
> this = &h ? *this : ...
条件が変わってる気が・・・。
0016デフォルトの名無しさん
2010/06/03(木) 09:56:28ブーリアンはやいよブーリアン。
0017デフォルトの名無しさん
2010/06/03(木) 12:21:480018デフォルトの名無しさん
2010/06/03(木) 12:23:39前スレから転載。
19 名前:デフォルトの名無しさん[sage] 投稿日:2010/05/09(日) 22:01:32
入門書だけでもこんだけあるんじゃん
ttp://www.amazon.co.jp/dp/4839926050/
ttp://www.amazon.co.jp/dp/4798108936/
ttp://www.amazon.co.jp/dp/4797354542/
ttp://www.amazon.co.jp/dp/4797343672/
ttp://www.amazon.co.jp/dp/4777512096/
ttp://www.amazon.co.jp/dp/477410843X/
ttp://www.amazon.co.jp/dp/4062573318/
ttp://www.amazon.co.jp/dp/4797316144/
ttp://www.amazon.co.jp/dp/4797353686/
あとはBoostの解説書とか
ttp://www.amazon.co.jp/dp/4798017043/
C++ テンプレートテクニックとか
ttp://www.amazon.co.jp/dp/4797354534/
20 名前:デフォルトの名無しさん[sage] 投稿日:2010/05/09(日) 22:18:05
>>19
へぇ。じゃぁあとは■Books(和書)■あたりでテンプレの形にまとめればよさそうだね。
あとはここらへんを■Books■の頭に追加だな。
http://www.amazon.co.jp/gp/bestsellers/books/754384/ref=pd_zg_hrsr_b_1_4_last
0019デフォルトの名無しさん
2010/06/03(木) 12:36:36参照にしとけばヌルチェックが省略できるかもね。
0020デフォルトの名無しさん
2010/06/03(木) 13:35:36zipの中のzipの中を探索するライブラリないですか?
解凍をせずに直にzipの中のzipを扱いたいのですが。
0021デフォルトの名無しさん
2010/06/03(木) 13:38:09ファイルの範囲を受け取るように拡張したらいいのですが。自前だと大変です。
0022デフォルトの名無しさん
2010/06/03(木) 14:21:23void f( int& i ) { printf( "%p\n", &i ); }
int *p = 0;
f( *p );
VC8, g++3.4.5 で普通に 0 と表示される。
規格ではどうか知らないけど。
0023デフォルトの名無しさん
2010/06/03(木) 14:23:450024デフォルトの名無しさん
2010/06/03(木) 14:35:13使ってるぜ
while ( c = fgetc(fp), c != EOF )
0025デフォルトの名無しさん
2010/06/03(木) 14:50:49template<typename T,typename SX=S0<T>>struct A;
template<typename T,typename SX>struct B{
template<typename Tany,typename SXany>B(A<Tany,SXany>const&a); // SX=S0<T>,SXany=S0<Tany> で S0を条件付けるにはどうすればいいんだろう?
};
B<int,S0<int>>::B(A<float,S0<float>>const&){} // ok
B<int,S0<int>>::B(A<float,S2<float>>const&){} // error
B<int,S0<int>>::B(A<int,S1<int>>const&){} // error
みたいな感じで
0026デフォルトの名無しさん
2010/06/03(木) 16:09:49取り敢えず 8.3.2 -4- 注記に、null参照は well-defined なプログラム中には
存在し得ないとある。
まぁ、機械語に直された後で実行時に存在しないようにするのは無理、
というか不合理だろうね
0027デフォルトの名無しさん
2010/06/03(木) 21:26:30同士アクセスが65-70くらいからバグるな。
それ以下だと正しいロックしているが。
これはwindowsのせいか?
0028デフォルトの名無しさん
2010/06/03(木) 21:29:37#include <tbb/concurrent_queue.h>
#pragma comment (lib, "tbb.lib")
#include <process.h>
#include <windows.h>
#include <iostream>
using namespace std;
using namespace tbb;
#define N 64
concurrent_queue<int> que;
int sum[N];
unsigned WINAPI fnc(void *n) {
int x, num=*(int*)n; delete n;
while(1) {
if( !que.try_pop(x) ) { Sleep(10); continue; }
if(x==-1) return 0;
sum[num]+=x; Sleep(rand()%5); }}
int main() {
HANDLE hd[N];
int n;
for(n=0; n<N; n++) sum[n]=0;
for(n=0; n<N; n++) { int *m=new int; *m=n; hd[n]=(HANDLE)_beginthreadex(NULL, 0, fnc, m, 0 ,NULL); }
for(n=0; n<=10000; n++) que.push(n);
for(n=0; n<N; n++) que.push(-1);
WaitForMultipleObjects(N, hd, TRUE, INFINITE);
for(n=1; n<N; n++) { cout<< "スレッド"<<n <<"の合計 "<<sum[n]<<endl; sum[0]+=sum[n]; }
cout<<"総和 "<<sum[0]<<endl;
getchar(); }
0029デフォルトの名無しさん
2010/06/03(木) 21:30:50003028
2010/06/03(木) 21:33:32http://en.sourceforge.jp/projects/freshmeat_tstl/
これBCCで動かしてもスレッド数が64超えるとバグるな。
こっちはヘッダ読み込みだけで動作して良い・
003128
2010/06/03(木) 21:41:10とデッドロックになりやすい。
TBBでもなったけど、Sleep(1)を一カ所入れたら平気。
安全度はTBB。
0032デフォルトの名無しさん
2010/06/03(木) 21:47:290033デフォルトの名無しさん
2010/06/03(木) 21:50:32HTTP受信が遅いとき
0034デフォルトの名無しさん
2010/06/03(木) 22:17:18BCCでは動きそうにない。
0035デフォルトの名無しさん
2010/06/03(木) 22:52:490036デフォルトの名無しさん
2010/06/03(木) 23:08:53そのコードなら間違いなくWindowsのせい。
http://msdn.microsoft.com/en-us/library/ms687025.aspx
WaitForMultipleObjectsで渡せる個数は最大MAXIMUM_WAIT_OBJECTS個と書いてあるが、
この値は64と定義されている。
ところで、ちゃんと戻り値やGetLastErrorが返す値を見ようよ。
65個以上渡したときには、どっちもエラーを意味する値になっているから。
0037デフォルトの名無しさん
2010/06/03(木) 23:16:460038デフォルトの名無しさん
2010/06/03(木) 23:29:12#include <tbb/concurrent_queue.h>
#pragma comment (lib, "tbb.lib")
#include <process.h>
#include <windows.h>
#include <iostream>
using namespace std;
using namespace tbb;
#define N 100
concurrent_queue<int> que;
int sum[N];
unsigned WINAPI fnc(void *n) {
int x, num=*(int*)n; delete n;
while(1) {
if( !que.try_pop(x) ) { Sleep(1); continue; }
if(x==-1) return 0; sum[num]+=x; Sleep(1); }}
void WaitObject_INFINITE( unsigned int ksu, HANDLE *hd) {
for(unsigned int n=0; n<ksu; n+=64) {
int k=ksu-n; if(k>64) k=64; WaitForMultipleObjects( k, hd, TRUE, INFINITE); }}
int main() {
HANDLE hd[N]; int n;
for(n=0; n<N; n++) sum[n]=0;
for(n=0; n<N; n++) { int *m=new int; *m=n; hd[n]=(HANDLE)_beginthreadex(NULL, 0, fnc, m, 0 ,NULL); }
for(n=0; n<=10000; n++) que.push(n);
for(n=0; n<N; n++) que.push(-1);
WaitObject_INFINITE( N, hd) ;
for(n=1; n<N; n++) { cout<< "スレッド"<<n <<"の合計 "<<sum[n]<<endl; sum[0]+=sum[n]; }
cout<<"総和 "<<sum[0]<<endl; getchar(); }
0039デフォルトの名無しさん
2010/06/03(木) 23:33:07#include <tbb/concurrent_queue.h>
#pragma comment (lib, "tbb.lib")
#include <process.h>
#include <windows.h>
#include <iostream>
using namespace std;
using namespace tbb;
#define N 100
concurrent_queue<int> que;
int sum[N];
unsigned WINAPI fnc(void *n) {
int x, num=*(int*)n; delete n;
while(1) {
if( !que.try_pop(x) ) { Sleep(1); continue; }
if(x==-1) return 0; sum[num]+=x; Sleep(1); }}
void WaitObject_INFINITE( unsigned int ksu, HANDLE *hd) {
for(unsigned int n=0; n<ksu; n+=64) {
int k=ksu-n; if(k>64) k=64; WaitForMultipleObjects( k, hd, TRUE, INFINITE); }}
int main() {
HANDLE hd[N]; int n;
for(n=0; n<N; n++) sum[n]=0;
for(n=0; n<N; n++) { int *m=new int; *m=n; hd[n]=(HANDLE)_beginthreadex(NULL, 0, fnc, m, 0 ,NULL); }
for(n=0; n<=10000; n++) que.push(n);
for(n=0; n<N; n++) que.push(-1);
WaitObject_INFINITE( N, hd) ;
for(n=1; n<N; n++) { cout<< "スレッド"<<n <<"の合計 "<<sum[n]<<endl; sum[0]+=sum[n]; }
cout<<"総和 "<<sum[0]<<endl; getchar(); }
0040デフォルトの名無しさん
2010/06/03(木) 23:38:33WaitForMultipleObjects( k, hd, TRUE, INFINITE);
→
WaitForMultipleObjects( k, &hd[n], TRUE, INFINITE);
0041デフォルトの名無しさん
2010/06/04(金) 04:55:570042デフォルトの名無しさん
2010/06/04(金) 13:13:350043デフォルトの名無しさん
2010/06/04(金) 17:06:25double operator^( const double lhs, const double rhs )
{
return pow(lhs,rhs);
}
のコンパイルが通りません。
error: ‘double operator^(double, double)’ must have an argument of class or enumerated type
というエラーが出てきます。
どうしたら良いのでしょうか?
0044デフォルトの名無しさん
2010/06/04(金) 17:11:25なんで引数が二つなの?
一つは自分自身でしょ
0045デフォルトの名無しさん
2010/06/04(金) 17:17:160046デフォルトの名無しさん
2010/06/04(金) 18:50:13namespace内のみ定義可能で、ローカルスコープでusingした時のみオーバーロド可能とかなら良かったのに
0047デフォルトの名無しさん
2010/06/04(金) 21:20:42ヘッダのクラス定義の中に書いちゃいますか?
0048デフォルトの名無しさん
2010/06/04(金) 21:27:150049デフォルトの名無しさん
2010/06/04(金) 21:38:08異なる箇所から頻繁に呼ばれる関数が多所に分散することで遅くなることもある。
0050デフォルトの名無しさん
2010/06/04(金) 21:39:470051デフォルトの名無しさん
2010/06/04(金) 21:41:41唯一の関数がレジスタとかにある方が速い。
片っ端に付けまくるとそういった高速アクセスが出来なくなるから遅くなる。
コンパイル時のオプションや実測後に変更すればいい。
はじめから付けると損。
0052デフォルトの名無しさん
2010/06/04(金) 21:49:30たまにpimpl
0053デフォルトの名無しさん
2010/06/04(金) 21:50:590054デフォルトの名無しさん
2010/06/04(金) 21:57:00インラインして関数が分散すれば、唯一高頻度の関数はなくなりキャッシュされない。
http://www.tzone.com/diy/topics/event/new-core-i7-online-nhl/new-core-i7-online-nhl.jsp
内蔵キャッシュメモリーをL3まで搭載
Core i7ではCPUコア個々に
1次キャッシュメモリ:命令用32KB+データ用32KB
2次キャッシュメモリ:256KBが搭載れさており、
さらに複数のCPUコアで共有する3次キャッシュメモリーが
8MBが搭載されています。
これによりプログラムから頻繁にアクセスされても
従来のCPUよりもシステム全体の速度を円滑に管理できます。
0055デフォルトの名無しさん
2010/06/04(金) 22:01:53PC雑記帳「CPUキャッシュの効果」
http://www7a.biglobe.ne.jp/~znotl/zakki/021102d.png
http://www7a.biglobe.ne.jp/~znotl/zakki/021102.html
0056デフォルトの名無しさん
2010/06/04(金) 22:04:090057デフォルトの名無しさん
2010/06/04(金) 22:04:33ボタン押してから画面に結果が表示されるまでのレスポンスがそんなに変わんのかよ
0058デフォルトの名無しさん
2010/06/04(金) 22:08:110059デフォルトの名無しさん
2010/06/04(金) 22:10:30埋め込みで効果あるのは、使われるところが一緒のみの場合。
コードの見やすさの為に関数化した場合だけ有効。
0060デフォルトの名無しさん
2010/06/04(金) 22:10:57以前は小物にはつけるようにしてたけど、ライブラリで間に合う事が多いから
そういったものを自分で定義することがなくなった
メンバ関数のインラインは通常1行で最大3行くらい。主にアクセッサ。
ただアクセッサを用意する設計はなるべく避けてるのであまり定義することはない
割と初学者やJavaやC#から流れてきた人ほどインラインしたがると思うんだけど偏見かなw
0061デフォルトの名無しさん
2010/06/04(金) 22:13:25templateクラスのメンバとかどうすんべ
0062デフォルトの名無しさん
2010/06/04(金) 22:13:54最終的なコードサイズが小さい方が速いことは気づくはずだが。
L1でもL2でもメモリでも速い方に収まっていた方が良いに決まってるが。
0063デフォルトの名無しさん
2010/06/04(金) 22:17:520064デフォルトの名無しさん
2010/06/04(金) 22:20:43C++だとまず遅くなるがな。
メモリに読みに行くより、関数コールと復帰のコストが高い場合。
C++、アセンブラだとそう複雑な手続き無いから、メモリ読む方が遅い。
0065デフォルトの名無しさん
2010/06/04(金) 22:35:25> 最終的なコードサイズが小さい方が速いことは気づくはずだが。
コードサイズは全く考えず、コードの読みやすさ・保守性だけ考えてます。速さなんぞ二の次
0066デフォルトの名無しさん
2010/06/04(金) 22:39:090067デフォルトの名無しさん
2010/06/04(金) 23:52:310068デフォルトの名無しさん
2010/06/05(土) 00:34:53これは蓄積・経験がないとプログラム出来ないようになっている。
経験少ないやつは太刀打ちできない仕組みになっている。
速度を求めるために書き換えるなら良いが。
第一言語にすべきではない。
0069デフォルトの名無しさん
2010/06/05(土) 00:37:02PHP、C#、HSP。
これだけあれば事足りる。
C言語より生産性は、10倍はいいな。
C言語で1ソフト開発している間に10個は出来る。
0070デフォルトの名無しさん
2010/06/05(土) 01:02:15でも10倍遅かったりバグったりしたら元も子もないよね
0071デフォルトの名無しさん
2010/06/05(土) 01:05:4110倍遅いくらいなら全然許容範囲。
むしろ、プログラムがシンプルになるのでバグが減る。
0072デフォルトの名無しさん
2010/06/05(土) 01:07:45なるほど。
では10倍が許容できない要件の場合はどうするの?
0073デフォルトの名無しさん
2010/06/05(土) 01:13:00これつかっとけ。PHP -> C言語 -> バイナリ
とコンパイルするコンパイラ。
速度はうまくやればC言語と変わらない。
0074デフォルトの名無しさん
2010/06/05(土) 01:14:33使わないけど。
0075デフォルトの名無しさん
2010/06/05(土) 03:15:28GUI中心にC++を捨て去れると思うが
0076デフォルトの名無しさん
2010/06/05(土) 03:29:550077デフォルトの名無しさん
2010/06/05(土) 03:39:49ただし配布できる形にはなっていない。
0078デフォルトの名無しさん
2010/06/05(土) 03:41:55単体のexeではなくて持ち運びが出来ない。
0079デフォルトの名無しさん
2010/06/05(土) 04:50:11外部txtファイルを複数回読み込むfunctionを作っているのですが、二回目以降が上手く読み込めません。
(Header省略)
void readfile (string &FileName, ifstream &inFile)
{
ifstream infile;
string FileName;
(中略)
for (int i = 0; i <3; i++)
{
cin >>FileName;
inFile.open(FileName.c_str());
while (inFile.fail())
{
inFile.clear();
cout << "invalid file name, re-enter:";
cin >> FileName;
inFile.open(FileName.c_str());
}
}
}
0080デフォルトの名無しさん
2010/06/05(土) 04:51:32http://codepad.org/txrScMGg
上記のように、グローバルな位置にenumを置くのはタブーなのでしょうか?
それとも、あっても障害にはならないからどうでもいいのでしょうか?
008179
2010/06/05(土) 04:54:21すいません。正しくは以下
(Header省略)
void readfile (string &FileName, ifstream &inFile)
{
for (int i = 0; i <3; i++)
{
cin >>FileName;
inFile.open(FileName.c_str());
while (inFile.fail())
{
inFile.clear();
cout << "invalid file name, re-enter:";
cin >> FileName;
inFile.open(FileName.c_str());
}
(中略・各種データ操作)
inFile.clear();
}
}
ソフトはMSVisual Studio2008
これ実行すると二回目以降、ファイルの名前指定すると必ずファイル名が違います言われるんです……何が悪いんでしょう
0082デフォルトの名無しさん
2010/06/05(土) 05:17:38unscoped enumは、その宣言されたスコープに、名前を導入するから、
その例のように、グローバル名前空間で、あまりにも簡単すぎる名前だと、
何かと面倒だな。
C++0xから導入される、scoped enumでは、そういう問題もなくなる。
0083デフォルトの名無しさん
2010/06/05(土) 05:45:27inFile.close(); してないから。
0084デフォルトの名無しさん
2010/06/05(土) 06:14:24違うなら、(中略・各種データ操作)の中にカレントディレクトリを変更する操作があるとか。
0085デフォルトの名無しさん
2010/06/05(土) 06:41:370086デフォルトの名無しさん
2010/06/05(土) 06:42:25最後のinFile.clearの後にinFile.close()入れても上手くいかないです・・
>>84
いや、txtから数列読み取って計算とかするだけでディレクトリ移動とかはしないです
008779
2010/06/05(土) 06:58:45(coutいくつか追加しただけ)
セーブせずにrunしたわけでもないのになんでよ。訳わからん
お騒がせしました・・・・
0088デフォルトの名無しさん
2010/06/05(土) 07:10:500089デフォルトの名無しさん
2010/06/05(土) 07:15:18> 100%まったく関係ないところを修正してからrunしなおしたら上手くいくようになりました
あるあるwwww
0090デフォルトの名無しさん
2010/06/07(月) 03:36:47Gdiplus::Graphics* g1 = Gdiplus::Graphics::FromHDC(hdc);
Gdiplus::Graphics* g2 = new Gdiplus::Graphics(hdc);
Gdiplus::GdiplusShutdown()
delete g1; //error
delete g2; //error
上記を実行しようとするとdelete部分でエラーが出てきます。
しかし、GdiplusShutdownの前にdeleteするときちんと解放されます。
これはdeleteしなくてもGdiplusShutdownがメモリを解放していると考えていいのでしょうか?
それともdeleteしないとメモリリークが発生するのでしょうか?
0091デフォルトの名無しさん
2010/06/07(月) 03:52:180092デフォルトの名無しさん
2010/06/07(月) 08:09:420093デフォルトの名無しさん
2010/06/07(月) 09:00:08DEF_SP_HOGE(int)
DEF_SP_HOGE(char)
DEF_SP_HOGE(short)
DEF_SP_HOGE(long)
・・・
#undef DEF_SP_HOGE
みたいな感じで局所的に使うマクロを重複させないテクニックみたいなのってありますか?
DEF_SP_HOGEが定義されてればDEF_SP_HOGE_で同じことをやって
それも定義されてたらDEF_SP_HOGE__・・・みたいな感じで
0094デフォルトの名無しさん
2010/06/07(月) 09:22:30局所的なやつはちゃんと #undef する。局所的じゃないやつはライブラリ名とか含めた
プリフィックス付きにする。これで問題ないだろ。
0095デフォルトの名無しさん
2010/06/07(月) 09:53:36setw(X)中に string + int + string を表示させるのってどうやるんだっけか
まぁ具体的には表示の番号割り振りで"[" int "]" みたいな修飾したいだけなんだけど
0096デフォルトの名無しさん
2010/06/07(月) 11:22:55setw()とやらの仕様は知らんが、文字列と数値を連結したいのならsprintf()かstringstreamかboost::format辺りではどうか。
# lexical_castでもできるか。
0097デフォルトの名無しさん
2010/06/07(月) 13:16:09「cout << setw (15) << "etcetc" << "blah"<<endl;」 すると
「etcetc_________blah」
になるみたいな。 解ると思うけどアンダーバーは空白でヨロ。
0098デフォルトの名無しさん
2010/06/07(月) 13:17:40違う数字を同じ例内で使うとかどんだけだ俺。
0099デフォルトの名無しさん
2010/06/07(月) 13:27:240100デフォルトの名無しさん
2010/06/08(火) 19:18:56C++では何使えばいいの?なんとなくstdio.hはインクルードしたくないんだけど
0101デフォルトの名無しさん
2010/06/08(火) 19:28:03■ このスレッドは過去ログ倉庫に格納されています