C++相談室 part93
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/12/27(火) 03:00:31.85ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part92
http://toro.2ch.net/test/read.cgi/tech/1320339482/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.77【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1323692486/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0002デフォルトの名無しさん
2011/12/27(火) 03:01:07.68[C++ FAQ]
http://www.parashift.com/c++-faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://en.cppreference.com/w/cpp (英語)
http://ja.cppreference.com/w/cpp (↑の日本語訳だけどまだ未完)
[Stroustrup]
http://www2.research.att.com/~bs/
[C++ International Standard]
http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50372
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。
0003デフォルトの名無しさん
2011/12/27(火) 03:01:21.80[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デフォルトの名無しさん
2011/12/27(火) 03:01:36.34amazon C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
http://www.amazon.co.jp/b/?node=754384
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/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714833/ (翻訳)
Exceptional C++ Style
http://www.amazon.com/exec/obidos/ASIN/0201760428/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
0005デフォルトの名無しさん
2011/12/27(火) 03:01:46.07Effective 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/
0006デフォルトの名無しさん
2011/12/27(火) 03:02:14.470007デフォルトの名無しさん
2011/12/27(火) 03:02:44.67環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0008デフォルトの名無しさん
2011/12/27(火) 03:06:49.86まだ終わってないぞ
壁紙にしてね!
ttp://www2.research.att.com/~bs/Bjarne.jpg
0009デフォルトの名無しさん
2011/12/27(火) 03:21:31.150010デフォルトの名無しさん
2011/12/27(火) 07:33:10.63そう言えばランタイムライブラリのDLLって
テンプレートでも std::vector<int> とか基本的なものくらいは
含んでたりするんだろうか?
0011デフォルトの名無しさん
2011/12/27(火) 07:59:16.560012デフォルトの名無しさん
2011/12/27(火) 08:42:33.23exportが無謀って事はすぐにわかるだろ。
0013デフォルトの名無しさん
2011/12/27(火) 09:33:16.13class Hoge {
friend class FactoryA;
class FactoryB;
private:
Hoge(int init);
// ry
};
class FactoryA {
private:
int i;
public:
FactoryA(void) : i(0) { }
Hoge * Create(void) { return new Hoge(++i); }
};
class FactoryB {
private:
int i;
public:
FactoryB(void) : i(0) { }
Hoge * Create(void) { return new Hoge(++i); }
};
パッと見どちらとも同じような気がするのですが
0014デフォルトの名無しさん
2011/12/27(火) 09:39:18.430015デフォルトの名無しさん
2011/12/27(火) 11:41:47.45何も無いようになりますか?
0016デフォルトの名無しさん
2011/12/27(火) 11:57:27.420017デフォルトの名無しさん
2011/12/27(火) 12:13:57.34それ使えば出来ませんか?
factoryをテンプレート型として
体が空のときはその機能を使い
factory.a()は右辺値の定数だから
何もすることが無いみたいなこと
なりませんか?
0018デフォルトの名無しさん
2011/12/27(火) 12:19:30.84小さい関数はインライン展開を期待したほうがいいんじゃないか?
0019デフォルトの名無しさん
2011/12/27(火) 12:25:12.63最適化するもなにも、空の関数はそもそも何もしないので、
ちょっと何言ってるかわからないですね。
0020デフォルトの名無しさん
2011/12/27(火) 12:29:47.590021デフォルトの名無しさん
2011/12/27(火) 12:34:07.580022デフォルトの名無しさん
2011/12/27(火) 12:50:46.39tmp> g++ -S test.cc && cat test.s
0023デフォルトの名無しさん
2011/12/27(火) 13:39:49.61typedef int type;
};
struct B : A{
type a;
} b;
&bと&(b.a)が同じアドレスをさしてほしいのですが
データメンバのないクラスを継承したときに
サイズが増えないようにする方法はありませんか?
002423
2011/12/27(火) 13:55:22.69関数だけが定義してあるクラスを複数継承したら
サイズがどんどん増えていってしまいました。
ttp://sites.google.com/site/boostjp/tips/operators
これとは少し違うのですが、これも演算子だけが定義してある
クラスを継承していると思うのですが
この場合はサイズが増えてしまうのでしょうか?
それとも増えないようにする方法があるのでしょうか?
0025デフォルトの名無しさん
2011/12/27(火) 15:18:15.80Aは空クラスなのでサイズ1
Bは変数があるからそのサイズになる
なのでサイズは必ず増える
0026デフォルトの名無しさん
2011/12/27(火) 15:25:55.72&b == &b.a
になると思うんだが
0027デフォルトの名無しさん
2011/12/27(火) 15:28:35.330028デフォルトの名無しさん
2011/12/27(火) 15:32:00.59template <class Derived> class A {
protected:
~A(void) { }
public:
typedef int type ;
} ;
class B : public A<B> {
public:
type a ;
} ;
とりあえずこう書いてあとはコンパイラの気分しだい
002923
2011/12/27(火) 15:34:12.73継承時にサイズが0として扱われない条件というのがあるのでしょうか。
情報の後出しになってしまい申し訳ないのですが
template<typename T>
struct ptr_convertable{
operator T*(){
return *(T**)this;
}
};
struct my_int_ptr : ptr_convertable<int>{
int *p;
};
int a;
my_int_ptr b;
b.p = &a;
int *c = b;
こういう感じのことをやろうとしています。
003023
2011/12/27(火) 15:47:37.76struct B : A{};
struct C{ operator int(){} };
struct D : C{};
struct E : B, D{};
struct F{int a;};
struct G : F{};
struct H : E, G{};
struct I : G, E{};
int a = sizeof(A); //1
int b = sizeof(B); //1
int c = sizeof(C); //1
int d = sizeof(D); //1
int e = sizeof(E); //1
int f = sizeof(F); //4
int g = sizeof(G); //4
int h = sizeof(H); //5
int i = sizeof(I); //5
クラスの内容にはあまり関係ないようです。
003123
2011/12/27(火) 15:55:00.89>>27 >>28
protectedデストラクタを書いてみましたが結果は変わりませんでした。
変換対象のクラスが多いので、こうすれば1行で書けるかと思ったのですが
なんか別の方法はないでしょうか。
マクロであきらめようかな。
0032デフォルトの名無しさん
2011/12/27(火) 17:11:35.93多重継承で親が重なる場合に増えてるね。
0033デフォルトの名無しさん
2011/12/27(火) 17:39:37.10それだと仮想関数テーブルの分どんどん増えると思うけど。
0034デフォルトの名無しさん
2011/12/27(火) 19:30:47.70最適化してバックトレースとってみ。
リンケージが同じなら消失するから。
0035デフォルトの名無しさん
2011/12/27(火) 19:34:47.21つかアドレス一緒にして何するつもりよ
0036デフォルトの名無しさん
2011/12/27(火) 20:19:02.71> 多重継承で親が重なる場合に増えてるね
全ての基底クラス部分を区別できる形で表現できる必要があるからな。
struct B {};
struct D1 : B {};
struct D2 : B {};
struct D12 : D1, D2 {};
D12 * pd12 = new D12; // 1
D1 * pd1 = pd12; // 2
D2 * pd2 = pd12; // 3
B * pbd1 = static_cast<D1 *>(pd12); // 4
B * pbd2 = static_cast<D2 *>(pd12); // 5
1と2,3は型が違う。4,5は型が同じなのでアドレスを変えて違いを出す。
0037デフォルトの名無しさん
2011/12/27(火) 20:19:50.47C++はどうしてもCより抽象度が高くなるからアドレス関係をいじると
あまり無茶は出来ないよな
0038デフォルトの名無しさん
2011/12/27(火) 20:34:58.10大阪市役所・自治労・大阪市労働組合・日教組・大阪市教育委員会・自民党・共産党・社民党・関西電力・住友グループ
・毎日放送・毎日新聞・関西経済連合・日本原子力発電株式会社 ・ 週刊文春・週刊新潮・NHK・朝日新聞・読売新聞
・部落解放同盟・朝鮮総連・在日本大韓民国民団・日本遊技関連事業協会・全日本遊技事業協同組合連合会・日本弁護士連合会・生活保護受給者・反日左翼・9条の会・革マル派・中核派
VS
橋下徹/維新の会
大阪市民・みんなの党・国民新党・亀井静香・石原慎太郎・東国原英夫
様子見:公明
0039デフォルトの名無しさん
2011/12/27(火) 21:12:02.53exportじゃなくて明示的実体化の話だよ
0040デフォルトの名無しさん
2011/12/27(火) 22:50:38.50それとDLLだけとじゃさっぱり分からんのですけど。
0041デフォルトの名無しさん
2011/12/28(水) 01:26:43.45明示的な実体化を行うと、別リンケージに関数の実体が生成される。
DLLでも同じ話。実体がある以上他のDLLやEXEで使用できる。
てか、このへんは初歩的な話じゃ・・・
0042デフォルトの名無しさん
2011/12/28(水) 01:41:31.98それ、結局派生側の指定位置に生の T* をメンバで持つことを強要してんじゃん。
ptr_convertable が T* 持てば全て自然に解決する話じゃないの?
0043デフォルトの名無しさん
2011/12/28(水) 01:42:13.22CにできてC++にできないアドレス操作なんて無いだろ。
0044デフォルトの名無しさん
2011/12/28(水) 05:14:11.43いやそういう意味じゃない
Cだと構造体の中に何かを入れて後から伸ばすとか割りと見えやすかったけど
C++のクラスで同じ事をしようとすると仮想関数やら大きさ最低1バイトの縛りやら
あと継承なんかしていたら伸ばそうとした途端に他のメンバが壊れたり
いろいろ気を使うという事を言いたかった
0045デフォルトの名無しさん
2011/12/28(水) 06:28:37.89配列以外のアドレス(ポインタ)加減算がCなら安全なことがあると思ってるんなら
おおかたただの勘違い。規格上認められる操作は大差ない。
たまたまプログラマの間違った期待どおりに動いてしまうことがCのほうがいくらか
多い(C++のほうがいくらか少ない)というだけのこと。
実際の違いと言えるところとして可変長配列と構造体中の 0 長配列メンバがあるけど、
それらも「抽象度」がどうのこうのではない。
http://seclan.dll.jp/c99d/c99d04.htm
0046デフォルトの名無しさん
2011/12/28(水) 06:38:56.59vtableとかどこにくっついているか実装依存なので扱いにくいのではと思ったんだけど
0047デフォルトの名無しさん
2011/12/28(水) 07:06:16.11vtable以外にも、オブジェクトのレイアウトに関して実装依存なことはパディングやら
アライメントやらCの範囲でもいくらでも考えられるからね。
http://www.kouno.jp/home/c_faq/c16.html#5
> 16.5: このプログラム、あるマシンではうまく走るのに、別のマシンだと変 な結果を返す。もっと変なことに、デバッグ用の出力を付けたり外し たりすると症状が違ってくる。
> A: おかしくなる可能性のあるものはたくさんある。以下に可能性の高い ものをいくつか示す。
...
> 対象となる具体的なシステムで コードの生成されかたを決 め付けて、こういう使いかたを考え付くとは俺って頭がいい なと思っていることはなんでも
0048デフォルトの名無しさん
2011/12/28(水) 07:09:56.13構造体だと思ったんだが
>>47のリンクは知ってる
トリッキーな事をすると必ずリスクは付いて回る
しかしC++はそのトリッキーな事が致命的な結果をもたらす率が高いと思う
0049デフォルトの名無しさん
2011/12/28(水) 07:31:04.25反応する所が違うだろ
クラスに対してトリッキーな事(強制キャストが必要な操作)を
すんなってのが要点なんだから。
別にPODなコードは絶対安全とかそんな話を
してるわけじゃないだろ。
0050デフォルトの名無しさん
2011/12/28(水) 07:43:35.04まあいいだろ
俺は前スレからの流れで書いたつもりだったんだが汲んでもらえなかったようなので
クラスはPODにいろいろ厄介な物が(もちろんメリットの方が遥かに大きいが)付いているので
あまり変な事はしない方がいいよって意味で書いた
PODも規格外の事をすれば当然危ない
当たり前の事だよな
0051デフォルトの名無しさん
2011/12/28(水) 07:45:26.57問題を起こす率の高い低いを考える意味がわからんな。
まぁ「思う」のは自由だよね。
0052デフォルトの名無しさん
2011/12/28(水) 08:44:15.45文字列関係は大体入ってた。complexやnumeric_limitsなんかも入ってることはあるな。
0053デフォルトの名無しさん
2011/12/28(水) 09:00:15.72いやだから「規格外」である事は承知で、Cで無茶をして動かしている例はいくらでもある
プログラム組んだ事ないのか?
でもC++でそれをやろうとするとほとんど不可能になると言いたいだけの話
お前アスペだろ
0054デフォルトの名無しさん
2011/12/28(水) 09:09:48.07ラップするから見えないだけで
0055デフォルトの名無しさん
2011/12/28(水) 12:33:24.42相手しないでおこう
0056デフォルトの名無しさん
2011/12/28(水) 12:35:38.71>>55
0057デフォルトの名無しさん
2011/12/28(水) 13:24:02.680058デフォルトの名無しさん
2011/12/28(水) 13:38:54.970059デフォルトの名無しさん
2011/12/28(水) 15:31:31.63そういや、vtableなんてポインタじゃ無くても実装できるしな。
動的リンクを考えなきゃ、コンパイラが全てのクラスのvtableを
直列した配列にして、オブジェクトには、その配列のオフセットを
持たせるだけってのでもいいわけだしな。
0060デフォルトの名無しさん
2011/12/28(水) 17:35:07.64class Hoge {
public:
template <class Iterator>
virtual void Func1(Iterator begin, Iterator end) = 0 ;
template <class Inserter>
virtual void Func2(Inserter inserter) const = 0 ;
} ;
class HogeEx : public Hoge {
std::vector<int> v;
public:
template <class Iterator>
void Func1(Iterator begin, Iterator end) { v.assign(begin, end); }
template <class Inserter>
void Func2(Inserter inserter) { inserter = v.front(); }
}
みたいな感じで主にイテレーター関係やファンクタを引数に取る関数で使いたいんですけど
0061デフォルトの名無しさん
2011/12/28(水) 17:41:09.060062デフォルトの名無しさん
2011/12/28(水) 17:54:03.06>>60
標準C++の仕様では出来ないけど、boostを使うとそれらしいのは出来るみたい
http://d.hatena.ne.jp/moriyoshi/20090727/1248697647
0063デフォルトの名無しさん
2011/12/28(水) 18:27:38.15それっぽくできました
ありがとうございます
0064デフォルトの名無しさん
2011/12/29(木) 01:17:05.61C++(C)でdllのリソースファイルとして.txtファイルを埋め込んで、そこから文字列を取り出すにはどうしたらよいですか?
検索しても出てこないのはもしかして当たり前のこと過ぎるからでしょうか・・・
0065デフォルトの名無しさん
2011/12/29(木) 01:37:47.410066デフォルトの名無しさん
2011/12/29(木) 01:41:34.87ID_SAMPLE TEXT_DATA DISCARDABLE "text.txt"
リソース名 リソースグループ DISCARDABLE "ファイル名"
http://www.sm.rim.or.jp/~shishido/rctest.html
0067デフォルトの名無しさん
2011/12/29(木) 02:01:52.43BOOL CALLBACK 探すコールバック( HMODULE hModule, LPCWSTR lpType, LPWSTR lpName, LONG_PTR lParam )
{
HRSRC hrsrc = FindResource( hModule, lpName, lpType );
if( hrsrc ) {
void* data = LoadResource( hModule, hrsrc );
if( data ) {
hoge* pwork = (hoge*)lParam;
strcpy( pwork->hage, data );
}
}
return TRUE;
}
void 探す関数()
{
hoge work;
HMODULE hModule = LoadLibrary( "dllのパス" );
if( hModule ) {
EnumResourceNames( hModule, RT_STRING, 探すコールバック, (LONG_PTR)&work );
FreeLibrary( hModule );
}
}
あぁ、ファイル埋め込みならRT_STRINGじゃなくてRCDATAか
0068デフォルトの名無しさん
2011/12/29(木) 02:13:11.190069デフォルトの名無しさん
2011/12/29(木) 06:17:59.89分からないのなら黙ってろよカス
0070デフォルトの名無しさん
2011/12/29(木) 09:08:42.19ありがとうございます
なるほど、やはり一発でポンというのはないのですね
またわからないことが出来たらよろしくお願いします
0071デフォルトの名無しさん
2011/12/29(木) 09:25:50.01もっとも適したデータ構造をおしえてください。
0072デフォルトの名無しさん
2011/12/29(木) 10:19:04.720073デフォルトの名無しさん
2011/12/29(木) 10:20:11.710074デフォルトの名無しさん
2011/12/29(木) 11:43:51.930075デフォルトの名無しさん
2011/12/29(木) 11:50:20.640076デフォルトの名無しさん
2011/12/29(木) 11:50:43.96std::vector<std::vector<>*>にしとくべき。
ポインタだけならサイズ変更しても負荷は小さい。
0077デフォルトの名無しさん
2011/12/29(木) 11:52:02.050078デフォルトの名無しさん
2011/12/29(木) 12:05:26.22vectorのリストがいいよ
先頭のベクタの長さをNとする
先頭を除いたベクタのリストの長さが合計で2Nに達したら
先頭を倍+αに伸ばしてそこに先頭を除いたベクタの内容をコピーして先頭以外を解放する
0079デフォルトの名無しさん
2011/12/29(木) 12:09:31.820080デフォルトの名無しさん
2011/12/29(木) 12:29:23.890081デフォルトの名無しさん
2011/12/29(木) 13:07:34.03メモリ食いすぎる。
STLportがマシだが。
Googleとか頻繁に更新してるのにSTLportのメモリと速度に追いつけず。
0082デフォルトの名無しさん
2011/12/29(木) 13:20:46.52stlport_std::hash_map
Insert Time: 8.859 sec. Search Time: 2.875 sec.
ページフォールト数: 11007 最大ワーキングセットサイズ: 42045.4KB
stlport_std::map
Insert Time: 12.265 sec. Search Time: 14.953 sec.
ページフォールト数: 11422 最大ワーキングセットサイズ: 46846.0KB
std::map VC9
Insert Time: 14.078 sec. Search Time: 13.953 sec.
ページフォールト数: 14323 最大ワーキングセットサイズ: 58740.7KB
stdext::hash_map VC9
Insert Time: 10.109 sec. Search Time: 7.5 sec.
ページフォールト数: 13922 最大ワーキングセットサイズ: 56836.1KB
google::sparse_hash_map ver.1.12
Insert Time: 51.921 sec. Search Time: 9.407 sec.
ページフォールト数: 11949 最大ワーキングセットサイズ: 48664.6KB
google::dense_hash_map ver.1.12
Insert Time: 10.14 sec. Search Time: 5.375 sec.
ページフォールト数: 29635 最大ワーキングセットサイズ: 82599.9KB
0083デフォルトの名無しさん
2011/12/29(木) 13:24:36.39消費メモリサイズには影響は無いと思うが、ページフォールトによる速度低下はあり得る。
google::dense_hash_mapなどはメモリ食うから、容量が大きいマシンでつかったら速度は一番になり得る。
0084デフォルトの名無しさん
2011/12/29(木) 14:16:07.330085デフォルトの名無しさん
2011/12/29(木) 14:42:32.010086デフォルトの名無しさん
2011/12/29(木) 15:10:51.18ここに貼るのが無理でもblogの方にでも貼っていただければ
0087デフォルトの名無しさん
2011/12/29(木) 15:35:18.00#include <string>
#include <time.h>
#include <unordered_map>
#include <windows.h>
#include <psapi.h>
#pragma comment (lib, "psapi.lib")
using namespace std;
int InsertNum=500000, SearchNum=4000000; double timer();string strgen();void meminfo();
int main() {
tr1::unordered_map<string,int> hmap; int i; timer();
for(i = 0; i < InsertNum; i++) hmap.insert( make_pair( strgen(), i ) );
printf("Insert Time: %fsec.\n", timer());
timer(); for(int n=0; n<100; n++) {
string find = strgen();
for(i = 0; i <= SearchNum/100; i++) hmap.find(find); }
printf("Search Time: %fsec.\n", timer());
meminfo(); }
double timer() { static int n=-1; static unsigned int cl[2];
if(n==-1) { n=0; cl[0]=clock(); return 0; }
n=1-n; cl[n]=clock(); return (cl[n] - cl[1-n]+0.0)/CLOCKS_PER_SEC; }
unsigned int randxor() { static unsigned int t, x=123456789,y=362436069,z=521288629,w=88675123;t=x^(x<<11); x=y; y=z; z=w; return w^=(w>>19)^t^(t>>8); }
string strgen() { string str; for(int j = 0; j < 1+randxor()%4; j++) {
int r=randxor(); for(int n=0; n<32; n+=2) str+=(char)('a'+(r>>n)%4); }
return str; }
void meminfo() { PROCESS_MEMORY_COUNTERS memInfo = {0};
GetProcessMemoryInfo( GetCurrentProcess(), &memInfo, sizeof(memInfo) );
printf("ページフォールト数: %d\n", memInfo.PageFaultCount);
printf("最大ワーキングセットサイズ: %0.1fKB\n", 0.001*memInfo.PeakWorkingSetSize);
printf("最大ページングファイル使用サイズ: %0.1fKB\n", 0.001*memInfo.PeakPagefileUsage);}
0088デフォルトの名無しさん
2011/12/29(木) 21:58:38.76| ┏━━━┓ 従軍慰安婦は反日朝日新聞の捏造でした。
| ┃借収安┃ デマだらけの報道に注意しよう
| ┃三三婦┃
| ┃○○大┃
| ┃○○募┃
| ┃○圓集┃
| ┃圓以 ┃
| ┃迄上 ┃_
\┃可 ┃ \
┗━━━┛ \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
http://img04.ti-da.net/usr/wishcomestrue/t02200190_0220019010786142693.jpg
0089デフォルトの名無しさん
2011/12/30(金) 02:29:27.450090デフォルトの名無しさん
2011/12/30(金) 22:49:56.840091デフォルトの名無しさん
2011/12/31(土) 09:36:49.83新たにデータをつくりませんよね?
あと順序を維持したままというのはmergeすると
ソートが勝手に行われるということですか?
単純に後ろにくっ付けたいときはどうしたらいいですか?
あとdequeやvectorで2つのやつを新たなデータを作らずにマージできますか?
0092デフォルトの名無しさん
2011/12/31(土) 10:04:40.11STLのほかのコンテナでは無理
setやmapならできそうな気もするけどSTLには残念ながらそういう機能はない
ソートせずにくっつけたいだけならspliceを使う
0093デフォルトの名無しさん
2011/12/31(土) 10:11:47.79そしたら低負荷だ。
0094デフォルトの名無しさん
2011/12/31(土) 10:17:15.52派生可能かつ生成関数を通じてのみ生成可能なクラス群を書きたいのだけど
いちいち全クラスにprotectedコンストラクタを書くのが面倒です
(例)
class X {
protected:
// CTORS
virtual ~X(void) {};
public:
static X * Create(void) { return new X; }
};
class Y : public X {
protected:
// CTORS
public:
static Y * Create(void) { return new Y; }
};
class Z : public Y {
private: // final的な意味で
// CTORS
public:
static Z * Create(void) { return new Z; }
};
0095デフォルトの名無しさん
2011/12/31(土) 11:32:10.13出来ないんですね。
おとなしくvector型の配列つくりますね。
0096デフォルトの名無しさん
2011/12/31(土) 13:05:16.37無理じゃね
そもそも何でコンストラクターはダメで
Createならいいの?
0097デフォルトの名無しさん
2011/12/31(土) 13:11:33.81enable_shared_from_thisとかその他のフックがついてる時
あるいはCreateでマネージャに登録などの他の処理もしてる時
とかですかね
0098デフォルトの名無しさん
2011/12/31(土) 17:24:46.05http://cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg
http://cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg
テレビに騙されるな(自称街の人-台本読んでるだけの業者)
0099デフォルトの名無しさん
2012/01/01(日) 10:33:04.62unique_ptrのweak_ptrみたいなものが欲しいのだけどそういうイディオムとかって有りませんか?
0100デフォルトの名無しさん
2012/01/01(日) 11:22:44.360101デフォルトの名無しさん
2012/01/01(日) 13:20:36.24#include <iostream>
#include <stdexcept>
template<typename T> void f(std::unique_ptr<T> const& p) {
if (p.get()) {
std::cout << *p << std::endl;
} else {
throw std::invalid_argument("no ownership");
}
}
int main() {
std::unique_ptr<int> p(new int(0));
f(p);
std::unique_ptr<int> q = std::move(p);
try { f(p); }
catch (std::invalid_argument const&) {
std::cerr << "p lost ownership" << std::endl;
}
f(q);
}
こんな使い方していいのだろうか・・・
0102デフォルトの名無しさん
2012/01/01(日) 14:08:38.330103デフォルトの名無しさん
2012/01/01(日) 16:37:02.96std::moveで他のunique_ptrに所有権が移ればget() == nullptrになる
それ以外で無効になるときってどういうのがありますか?
0104デフォルトの名無しさん
2012/01/01(日) 16:53:04.580105デフォルトの名無しさん
2012/01/01(日) 17:23:22.11なるほど明示的な開放ですか、確かに弱参照っぽく使うとなるとそういうケースも当然考えられますね
そこでこの操作をunique_ptrのデストラクタにおける所有権放棄+リソースの解放を手作業で行うものと見做して
rp = p.release();とした後にp.get_deleter()(rp);としましたが、その直後のpはreleaseの仕様よりp.get() == nullptrとなり
unique_ptrの参照から無効となったことを検出できているようですが、これでは駄目なのでしょうか?
これ以外にはdelete p.get();のような対処不可能なものしか考えられないんですが、他にも見落としがあるという気もします
0106デフォルトの名無しさん
2012/01/01(日) 17:29:54.060107デフォルトの名無しさん
2012/01/01(日) 18:38:38.480108デフォルトの名無しさん
2012/01/02(月) 00:16:22.68void SetValue(const shared_ptr<Value> & value) { ... }
みたいな引数のconst参照渡しは認められているけど、
const shared_ptr<Value> & GetValue() const { ... }
みたいなconst参照返しは認められていないのはなぜ?
0109デフォルトの名無しさん
2012/01/02(月) 00:20:28.940110デフォルトの名無しさん
2012/01/02(月) 00:23:02.84それでも、問題ないと思うけど、
shared_ptrは自身のコピーを作るときにカウント増やすのであんまり参照返しにする意味はないと思う。
0111デフォルトの名無しさん
2012/01/02(月) 05:22:03.18shared_ptrを参照返しするばあい、
shared_ptrのポインタ(参照)を取得→参照返し→呼び出し側の処理
だから、呼び出し側の処理で参照カウントのインクリメントをする前に、
参照カウントが0になるような処理が他のスレッドとかで発生する(するのか?)とまずいと思ったんだけど・・・
shared_ptrを値返し(shared_ptr<Value> GetValue() const)するばあい、
参照カウントのインクリメント→値返し→呼び出し側の処理
だから、途中でカウントが0になることはあり得ないという考え
0112デフォルトの名無しさん
2012/01/02(月) 05:37:37.05・GetValue呼び出し
・他スレッドで内部スマポを破棄
・GetValueの戻り値コピー(空スマポが返る)
という順番になる可能性はある。
0113デフォルトの名無しさん
2012/01/02(月) 07:20:55.20つまるところ微妙に大きい構造体のメンバ変数を値返しするか、参照返しするかの違いか
0114デフォルトの名無しさん
2012/01/02(月) 08:52:45.66スレッドBにスマポを保持
この時点でカウントは2
スレッドA内のスマポ保持者が同じスレッドにスマポを参照で返そうが値で返そうが問題ない
返してる途中でスレッドB内のスマポが破棄されてもカウントは1以上と保証されてる
やってはいけないのは何の防御もせずにスレッド間で直接スマポの参照をやり取りすること
まあそんなことする奴はいないと思うが
0115デフォルトの名無しさん
2012/01/02(月) 09:25:55.29作れなければどうしたら好いですか
0116デフォルトの名無しさん
2012/01/02(月) 09:44:22.44list<a>
0117デフォルトの名無しさん
2012/01/02(月) 12:12:05.55なんでstd::list<int[2]>なんですか?
std::list<int>じゃダメなんですか?
0118デフォルトの名無しさん
2012/01/02(月) 15:02:12.310119デフォルトの名無しさん
2012/01/02(月) 16:26:27.800120デフォルトの名無しさん
2012/01/03(火) 01:03:05.84>やってはいけないのは何の防御もせずにスレッド間で直接スマポの参照をやり取りすること
参照返しはダメだとして、値返しならスレッドセーフになる?
あと、スレッド間の参照渡しも危ない?
BOOST_SP_DISABLE_THREADSを宣言したばあい、スレッド間での
・値渡し
・参照渡し
・値返し
・参照返し
の動作はどうなりますか?
0121デフォルトの名無しさん
2012/01/03(火) 12:16:23.78コンストラクタとデストラクタ
}
class Super:Base{
コンストラクタ1
コンストラクタ2
}
コンストラクタ1:Baseコンストラクタ{
(コンストラクタ2をオーバーロード)
}
コンストラクタ2:Baseコンストラクタ{
...
}
こうすると、コンストラクタ1を呼び出した時、多分そのスコープを抜けるときにBaseのデストラクタを呼び出して
困ったことになるんですが回避方法はありますか?
0122121
2012/01/03(火) 12:39:01.09コンストラクタ2の内容を別の関数にしてそれを実行させることで回避させました
0123デフォルトの名無しさん
2012/01/03(火) 13:10:23.46>コンストラクタ2の内容を別の関数にしてそれを実行させることで回避させました
多分、対処はそれで正しい。が、
・オーバーロードって用語、意味間違ってるんじゃね?
・Super→Sub あるいは Base→Derived なので Base、Super って書かれるとはぁ?って感じがする
・コンストラクタの中で他のコンストラクタを呼び出すことは出来ない。多分、一時オブジェクトを生成してるだけ。
struct Derived : Base
{
Derived() : Base() {}
Derived(int n) : Base()
{
Derived(); // 一時オブジェクトを生成してるだけ
}
};
・「ちょっと調べて見ましたがコンストラクタはコンストラクタでオーバーロードすべきではなさそうですね」
標準ライブラリでも普通にオーバーロードしてると思うが。
0124デフォルトの名無しさん
2012/01/03(火) 14:20:14.86delegating constructor
0125デフォルトの名無しさん
2012/01/03(火) 15:59:58.36char c[4] = {'a','\0','*','*'};
c は文字列を表していますが、実際は 4byte 固定のバイナリデータで、\0 の後ろにはゴミが入っています。
3文字以下の場合は \0 終端が保証されていますが、4文字ちょうどの場合は \0 終端されていません。
この c を std::string に変換するにはどうすればいいでしょうか。
案1:
std::string s = std::string(c);
これだと、\0 終端していない場合はうまく変換できません。
案2:
std::string s = std::string(c, 4);
これでうまく行くと思ったのですが、続けて s += "def"; とすると、
s の中身が a \0 * * d e f \0 となってしまいました。4文字というデータがどこかに残っているようです。
理想では a d e f \0 となってほしいです。
自分で \0 を探索して…などすれば上手く行きますが、もっとスマートな方法があればと思います。
よろしくお願いします。
0126デフォルトの名無しさん
2012/01/03(火) 16:23:21.44これくらいしか思いつかん
std::string s = std::string(c, 4);
s.resize(strlen(s.c_str()));
0127デフォルトの名無しさん
2012/01/03(火) 17:32:43.180128デフォルトの名無しさん
2012/01/03(火) 17:41:00.83ああーーそれだ!
うまく行きましたありがとうございます!!
0129デフォルトの名無しさん
2012/01/03(火) 21:44:10.55std::string s(c, std::find(c, c + 4, '\0'));
0130デフォルトの名無しさん
2012/01/03(火) 22:17:51.090131デフォルトの名無しさん
2012/01/03(火) 22:44:30.530132デフォルトの名無しさん
2012/01/03(火) 22:47:03.31「時期尚早の最不適化をしてはならない」原則に反する。
要するに糞コードを書くなってことだろ。
0133デフォルトの名無しさん
2012/01/03(火) 22:50:13.20どっちにしてもそんな初心者向けのルールすら無視して糞コード書いちゃだめだな。
0134デフォルトの名無しさん
2012/01/03(火) 23:30:38.660135デフォルトの名無しさん
2012/01/03(火) 23:35:34.780136デフォルトの名無しさん
2012/01/03(火) 23:48:31.98理由を知りたいなら Effctive STL にも C++ Coding Standards にも載ってるからそれ読めれ。
っていうか、回答者なんだから知ってて当然だと思うんだけどどーなの?
0137デフォルトの名無しさん
2012/01/03(火) 23:56:50.99大して変わらないと思うけど例えば
char c[4] = {'a', '\0', '*', '*'};
std::string s = std::string(c, 4);
std::cout << s << " length: " << s.size() << std::endl;
s.resize(s.find('\0'));
std::cout << s << " length: " << s.size() << std::endl;
0138デフォルトの名無しさん
2012/01/04(水) 00:09:20.400139デフォルトの名無しさん
2012/01/04(水) 00:16:29.56s.resize((s.find('\0') == std::string::npos) ? s.size() : s.find('\0'));
なんか格好悪いなあ
0140デフォルトの名無しさん
2012/01/04(水) 00:18:31.63std::string::size_type si = s.find('\0');
if (si != std::string::npos)
s.resize(si);
0141デフォルトの名無しさん
2012/01/04(水) 00:39:53.13簡単な参照カウンタつきnew/delete を実装したく、Web ページをあさっていたのですが、delete/new の演算子オーバーロードのサンプルをみるかぎり、
class A {
static void *operator new(size_t size) { malloc(size); }
static void operator delete(void *p) { free(p) }
};
という感じで、new/delete の中身は malloc()/free() になっているものしか見当たりませんでした。
これを <cstdlib> を使わずに c++ だけで完結させたいのですが、どうすればいいでしょうか。new/delete をオーバーロードした以上、malloc()/free() 呼び出しは不可避なのでしょうか。
キーワードをいただければありがたいです。よろしくお願いいたします。
0142デフォルトの名無しさん
2012/01/04(水) 00:43:19.710143デフォルトの名無しさん
2012/01/04(水) 01:10:59.02ここで議論してる事ってかなり高度な事ですよね
プログラマ目指したいのですがここの話に参加できる位にならないと話にならない感じですか?
0144デフォルトの名無しさん
2012/01/04(水) 01:27:17.42OSのメモリ関連のAPIを直接呼び出してもいいし(WinならVirtualAllocとかHeapAllocとか)
そんなに大きな領域が必要でないならstatic char mempool[10000]とか確保しといてメモリプールとして少しずつ割り当てていくとかある
0145デフォルトの名無しさん
2012/01/04(水) 01:27:42.98そうかもしれないしそうでないかもしれない精進あるのみ
0146デフォルトの名無しさん
2012/01/04(水) 01:34:47.30そうですね
学校で無双して気持ち良くなってるレベルじゃダメですねw
精進しないとダメだとわからされました><
0147デフォルトの名無しさん
2012/01/04(水) 01:46:22.97boost::poolは?
0148デフォルトの名無しさん
2012/01/04(水) 01:50:11.58boost::poolのリンクが間違ってる
boost/libs/pool/doc/index.html
じゃなくて
boost/libs/pool/doc/html/boost_pool/pool.html
だ
0149デフォルトの名無しさん
2012/01/04(水) 01:50:44.55だった
0150デフォルトの名無しさん
2012/01/04(水) 09:36:17.54できないと話にならないブラック企業もあるし
ずぶのド素人でも研修でちゃんと使い物にしてくれる優良企業もある
0151デフォルトの名無しさん
2012/01/04(水) 11:45:44.45Javaなら3ヶ月でも十分だけど。
0152デフォルトの名無しさん
2012/01/04(水) 11:55:40.490153デフォルトの名無しさん
2012/01/04(水) 12:40:00.82vector<クラス> a(100,クラス(5));
とすると初期化時に呼び出したクラスが解放処理してしまいます。
0154デフォルトの名無しさん
2012/01/04(水) 12:45:27.370155デフォルトの名無しさん
2012/01/04(水) 13:02:12.390156片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 13:30:50.40http://codepad.org/rn3cpaZh
0157デフォルトの名無しさん
2012/01/04(水) 13:31:16.58Deep Copyの問題だよな
代入演算子を書いておけばなおよし
0158デフォルトの名無しさん
2012/01/04(水) 13:58:37.74名前空間内でoperator newなどを定義するなと言ってくるんだが
..\New_test2.cpp:26:82: error: 'void* mzc::operator new(size_t, const mzc_debug_t&)' may not be declared within a namespace
..\New_test2.cpp:43:62: error: 'void* mzc::operator new [](size_t, const mzc_debug_t&)' may not be declared within a namespace
..\New_test2.cpp:47:34: error: 'void mzc::operator delete(void*)' may not be declared within a namespace
..\New_test2.cpp:70:36: error: 'void mzc::operator delete [](void*)' may not be declared within a namespace
..\New_test2.cpp:74:58: error: 'void mzc::operator delete(void*, const mzc_debug_t&)' may not be declared within a namespace
..\New_test2.cpp:91:60: error: 'void mzc::operator delete [](void*, const mzc_debug_t&)' may not be declared within a namespace
規格票は§3.6.2だな
0159片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 14:12:04.44http://codepad.org/y4kz6D2y
今度はBorland C++で失敗する。
0160デフォルトの名無しさん
2012/01/04(水) 14:17:26.14..\New_test3.cpp: In function 'void* operator new(size_t, const mzc_debug_t&)':
..\New_test3.cpp:26:37: error: 'malloc' was not declared in this scope
..\New_test3.cpp: In function 'void operator delete(void*)':
..\New_test3.cpp:56:11: error: 'free' was not declared in this scope
..\New_test3.cpp: In function 'void operator delete(void*, const mzc_debug_t&)':
..\New_test3.cpp:66:11: error: 'free' was not declared in this scope
..\New_test3.cpp: In function 'mzc_debug_t MzcNew(const char*, int)':
..\New_test3.cpp:77:26: error: 'strcpy' was not declared in this scope
std:: と <cstdlib> <cstring> を忘れているだけだと思うが
0161デフォルトの名無しさん
2012/01/04(水) 14:21:03.91効率悪くなってんじゃねーか。読みやすくもないし。どこも良くなっるように見えない。
0162デフォルトの名無しさん
2012/01/04(水) 14:23:24.64だからどれでもいいんだって
find()を使えと言われたから使っただけの話
0163デフォルトの名無しさん
2012/01/04(水) 14:27:24.47char*なら終端は1バイトだけ。
stringは最低でも長さを表すのに4バイト(32ビット)使っている。
それ以上に無駄がある可能性あり。
0164デフォルトの名無しさん
2012/01/04(水) 14:28:52.98string s = ch; もしくは string s = (string) ch;
でいいだろ。
0165片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 14:29:41.72http://codepad.org/u5gfzDHk
0166デフォルトの名無しさん
2012/01/04(水) 14:30:28.96お前さあ
>>125を良く読んでないだろ
>案1:
>std::string s = std::string(c);
>これだと、\0 終端していない場合はうまく変換できません。
これを回避したいと言っているんだけど
0167デフォルトの名無しさん
2012/01/04(水) 14:30:37.400168デフォルトの名無しさん
2012/01/04(水) 14:33:12.95char*を渡されたとき終端は\0で判別するしかないだろう。
それかchar*と一緒にサイズを渡せば解決。
string(ch, size);
0169デフォルトの名無しさん
2012/01/04(水) 14:33:50.95BCCのバージョンは?
俺のは最新のEmbarcadero6.43で問題なし
ところでバグあるんじゃね?このソース
CodeGuard掛けると何か言ってくるぞ
Error 00003. 0x400000 (r) (Thread 0x1200):
Exception 0xC0000005: Access violation at 0x4.
| C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree line 1170:
| _Nodeptr _Lbound(const key_type& _Keyval) const
| { // find leftmost node not less than _Keyval
|> _Nodeptr _Pnode = _Root();
| _Nodeptr _Wherenode = _Myhead; // end() if search fails
|
Call Tree:
0x00406F41(=operator_new1.exe:0x01:005F41) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree#1170
0x0040511A(=operator_new1.exe:0x01:00411A) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree#914
0x00402881(=operator_new1.exe:0x01:001881) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree#888
0x004026F4(=operator_new1.exe:0x01:0016F4) operator_new1.cpp#49
0x00403535(=operator_new1.exe:0x01:002535) operator_new1.cpp#62
0x0040D19F(=operator_new1.exe:0x01:00C19F) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xlocnum#189
0x0040D2BF(=operator_new1.exe:0x01:00C2BF) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xlocnum#124
0x32C5F979(=CC32120MT.DLL:0x01:05E979)
0x32C65399(=CC32120MT.DLL:0x01:064399)
0x32C6533B(=CC32120MT.DLL:0x01:06433B)
0x32C9C66B(=CC32120MT.DLL:0x01:09B66B)
0x32C9CBA9(=CC32120MT.DLL:0x01:09BBA9)
0x32C012BB(=CC32120MT.DLL:0x01:0002BB)
0x7C9624CA(=ntdll.dll:0x01:0214CA)
0x7C81CAAE(=kernel32.dll:0x01:01BAAE)
0170デフォルトの名無しさん
2012/01/04(水) 14:35:30.76だからそれは>>125に既に書いてあるから
ちゃんと読んでから書け
>案2:
>std::string s = std::string(c, 4);
>これでうまく行くと思ったのですが、続けて s += "def"; とすると、
>s の中身が a \0 * * d e f \0 となってしまいました。4文字というデータがどこかに残っているようです。
>理想では a d e f \0 となってほしいです。
>自分で \0 を探索して…などすれば上手く行きますが、もっとスマートな方法があればと思います。
>よろしくお願いします。
0171デフォルトの名無しさん
2012/01/04(水) 14:35:35.76なんだ>>129が書いたんじゃないのか。
お題はfind()を使って効率よく、だよ。
0172デフォルトの名無しさん
2012/01/04(水) 14:36:51.770173デフォルトの名無しさん
2012/01/04(水) 14:37:00.550175デフォルトの名無しさん
2012/01/04(水) 14:39:45.29それはゴミも渡しているんだよ。サイズは1だろが。
0176片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 14:40:01.43どうやらmainの初期化処理と終了処理の内部で::newが使われて
いるのが原因らしい。bool g_initを付けてフラグで指定すると
うまく動くようだ。でもこれって余分なコードだよね?
http://codepad.org/xCEvYC2p
0177デフォルトの名無しさん
2012/01/04(水) 14:40:32.54template <int N>
void func(double (&a)[N]);
みたいな奴か?
0178デフォルトの名無しさん
2012/01/04(水) 14:41:27.31だからゴミを取り除く議論をしてるだろうが
お前全然人のレス読まないのな
0179デフォルトの名無しさん
2012/01/04(水) 14:43:56.89いやそれは関係ないと思う
まだエラーが出るぞ
Error 00003. 0x400000 (r) (Thread 0x0E18):
Exception 0xC0000005: Access violation at 0x4.
| C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree line 1170:
| _Nodeptr _Lbound(const key_type& _Keyval) const
| { // find leftmost node not less than _Keyval
|> _Nodeptr _Pnode = _Root();
| _Nodeptr _Wherenode = _Myhead; // end() if search fails
|
Call Tree:
0x00406F41(=operator_new2.exe:0x01:005F41) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree#1170
0x0040511A(=operator_new2.exe:0x01:00411A) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree#914
0x00402881(=operator_new2.exe:0x01:001881) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xtree#888
0x004026F4(=operator_new2.exe:0x01:0016F4) operator_new2.cpp#49
0x00403535(=operator_new2.exe:0x01:002535) operator_new2.cpp#62
0x0040D19F(=operator_new2.exe:0x01:00C19F) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xlocnum#189
0x0040D2BF(=operator_new2.exe:0x01:00C2BF) C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xlocnum#124
0x32C5F979(=CC32120MT.DLL:0x01:05E979)
0x32C65399(=CC32120MT.DLL:0x01:064399)
0x32C6533B(=CC32120MT.DLL:0x01:06433B)
0x32C9C66B(=CC32120MT.DLL:0x01:09B66B)
0x32C9CBA9(=CC32120MT.DLL:0x01:09BBA9)
0x32C012BB(=CC32120MT.DLL:0x01:0002BB)
0x7C9624CA(=ntdll.dll:0x01:0214CA)
0x7C81CAAE(=kernel32.dll:0x01:01BAAE)
0180デフォルトの名無しさん
2012/01/04(水) 14:47:40.15ゴミを取り除くためにはstring s = ch;でいいだろ。
charのポインタを渡されたらサイズ不明で処理して\0を終端と見なすしかない。
それを自動でやってくれるのがstring s = ch;
0181デフォルトの名無しさん
2012/01/04(水) 14:48:10.940182デフォルトの名無しさん
2012/01/04(水) 14:49:16.16> 4文字ちょうどの場合は \0 終端されていません。
0183片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 14:51:58.17呼ばれてくるかが分からない。
0184デフォルトの名無しさん
2012/01/04(水) 14:52:38.164バイト以内に\0が現れなければそれ以降に\0が出るところまでを一文と見なす。
これが正常動作。
最初に\0を付加しないのがバグ。
0185デフォルトの名無しさん
2012/01/04(水) 14:55:21.430186片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 14:56:48.54ということ? どうすればいいんだ。。。
0187片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 15:05:47.49http://codepad.org/Qz23i49K
0189デフォルトの名無しさん
2012/01/04(水) 15:22:46.37バグじゃなくて、わざと'\0'終端でない場合どうするかって話をしてるんだが・・・文盲?
0190デフォルトの名無しさん
2012/01/04(水) 15:23:17.62sizeof()でいいだろ
0191デフォルトの名無しさん
2012/01/04(水) 15:28:53.09何これ
Error 00001. 0x350010 (Thread 0x179C):
Resource type mismatch: a(n) memory block was expected.
free(0x00BAECC0)
| operator_new3.cpp line 65:
| }
|
|> std::free(p);
| }
| void operator delete[] (void* p) throw()
The object array (0x00BAECC0) [size: 1 bytes] was created with new[]
| C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xlocale line 443:
| { // convert C string to _Elem sequence using _Cvtvec
| size_t _Count = _CSTD strlen(_Ptr) + 1;
|> _Elem *_Ptrdest = _NEW_CRT _Elem[_Count];
|
| for (_Elem *_Ptrnext = _Ptrdest; 0 < _Count; --_Count, ++_Ptrnext, ++_Ptr)
0192デフォルトの名無しさん
2012/01/04(水) 15:29:40.55Resource type mismatch: a(n) memory block was expected.
free(0x00BAECE0)
| operator_new3.cpp line 65:
| }
|
|> std::free(p);
| }
| void operator delete[] (void* p) throw()
The object array (0x00BAECE0) [size: 5 bytes] was created with new[]
| C:\Program Files\Embarcadero\RAD Studio\9.0\include\dinkumware\xlocale line 443:
| { // convert C string to _Elem sequence using _Cvtvec
| size_t _Count = _CSTD strlen(_Ptr) + 1;
|> _Elem *_Ptrdest = _NEW_CRT _Elem[_Count];
|
| for (_Elem *_Ptrnext = _Ptrdest; 0 < _Count; --_Count, ++_Ptrnext, ++_Ptr)
Error 00004. 0x300010 (Thread 0x179C):
Resource leak: The memory block (0xBA05A0) was never freed
The memory block (0x00BA05A0) [size: 48 bytes] was allocated with malloc
| operator_new3.cpp line 20:
| void* operator new (size_t size) throw(std::bad_alloc)
| {
|> void *p = std::malloc(size ? size : 1);
| if (p == NULL) throw std::bad_alloc();
| return p;
0193デフォルトの名無しさん
2012/01/04(水) 15:29:51.56Resource leak: The memory block (0xB99270) was never freed
The memory block (0x00B99270) [size: 540 bytes] was allocated with malloc
| operator_new3.cpp line 20:
| void* operator new (size_t size) throw(std::bad_alloc)
| {
|> void *p = std::malloc(size ? size : 1);
| if (p == NULL) throw std::bad_alloc();
| return p;
0194デフォルトの名無しさん
2012/01/04(水) 15:53:35.70______
r〃〃〃 f7⌒ろ)
l‖‖‖ || f灯
|‖‖‖ || | |
|儿儿儿._」��⊥厶
〔__o____o_≦ト、
. i / ⌒ ⌒ ヽ )
!゙ (・ )` ´( ・) i/
| (_人__) | \
\ `ー' / / ー- 、
. ,ィ(⊆≧リ≦⊇)〃 / rク\
. / | ̄r少}¨ ̄〃 / /′ ヽ
〃 l | l| | l| 〃 / / └ヽ
/ l |l | |l/″ / ! 厂 \
く, Y ! l」fレト! / | / 1
丿 | | 丿} じ’ / | / |
/ l | `¨ / レ′ |
真の思考停
(在位 2009年9月16日〜2010年6月8日)
民主朝の初代考停、言行不一致、虚言、脱税、
そして外交において巨大な負の遺産を築いた。
0195片山博文MZ ◆0lBZNi.Q7evd
2012/01/04(水) 15:55:12.76http://codepad.org/3Rwidmma
0196デフォルトの名無しさん
2012/01/04(水) 15:57:12.60今度こそエラー無しだな
おつかれ
0197デフォルトの名無しさん
2012/01/04(水) 17:22:52.87関数の引数ではchar[]を渡せずchar*になることが多い。サイズ不明になる。
0198デフォルトの名無しさん
2012/01/04(水) 17:41:34.06話をそらすなよ
関数の引数の話なら別パラメータでsize_tを渡せばいいし
0200デフォルトの名無しさん
2012/01/04(水) 21:49:07.46ObjectManager * pObjMng;
// ry
};
class ObjectManager {
Container<Object *> cpObj;
// ry
};
こんな感じの相互参照があるんだけど
スマポにするならどっちがshared_ptrでどっちがweak_ptrにするのが一般的ですか?
0201デフォルトの名無しさん
2012/01/04(水) 22:08:30.420202デフォルトの名無しさん
2012/01/04(水) 22:15:03.46参照しているならwp
ということでしょうか
0203デフォルトの名無しさん
2012/01/04(水) 22:34:57.06というか削除する責任者が
居なくなりそうならsp
自分は削除に感知しないと思う
オブジェクトはwpだろ
0204デフォルトの名無しさん
2012/01/05(木) 06:45:42.410205デフォルトの名無しさん
2012/01/05(木) 08:46:48.440206デフォルトの名無しさん
2012/01/05(木) 15:36:00.48それとも、大した恩恵は無く、ソース内に入れておくべきですか?
0207デフォルトの名無しさん
2012/01/05(木) 15:41:12.11呼び出す回数に凄く依存する。
インライン化されずに時間掛かったとして、全体0.01%だったらしなくても変わらず。
出来上がってから実測。
0208デフォルトの名無しさん
2012/01/05(木) 15:42:46.14自分はコンパイラさんにお任せするのでinlineキーワードを使ったことがない。
0209デフォルトの名無しさん
2012/01/05(木) 15:52:54.35どんなに短くても、ループ内で何回呼び出されようと
自動的にインライン化されることはほとんどないので
自分でインラインにするべきかどうか判断した方がいい。
短ければ関数呼び出しよりもサイズ小さくなる場合もあるし。
0210208
2012/01/05(木) 15:57:58.20あれ?そうなの??
昔最適化で勝手にインラインになるから気にするなって言われたのをずーっと信じてたんだけど。
まー、個人的にはカリカリチューンはきらいだからねぇ。。。
むむむ・・・。
0211デフォルトの名無しさん
2012/01/05(木) 16:14:54.06それまでは自分の書きやすい方法で。
0212208
2012/01/05(木) 16:17:14.640213デフォルトの名無しさん
2012/01/05(木) 16:49:01.18GCCは4.5からVCは8から出来たと思う
だから今は関数に別名を付けたいときやヘッダで完結させたいときしかinline使わないな
0214デフォルトの名無しさん
2012/01/05(木) 16:52:25.27なるべく使わない方がメモリと速度に良い。
0215デフォルトの名無しさん
2012/01/05(木) 16:58:37.200216デフォルトの名無しさん
2012/01/05(木) 17:07:24.77関数呼び出しよりも軽い処理は積極的に
インラインにすればいいんじゃねーの
0217デフォルトの名無しさん
2012/01/05(木) 17:12:01.61プログラミングは初めてです。
両方やったことある人に聞きます。
最初はどっちから手を出した方がいいですか?
0218デフォルトの名無しさん
2012/01/05(木) 17:14:25.52初見でC++は死ぬと思うがな
割と適当でもなんとかなるJavaにしたら?
まぁホント言うならC#(ry
0219デフォルトの名無しさん
2012/01/05(木) 17:18:43.63オブジェクト指向一本に絞ってるJavaのが無難。
メモリ上の扱いとか覚える気ならC++。
0220デフォルトの名無しさん
2012/01/05(木) 17:20:22.01マルチPOSTすんなカス
0221デフォルトの名無しさん
2012/01/05(木) 17:31:58.83Groovy(JAVAのスクリプト言語化のようなもの)
C#
をすすめてみた。
0222デフォルトの名無しさん
2012/01/05(木) 17:37:58.84http://codezine.jp/article/detail/3757?p=2
0223デフォルトの名無しさん
2012/01/05(木) 17:42:28.04ヘッダだけで完結させるならstaticじゃね
どちらでも内部結合になるし、
そんな場合は大して長くない処理を書くことが多いからinlineでも
全然問題ないと思うけど
0224デフォルトの名無しさん
2012/01/05(木) 17:45:02.440225デフォルトの名無しさん
2012/01/05(木) 17:48:40.31下駄雪駄もstaticで書くのか?w
0226デフォルトの名無しさん
2012/01/05(木) 17:49:15.64下駄雪駄もstaticで書くのか?w
0227デフォルトの名無しさん
2012/01/05(木) 17:53:10.30普通の関数の話だった
セッターゲッターはstaticの意味が変わってしまうがな
てか下駄雪駄の意味がわからずしばらく考えたじゃないか
0228デフォルトの名無しさん
2012/01/05(木) 18:56:59.600229206
2012/01/05(木) 19:03:11.22セッタやゲッタの中にも数行必要なものもありますし、
そうなるとますますソースとヘッダどちらに書くかの境界線が判断できない上に、
「このセッタはヘッダ」「このセッタはソース」みたいになると、
個人的には読みにくいと感じるため、>>211さんの言われるように、
ボトルネックだと感じるまではすべてソースに書いておこうと思います。
0230デフォルトの名無しさん
2012/01/05(木) 20:34:46.07べつにC++からでいいだろ。
Java勉強しなくても、C++知ってりゃ書ける。
その逆はない。
0231デフォルトの名無しさん
2012/01/05(木) 20:38:36.01C++を便利に使ってしまう
0232デフォルトの名無しさん
2012/01/05(木) 20:44:00.84それはない。インライン展開しまくったとしても、
今時のキャッシュメモリなら1次キャッシュに収まるからな。
それと、96bit画像の描画したときは、インライン展開した方が、
関数外と関数内の式が結合され7割まし早かった。
0233デフォルトの名無しさん
2012/01/05(木) 20:51:23.46参考書の大半が引数書き換えを邪気に扱ってるし、
オブジェクトの委譲によって、オブジェクトを組み立て、
オブジェクトの振る舞いを作ることによりプログラムの動作を
決めるというOOの基本を実践してるサンプルが少ない。
SwingでGUIをつくるのにJFrameを継承するとかバカな解説ばっか。
0234デフォルトの名無しさん
2012/01/05(木) 21:12:28.040235デフォルトの名無しさん
2012/01/05(木) 21:13:37.270236デフォルトの名無しさん
2012/01/05(木) 21:33:57.78皆さん生きていけないですよ!
0237デフォルトの名無しさん
2012/01/05(木) 21:38:35.52他の女とどうなるか解からんが
素直にシャルルを選んどけ
0238デフォルトの名無しさん
2012/01/05(木) 21:39:08.77>私に嫌われたらどうなりますか?
おまえの仕事をする奴がいなくなるだけじゃない?
0239デフォルトの名無しさん
2012/01/05(木) 21:42:45.090240デフォルトの名無しさん
2012/01/06(金) 02:02:23.80inline に内部結合にするなんて効果は無いよ。
0241デフォルトの名無しさん
2012/01/06(金) 02:07:20.94例えば、Objクラス型のオブジェクトを、引数なしで作成・初期かする場合、
Obj obj;
とするだけで、デフォルトコンストラクタがよばれるのでしたっけ?
それとも、
Obj obj();
でないといけないのでしょうか。
0242デフォルトの名無しさん
2012/01/06(金) 02:08:53.29なんで試さないんだよ
ちなみに前者が正解。後者はアウト。
0243241
2012/01/06(金) 02:12:05.64すみません。。
どうもありがとうございます。
デフォルトコンストラクタに、適当なpublicメンバ変数aに定数を代入する
操作が入ったHogeクラスを作って、
Hoge obj;
のあと、obj.aの内容をみて確かめてみます。
0244デフォルトの名無しさん
2012/01/06(金) 07:22:00.98見たけど別に廃止されてなかったが (3.5-3)
0245デフォルトの名無しさん
2012/01/06(金) 10:15:13.530246デフォルトの名無しさん
2012/01/06(金) 10:30:20.350247デフォルトの名無しさん
2012/01/06(金) 11:02:49.28具体例頼む。
0248デフォルトの名無しさん
2012/01/06(金) 11:33:20.05protected:
static int n;
};
class hoge : public shared {};
class fuga : public shared {};
みたいに丸出しよりましかな程度のものだけど
0249デフォルトの名無しさん
2012/01/06(金) 11:36:26.76class shared{
protected:
static int &n(){ static int value; return value; }
};
0250デフォルトの名無しさん
2012/01/06(金) 11:37:03.63どっちでもいいんじゃない?マルチパラダイムなんだし。
0251デフォルトの名無しさん
2012/01/06(金) 11:56:25.410252デフォルトの名無しさん
2012/01/06(金) 13:25:32.88どっちも無し。
int n;
new hoge( &n );
new fuga( &n );
で十分
0253デフォルトの名無しさん
2012/01/06(金) 13:41:32.84struct temp_type{ typedef const T &t; };
template<typename T>
struct temp_type<T*>{ typedef T *t; };
template<>
struct temp_type<int>{ typedef int t; };
template<typename T>
void hoge(typename temp_type<T>::t v){}
int a = 1;
int *b = &a;
struct HOGE{} h = {};
//C2783
hoge(a);
hoge(b);
hoge(h);
テンプレートで指定された型に応じて
値を渡すか、const参照を渡すかを決めたいのですが
「テンプレート 引数を 'T' に対して減少できませんでした」
となります。
関数hogeでは引数を書き換える予定はないです。
テンプレートでない関数の場合は
例えばconst int &やint *const &など渡さないと思うし
参照を関数内でデリファレンスするのも無駄だと思うので
アドレスとおなじサイズの整数やポインタを渡す場合は
値渡し選択したいのですが、どのように書いたらいいですか?
0254デフォルトの名無しさん
2012/01/06(金) 13:47:54.360255デフォルトの名無しさん
2012/01/06(金) 13:51:12.06template<typename T> void hoge(const T &v);
template<typename T> void hoge(const T *v);
template<typename T> void hoge(int v);
これでは何故ダメなのか?
0256デフォルトの名無しさん
2012/01/06(金) 14:25:35.670257デフォルトの名無しさん
2012/01/06(金) 14:29:15.48メディエーターパターンを使ってシステムの連絡路を一本化するのがいいと言われてやってみたけど
メディエーターのインターフェースが凄まじく大きくなってしまった
0258デフォルトの名無しさん
2012/01/06(金) 14:30:20.02オーバーロードとは何が違うの?
0259デフォルトの名無しさん
2012/01/06(金) 14:31:41.96>>255 hogeの処理は共通なので定義は1つにしたいです。
hogeのような関数がたくさんあって、呼び出しも多いので
関数を型の個数分書いたり、呼び出し部分の記述量を増やすことなく
実現するにはどのようにしたらよいですか?
条件後出しですいません。
0260デフォルトの名無しさん
2012/01/06(金) 14:38:49.00template<typename T> void hoge(const T *v);
処理の内容が同じならこの2つでいいよ。
後者は、前者を呼び出すだけでいい。
速度はコンパイラが勝手に最適化するから気にすんな。
うんな事より、プログラムを1つ完成させることに力を入れろ。
どうしても気になるなら最適化後のアセンブリコード見て確認してみ。
0261デフォルトの名無しさん
2012/01/06(金) 14:41:42.27Mediatorを分割すりゃよかったんじゃね。
別に1つの依頼者クラスが1種類の調停者にだけ
依頼せにゃならんわけでもないだろう。
そもそも何をしてるのか知らんから
Mediatorが適した課題かどうか怪しいが
0262デフォルトの名無しさん
2012/01/06(金) 20:41:49.47bool Load()
{
return false;
}
�A
void Load()
{
new throw Exception()
}
関数のエラーをboolかthrowどっちで検知すればいいのだろうか
0263デフォルトの名無しさん
2012/01/06(金) 20:44:12.880264デフォルトの名無しさん
2012/01/06(金) 20:48:23.090265デフォルトの名無しさん
2012/01/06(金) 20:55:09.37C++11からは、一様な初期化構文を使って、デフォルトコンストラクタ呼び出しを明示できるよ
ttp://d.hatena.ne.jp/faith_and_brave/20111221/1324394299
X x; // ok
X x(); // error
X x{}; // ok (C++11)
0266デフォルトの名無しさん
2012/01/06(金) 20:57:37.010267デフォルトの名無しさん
2012/01/06(金) 20:58:50.740268デフォルトの名無しさん
2012/01/06(金) 21:17:49.32public:
virtual ~IHoge(void) { }
virtual void Method(void) = 0;
};
class HogeBase : public IHoge {
public:
void Method(void) { }
};
class HogeEx : public HogeBase { };
こうやっていちいち分けるのが流行ってるのはなんで?
どうせポリモーフィックなクラスはほぼ全てがHogeBaseを継承するんだし
class HogeBase {
public:
virtual ~HogeBase(void) { }
virtual void Method(void) { }
};
class HogeEx : public HogeBase { };
でいいじゃないですか?
0269デフォルトの名無しさん
2012/01/06(金) 21:30:19.69IHogeって事はCOMか?COMは実体を持てないからな。
それは別として、最上位に完全抽象化クラスを置いとくのは、
HogeBaseの全てをオーバーライドするクラスを作ったとき、
HogeBaseの実装がデッドウエイト(容量食うだけのゴミ)になるから。
0270デフォルトの名無しさん
2012/01/06(金) 21:32:37.36Function( source.Load() ); // Loadはsourceから読み出した情報を返す
こういうコードを書こうとしたとき、どっちを取るべきが正しいか考えろ。
0271デフォルトの名無しさん
2012/01/06(金) 21:39:14.50なるほど
0272デフォルトの名無しさん
2012/01/06(金) 21:48:34.28Loadが失敗する状況がふつうにありえそうなら1。
(プログラムの実行自体が怪しくなるような)ハードやOSの異常による状況でしか失敗しないようなら2。
0273デフォルトの名無しさん
2012/01/06(金) 21:51:30.44// ファイルフォーマットエラーなど
return false;
// ハードウェアエラーなど
throw unko();
// 成功
return true;
}
これで決まりや
0274デフォルトの名無しさん
2012/01/06(金) 22:01:26.36東京にある6つのキー局の内、製作から財務まで一貫して朝鮮人が行ってるテレビ局が1つ
中国共産党から毎年大量の反日工作費が流れているテレビ局が2つ
もろに北朝鮮と繋がっているテレビ局が1つ
年寄はまだまだテレビという外国人に騙され続ける
0275デフォルトの名無しさん
2012/01/06(金) 22:03:02.69一方、返却値は返却値。失敗してもいかなるリソースの破壊、開放忘れも発生しない場合に使える。
0276デフォルトの名無しさん
2012/01/06(金) 22:05:46.180277デフォルトの名無しさん
2012/01/06(金) 22:07:59.240278デフォルトの名無しさん
2012/01/06(金) 22:13:05.48書いてあるならどんなエラーでも想定の範囲内だから例外ではなく返り値などで判断
0279デフォルトの名無しさん
2012/01/06(金) 23:42:39.91はまって痛い目見たよ
こんなん
template<class T> struct Base {
Base(){ unko = reinterpret_cast<__int64>(this); }
void OK(){ T *t = static_cast<T *>(reinterpret_cast<Base<T> *>(unko); }
void NG(){ T *t = reinterpret_cast<T *>(unko); }
__int64 unko;
};
struct Derived : Base<Derived> {};
int main()
{
Derived d;
}
0280デフォルトの名無しさん
2012/01/07(土) 00:19:45.06reinterpret_castで直接reinterpret_cast<T*>してんのが引っかかっただけじゃないの?
void*的なものに突っ込んだ時は、突っ込む前の型と全く同じ型じゃないと、
オフセットが違うから位置がずれて異常が起きる。
0281デフォルトの名無しさん
2012/01/07(土) 00:54:17.62>void*的なものに突っ込んだ時は、突っ込む前の型と全く同じ型じゃないと、
>オフセットが違うから位置がずれて異常が起きる。
ありがとう、目から鱗だわ
ポインタ値とアドレス値は同じものだと思ってたけど違うのか
0282デフォルトの名無しさん
2012/01/07(土) 01:39:13.10廃止ってのはexportみたいなのを言うんだ
0283デフォルトの名無しさん
2012/01/07(土) 09:56:11.27では仮引数の型がA*&は何を表しますか?
0284デフォルトの名無しさん
2012/01/07(土) 10:03:40.380285デフォルトの名無しさん
2012/01/07(土) 10:03:44.72ポインタだろうが値渡しです
A*&はポインタの参照になる
参照渡し。だたし、参照で渡す変数の型が A *
いろいろ書いてみてお手ごろ感を試していたことがあります。
http://toro.2ch.net/test/read.cgi/tech/1277860967/504
>出題内容:http://hibari.2ch.net/test/read.cgi/tech/1280653311/615
>ポインタのポインタを使って書いたもの:http://codepad.org/MpmPDEc3
>参照を使ったもの:http://codepad.org/nHqWWH51
0287デフォルトの名無しさん
2012/01/07(土) 10:08:43.05delete x;
A* c=new A;
x=c
}
void main(){
A* a=new A;
f(a);
delete a;
}
上みたいなコード書いて実験したんですよ。
そうしたらmain関数の最後のところでaはcになってました。
これはC++の関数が参照渡しというしょうこじゃないんですか?
仮引数の型ををA*&に変えてみても同様の結果になりました。
0288デフォルトの名無しさん
2012/01/07(土) 10:20:43.44それは f内でdelete xをして new Aしたときにたまたま同じメモリ空間を使用しただけにすぎない
fの中でdeleteされてaの示す先のメモリ空間がなくなったので fを呼び出した後はaのポインタを使ってはいけない
それでうまくいったのは、端的にいえば「たまたま」。
こういうのでは失敗する。
http://codepad.org/WQUBJJak
>>287 では delete x したあと、new A でえたポインタ c が、たまたま x = c だったからうまくいったように見えたと予想する。
0290デフォルトの名無しさん
2012/01/07(土) 11:07:45.210291デフォルトの名無しさん
2012/01/07(土) 11:12:21.090292デフォルトの名無しさん
2012/01/07(土) 12:51:29.47289 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
0293デフォルトの名無しさん
2012/01/07(土) 13:13:50.88子コントロールのクリッピング領域の設定は親がするべき?
それとも、子が必要に応じて設定するべき?
0294デフォルトの名無しさん
2012/01/07(土) 15:00:48.58どんな専ブラ使えばいいの?
0295デフォルトの名無しさん
2012/01/07(土) 20:09:11.41例外が発生するParseの後にbool TryParseメソッドができた
つまり分かるな?例外は糞だってことよ
0296デフォルトの名無しさん
2012/01/07(土) 20:36:38.84最高に使いづらえめんどくせえもう使うなってことだろう
ワイド文字に対応していないところからも、やる気のなさが感じられる
0297デフォルトの名無しさん
2012/01/07(土) 20:40:38.430298デフォルトの名無しさん
2012/01/07(土) 21:09:27.10http://kohada.2ch.net/test/read.cgi/prog/1306646249/
0299デフォルトの名無しさん
2012/01/07(土) 21:28:38.70AKB=金正恩
この意味わかるか
AKBという捏造ブームの裏に何があるか見えるか?
0300デフォルトの名無しさん
2012/01/07(土) 22:26:26.09例外をC++の枠組みの外に流すなよアホが
例外は C の setjmp()/longjmp() の焼き直しだという珍説を読んだことがあるがいまいち
0302デフォルトの名無しさん
2012/01/07(土) 22:38:16.980303デフォルトの名無しさん
2012/01/07(土) 22:51:38.540304デフォルトの名無しさん
2012/01/07(土) 22:57:32.000305デフォルトの名無しさん
2012/01/07(土) 22:59:53.18二重例外で即死亡ってのどうにかならんのか
0306デフォルトの名無しさん
2012/01/07(土) 23:44:04.29馬鹿は引っ込んでろ
setjmp()/longjmp()だけで例外が書けるならトランスレータで十分なはず
例外は基本的に違うんだよ
知ったかで物を語るな
0307デフォルトの名無しさん
2012/01/08(日) 00:07:17.57トランスレータが書ける事とトランスレータで十分な事はイコールではないと思うの
0308デフォルトの名無しさん
2012/01/08(日) 01:12:11.92自体C以前からある概念なので当然可能。
ただしtry-catchはC単体で実装できない。
正常系実行時にはゼロコストになるよう、
例外ハンドラのアドレス埋め込みが
必要になるからな。
アセンブリを使えばできるが、それは最早Cの範疇じゃない
0309デフォルトの名無しさん
2012/01/08(日) 02:15:52.53ボケてんの?
トランスレータが書ける事とトランスレータで十分な事はイコールではないと思うの
0311デフォルトの名無しさん
2012/01/08(日) 09:59:05.53バカはホントに人の書き込み見ないのな。
>正常系実行時にはゼロコストになるよう、
>>303
0312デフォルトの名無しさん
2012/01/08(日) 11:54:26.99実装と概念を混同する馬鹿?
0313デフォルトの名無しさん
2012/01/08(日) 12:05:17.82例外処理じゃなくただの構文だろ
例外処理に使わなきゃならんという義務も無い
そう使うかどうかは別として初期の使用例として
qsortの脱出とかあったしな
0314デフォルトの名無しさん
2012/01/08(日) 12:56:58.89Qはまだ馬鹿言ってるよ
トランスレータが書けないという事はCで実現出来ない機能が例外処理にはあるわけだ
QはC万能だと思いたいんだろうけど実はそうではない
0316デフォルトの名無しさん
2012/01/08(日) 13:01:25.23それを叩くならCに限定しても例外処理機構に関してはC++と同等のものがあるといえないことも無い
0317デフォルトの名無しさん
2012/01/08(日) 13:01:35.82> Cで実現出来ない機能が例外処理にはあるわけだ
具体的にどういう機能?
0318デフォルトの名無しさん
2012/01/08(日) 13:02:44.12否定したいなら、トランスレータが書ける事とトランスレータで十分な事がイコールだと示せばいい。
0319デフォルトの名無しさん
2012/01/08(日) 13:30:17.580320デフォルトの名無しさん
2012/01/08(日) 13:35:02.570321デフォルトの名無しさん
2012/01/08(日) 13:51:34.95言えない。
言語拡張を言い出せばきりがなくなる。
0322デフォルトの名無しさん
2012/01/08(日) 13:54:44.12Cの呼び出し規約を維持したまま
スタックを巻き戻す機能
0323デフォルトの名無しさん
2012/01/08(日) 13:56:30.72言語拡張じゃないよ単にAPI呼び出すだけだから
0324デフォルトの名無しさん
2012/01/08(日) 13:58:25.140325デフォルトの名無しさん
2012/01/08(日) 13:58:49.05物凄く保守しにくくて読みにくく、パフォーマンスも低くてもいいならCで出来ない事もないだろうが
実用に耐える物ではない
少なくとも業務用には使える代物ではとてもない
0326デフォルトの名無しさん
2012/01/08(日) 14:07:14.68例外への対応って具体的に何やってんの?
昔逆アセンブルしてみると
関数先頭でfsかgsかのレジスタ使ってた気がするけど
0327デフォルトの名無しさん
2012/01/08(日) 14:20:54.12でもとても仕事に使える物ではない
趣味の範囲を超えない
0328デフォルトの名無しさん
2012/01/08(日) 14:22:21.07とにかくvtableの部分がまともにソース上に出てきているので危険極まりない
どんなイタズラをされるか分かったもんじゃない
0329デフォルトの名無しさん
2012/01/08(日) 14:26:09.53>Qがコテを外して必死です
被害妄想乙
0330デフォルトの名無しさん
2012/01/08(日) 14:33:39.13ようQ
お前はC言語だけ触ってろ
C++は素人同然
0331デフォルトの名無しさん
2012/01/08(日) 14:37:15.78Qにやっつけられた恨みって怖いね?
0332デフォルトの名無しさん
2012/01/08(日) 14:43:14.06やっつけられた事は一度もないが?
Qが醜態を晒して馬鹿みたいに見えた事は何回でもあるけど
0333デフォルトの名無しさん
2012/01/08(日) 14:47:56.07その馬鹿にやっつけられた馬鹿がいてね。
すっごい粘着なんだ。醜態ばかり晒してる。
今でもいるんじゃないかな?
馬鹿みたいに見えるなんてものじゃなく、馬鹿そのもの。
0334デフォルトの名無しさん
2012/01/08(日) 14:49:08.280335デフォルトの名無しさん
2012/01/08(日) 14:52:15.07自覚もないんだ‥‥‥
0336デフォルトの名無しさん
2012/01/08(日) 14:55:01.28吐き出したコードなんて見ないだろ
プリプロセス済みコードと同じだぞ
C++のコードを書き換える度処分されるんだぞ
0337デフォルトの名無しさん
2012/01/08(日) 14:57:20.03Q の C を認めるのか?頭沸いてない?
0338デフォルトの名無しさん
2012/01/08(日) 14:58:42.010339デフォルトの名無しさん
2012/01/08(日) 15:14:24.18QのCを認めちゃいけないな
ありゃ仕事でCをやってない素人のコードだとすぐに分かる
0340デフォルトの名無しさん
2012/01/08(日) 15:43:43.72templateはおろか、ハンドリング目的のクラスすら作らせちゃもらえん
構造体の延長線みたいな使い方ばかりさせられるのが仕事
0341デフォルトの名無しさん
2012/01/08(日) 15:46:11.86STLのアルゴリズムとか以ての外
0342デフォルトの名無しさん
2012/01/08(日) 17:06:00.550343デフォルトの名無しさん
2012/01/08(日) 17:09:04.870344デフォルトの名無しさん
2012/01/08(日) 17:19:44.27何でことさら「仕事」って言葉を使いたがるんだろうか?
0345デフォルトの名無しさん
2012/01/08(日) 17:32:59.44そりゃ無職の奴が書いたコードが一目で分かるからさ
Qみたいにな
0346デフォルトの名無しさん
2012/01/08(日) 17:34:10.210347デフォルトの名無しさん
2012/01/08(日) 17:34:22.180348デフォルトの名無しさん
2012/01/08(日) 17:50:30.21いや全然違うから世間の見る目が
Qみたいに無職でしかも性格がねじれ切っていると、誰でも「あいつは変質者だ」と思う罠
0349デフォルトの名無しさん
2012/01/08(日) 17:54:09.73おまえが企業内失業者だからか?
無職と何処が違うんだ?
0350デフォルトの名無しさん
2012/01/08(日) 17:55:42.000351デフォルトの名無しさん
2012/01/08(日) 18:04:07.260352デフォルトの名無しさん
2012/01/08(日) 18:28:02.50setjmp( ) / longjmp( ) でダメな理由は?
0353デフォルトの名無しさん
2012/01/08(日) 18:49:46.93給料もらってる
職質された時に堂々と仕事先を言える
無職とは違うんだよ
0354デフォルトの名無しさん
2012/01/08(日) 19:09:17.93職業を質問される事とは違うんだよ
0355デフォルトの名無しさん
2012/01/08(日) 19:13:09.26/::::::::::::::::::::::::::::::;;::ノ ヽ;::\
/::::::::;;;;;;;;;,,,;;...-‐''"~ ヽ:;::l
|:::::::::::| 岡田 異音 |ミ|
|:::::::/ ,,, ヽ,、 '|ミ|
'|:::::::l '''"" ゙゙゙゙` |ミ|
|:::::|. ,,r ‐、 ,, - 、 |/
,/⌒| ノ ・ _), (. ・ `つ|
| ( "''''" |"'''''" |
ヽ,,. ヽ |
| ^-^_,, -、 |
| _,, --‐''~ ) | マニフェストもう守れない。どうしよう・・・・
'ヽ ( ,r''''''‐-‐′ /
震災後
|:::::::::/ |ミ|
|::::::::| ,,,,, ,,,,, |ミ|
|彡|. '''"""'' ''"""'' |/
/⌒| -=・=‐, =・=- |
| ( "''''" | "''''" |
.ヽ,, ヽ .| キリッ
| ^-^ |
. | ‐-===- | 大震災が起こったのだからマニフェストの破綻も致し方ありません
,\. "'''''''" /
朝鮮民主党
おわり
0356141 ◆QZaw55cn4c
2012/01/08(日) 19:15:07.85なぜ業務では、STL ですら使わせてもらえないのでしょうか?
>>353
もう気がすんだでしょう?そろそろあきらめたら‥‥‥。
0357デフォルトの名無しさん
2012/01/08(日) 19:24:40.330358デフォルトの名無しさん
2012/01/08(日) 19:45:59.51担当代わっても潰しが効くからだそうな
ただ、無駄だと思うがな。C++詳しくない人間が
C++を求められる案件なんてできない。
必然的にC++の案件担当者はC++経験者になる。
0359デフォルトの名無しさん
2012/01/08(日) 19:46:54.53http://nanndemosoudann.jimdo.com/
0360デフォルトの名無しさん
2012/01/08(日) 19:49:25.160361デフォルトの名無しさん
2012/01/08(日) 19:58:25.04同じ事
無職だといろいろ質問攻めに遭うだろ
>>356
無職のジジイは就職しろよ
0362デフォルトの名無しさん
2012/01/08(日) 20:24:02.520363デフォルトの名無しさん
2012/01/08(日) 20:24:46.280364デフォルトの名無しさん
2012/01/08(日) 20:27:08.690365デフォルトの名無しさん
2012/01/08(日) 20:28:56.330366デフォルトの名無しさん
2012/01/08(日) 20:30:26.34またいつものPC前提の人?
0367デフォルトの名無しさん
2012/01/08(日) 20:31:03.26単にジェネリックな使い方だと未使用テンプレートが
実体化されずむしろ軽くなることもある
テンプレの問題は他の言語ユーザが
うわっつらしか理解できない事。
0368デフォルトの名無しさん
2012/01/08(日) 20:32:23.89ジジイ、ジジイか
それじゃあお前は何だ、このガキが
俺はお前さんがこの世に落っこってくる前からコードを書いてんだ
0369デフォルトの名無しさん
2012/01/08(日) 20:33:14.48またいつもの組込みの人?
0370デフォルトの名無しさん
2012/01/08(日) 20:35:17.93環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0371デフォルトの名無しさん
2012/01/08(日) 20:36:22.56たとえばファイルから改行区切りでvector<string>へ格納するのは効率が悪い。
ファイル内容が一度にメモリに乗せられるとして、char *bufやstring bufへ一括で読み込んでから
行頭のポインタをvector<char*>へ格納すれば読み込みも書き換えも速く済む。
0372デフォルトの名無しさん
2012/01/08(日) 20:36:22.65PCじゃないがRAMは32KBぐらいはある環境でしか仕事したこと無いな。
標準ライブラリは普通に使えるだけ使うが。
断片化が致命的ってのは、RAMが8KBとか4KBとか?
0373デフォルトの名無しさん
2012/01/08(日) 20:39:05.03Cかアセンブラだろ普通
0374デフォルトの名無しさん
2012/01/08(日) 20:39:38.95C++使うと何が変わると思ってるの?
0375デフォルトの名無しさん
2012/01/08(日) 20:40:14.060376デフォルトの名無しさん
2012/01/08(日) 20:44:17.23言う人ってよく出てくるけど怪しいんだよな
まずJavaすら動かない環境なら大抵開発環境は
Cで提供中されるじゃん。
逆にJavaも実行可能な環境ならg++改造したような
C++環境が提供される。こういう環境だと
実行コードのサイズなんて微々たるもんで気にされないだろ。
0377デフォルトの名無しさん
2012/01/08(日) 20:44:44.21そりゃstd::vectorの話だな。
工夫が必要ならreserve()なりstd::dequeなり使う選択肢がある状況で
そんな効率の悪いことをしてるならプログラマの責任だろ。
0378デフォルトの名無しさん
2012/01/08(日) 20:44:53.52STLは必要容量の倍のメモリを消費する可能性があるというだ。
0379デフォルトの名無しさん
2012/01/08(日) 20:48:03.110380デフォルトの名無しさん
2012/01/08(日) 20:48:10.79コンパイラの改変が手前。っうか殆ど機能しないC++のために
コンパイラを保守すんのがオーバースペック。
0381デフォルトの名無しさん
2012/01/08(日) 20:48:20.73必要量が分かってるならそんなことする必要ないから、質の良い実装ではそんなことにはならない。
余裕を持たせた再確保が必要なのは push_back() だけ。計算量の要求のためね。
なんで"STL"とか十把一絡げにしたがるの?
0382デフォルトの名無しさん
2012/01/08(日) 20:49:41.04へぇそりゃ大変だね。でもそれって「普通」なのかい?
0383デフォルトの名無しさん
2012/01/08(日) 20:50:11.490384デフォルトの名無しさん
2012/01/08(日) 20:51:21.670385デフォルトの名無しさん
2012/01/08(日) 20:53:23.040386デフォルトの名無しさん
2012/01/08(日) 21:00:16.67picやRX向けに作ってる
コンパイラベンダーの姿勢としちゃ普通だろ
C++も提供してるという変わり種も居るが
実装不十分でC++と呼べるもんじゃないし
0387デフォルトの名無しさん
2012/01/08(日) 21:00:48.10同じことってw
お前社会経験がないの?
0388デフォルトの名無しさん
2012/01/08(日) 21:05:12.860389デフォルトの名無しさん
2012/01/08(日) 21:06:36.31職質の内容に詳しい方が異常だと思うの
0390デフォルトの名無しさん
2012/01/08(日) 21:11:28.62職質って何だか位は誰でも知っているが。
職業に関しての質問だと思う人はまずいない。
0391デフォルトの名無しさん
2012/01/08(日) 21:13:27.54それだとSTLもいれれないじゃない。
0392デフォルトの名無しさん
2012/01/08(日) 21:21:38.12とこ少ないからな、組み込み屋がテンプレの話に
食らいついて来る事自体変なんだよな
embedded c++ は黒歴史
0394デフォルトの名無しさん
2012/01/08(日) 21:24:15.65職質って言う名前は知ってるけど、具体的になにを聞かれるかは知らないよ。
まあ、名前・職業あたりは聞かれると想像するが。
0395デフォルトの名無しさん
2012/01/08(日) 21:24:38.70std::bad_alloc例外も前提だな
0396デフォルトの名無しさん
2012/01/08(日) 21:25:59.43俺もそんな感じ
職質されたことないと具体的な内容なんて分からないよね
0397デフォルトの名無しさん
2012/01/08(日) 21:29:25.370398デフォルトの名無しさん
2012/01/08(日) 21:30:03.260399デフォルトの名無しさん
2012/01/08(日) 21:31:24.76職業を聞かれることはないよ。
0400デフォルトの名無しさん
2012/01/08(日) 21:34:21.45経験者か
0401デフォルトの名無しさん
2012/01/08(日) 21:40:06.40リアルな話が出てきたからって職質で話題濁してんじゃねぇぞ
0402デフォルトの名無しさん
2012/01/08(日) 21:51:15.77>1.異常な挙動その他周囲の事情から合理的に判断して何らかの犯罪を犯し、若しくは犯そうとしていると疑うに足りる相当な理由のある者
>2.既に行われた犯罪について、若しくは犯罪が行われようとしていることについて知っていると認められる者
職質する相手に、「お勤め先は?」なんてより、もっと重要な質問をするだろ。
0403デフォルトの名無しさん
2012/01/08(日) 21:52:43.110404デフォルトの名無しさん
2012/01/08(日) 22:02:53.71職場内で失業してるの?
0405デフォルトの名無しさん
2012/01/08(日) 22:17:42.550406デフォルトの名無しさん
2012/01/08(日) 22:22:09.27聞かれたの?
0407デフォルトの名無しさん
2012/01/08(日) 22:28:53.230408デフォルトの名無しさん
2012/01/08(日) 23:38:31.66AKB=金正恩
この意味わかるか
AKBという捏造ブームの裏に何があるか見えるか?
0409デフォルトの名無しさん
2012/01/08(日) 23:59:41.06貼れと言うと頑なに拒否するんだなよあww
嘘がバレバレですよQさん
まだPen�Vの850MHzで頑張ってるんだろ
見栄は良くないね
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
0412デフォルトの名無しさん
2012/01/09(月) 09:08:01.63結局どんな環境で開発してたんだ?
なんちゃって業界人くさいし、
せめてマイコンの種類とメモリー容量、
成果物の種別を書いてもらわんとな。
0414デフォルトの名無しさん
2012/01/10(火) 09:40:13.07野田内閣は過半数が帰化人
野田はどうだろうか
韓国人から賄賂を貰い、韓国人の集いに出席している野田は
0415デフォルトの名無しさん
2012/01/10(火) 18:15:27.410416デフォルトの名無しさん
2012/01/10(火) 19:00:29.370417デフォルトの名無しさん
2012/01/11(水) 00:24:49.640418デフォルトの名無しさん
2012/01/11(水) 00:35:07.280419デフォルトの名無しさん
2012/01/11(水) 00:37:46.05その後のことは知らないけどね。
0420デフォルトの名無しさん
2012/01/11(水) 00:59:51.930421デフォルトの名無しさん
2012/01/11(水) 04:41:02.69DBのカラム名にしろ
INSERT INTO
0422デフォルトの名無しさん
2012/01/11(水) 07:15:35.620423デフォルトの名無しさん
2012/01/11(水) 14:18:37.72./::::::::::::::::::ノ、ヽ | 民主党支持者がいるよ!w |
./:::::::;;;-‐‐''"´ |:::| \____ ________/
|:::::::| 。 .|:::| ノ´⌒ V _____
.|::::/ ⌒ ⌒ ヽ:| γ⌒´ ヽ, / _____)
|:::| /・\ /・\|| // ""⌒⌒\ ) | / ヽ
げひひw .|´ ⌒_ ヽ⌒ | . i / ⌒ ⌒ヽ ) | 〉 ⌒ ⌒ |
.| :::⌒(__人_)⌒| !゙ /・\ /・\i/ |/. /・\ /・\ヽ
⊂ ̄ヽ___ ヽ \__| ⊂ ̄ヽ_ | :::⌒(__人_)⌒⊂ ̄ヽ_ | ::::⌒(__人_)⌒:: |
<_ノ_ ヽ_ _/ <_ノ_. \ \__| / .<_ノ_ \ ´ \__| ノ い〜ひっひw
0424デフォルトの名無しさん
2012/01/11(水) 19:04:45.66static list<sumapo<X> > XL;
static list<sumapo<Y> > YL;
static list<sumapo<Z> > ZL;
void Func(void) {
sumapo<X> x(new X);
sumapo<Y> y(new Y);
sumapo<Z> z(new Z);
XL.push_back(x);
try { YL.push_back(y); } catch(...) { XL.pop_back(); throw; }
try { ZL.push_back(z); } catch(...) { YL.pop_back(); XL.pop_back(); throw(); }
}
↑こういう処理があるんだけど、せっかくスマポにしたのにtry-catchが乱立してうっとおしい
0425デフォルトの名無しさん
2012/01/11(水) 19:35:14.73size_t sizeX = XL.size(), sizeY = YL.size(), sizeZ = ZL.size();
try {
XL.push_back(x); YL.push_back(y); ZL.push_back(z);
} catch (...) {
if (XL.size() != sizeX) XL.pop_back();
if (YL.size() != sizeY) YL.pop_back();
if (ZL.size() != sizeZ) ZL.pop_back();
throw;
}
0426デフォルトの名無しさん
2012/01/11(水) 20:17:07.40void Func(void) {
sumapo<X> x(new X);
sumapo<Y> y(new Y);
sumapo<Z> z(new Z);
list< sumapo<X> > tmpx(1, x);
list< sumapo<Y> > tmpy(1, y);
list< sumapo<Z> > tmpz(1, z);
XL.splice(XL.end(), tmpx);
YL.splice(YL.end(), tmpy);
ZL.splice(ZL.end(), tmpz);
}
0427デフォルトの名無しさん
2012/01/11(水) 20:23:20.700428デフォルトの名無しさん
2012/01/11(水) 20:25:25.150429デフォルトの名無しさん
2012/01/11(水) 21:08:43.03分岐は増えるしきもちわるっ
0430デフォルトの名無しさん
2012/01/11(水) 21:12:15.37中身はどうでもいいが、
マクロ以外で全大文字の名前を使うな
全大文字は、マクロと他のシンボルが衝突しないよう
マクロのみで使うものと予約されてる
詳しくはハゲのFAQ読んでこい
0431デフォルトの名無しさん
2012/01/11(水) 21:19:20.59エラー復帰目的じゃないなら
全体をTryすれば良いじゃん
0432デフォルトの名無しさん
2012/01/11(水) 21:55:09.11余計なお世話だな
0433デフォルトの名無しさん
2012/01/11(水) 22:03:39.63MSの悪口はヤメロ
0434デフォルトの名無しさん
2012/01/11(水) 22:07:38.760435デフォルトの名無しさん
2012/01/11(水) 22:21:03.90800 自分:名無し募集中。。。[] 投稿日:2012/01/08(日) 22:00:50.04 0
AKBブーム捏造の裏
サウンドスキャンの売り上げでさえほとんどが業者の自社買い他社買いで
資金洗浄した金額がオリコンの枚数×CDの価格って感じかね
http://livedoor.blogimg.jp/dqnplus/imgs/f/f/fff69a26.jpg
0436デフォルトの名無しさん
2012/01/11(水) 22:29:13.730437デフォルトの名無しさん
2012/01/11(水) 22:36:45.18正しいと思ってやってるんだから
使い方おかしい分けじゃないと思う
0438デフォルトの名無しさん
2012/01/11(水) 22:38:14.09単なる「慣習」だったYO
JISのサイトは見れない(くそっ!)から
規格票でどうなってるかは不明
http://www2.research.att.com/~bs/bs_faq.html
http://www.libjingu.jp/trans/bs_faq2-j.html
0439デフォルトの名無しさん
2012/01/11(水) 22:42:12.71マクロは全部キャピタルで書いた方が良いと思う
つか、
マクロなんか使うな
0440デフォルトの名無しさん
2012/01/11(水) 22:42:49.40間違っていると信じて」行った犯罪である。本人は自らの正当性を確信していることがポイントであり、立法や命令に違犯
(「違反」ではない)しているとの認識を持っているかどうか、あるいは処罰を予想しているかどうかは関係ない。
「確信犯」という語は、「倫理的に非難されるべき行為を、意図的に行う」という故意犯罪や常習犯罪の意味で一般化して
用いられがちだが、これは誤用である。社会正義や良心といった内心の動機部分が確信犯を理解する上で重要である。
0441デフォルトの名無しさん
2012/01/11(水) 22:43:51.970442デフォルトの名無しさん
2012/01/11(水) 22:46:27.410443デフォルトの名無しさん
2012/01/11(水) 22:50:32.37テンプレート使え、カス
0444デフォルトの名無しさん
2012/01/11(水) 23:29:51.310445デフォルトの名無しさん
2012/01/11(水) 23:48:23.56> Never use names with all capital letter (e.g., BEGIN_TRANSACTION)
> because that's conventionally reserved for macros.
> Even if you don't use macros, someone might have littered
> your header files with them.
規格上は知らんが、禿的には全部大文字の名前は
マクロのために予約されてるので使うなってさ
0446デフォルトの名無しさん
2012/01/12(木) 00:00:34.440447デフォルトの名無しさん
2012/01/12(木) 00:07:56.320448デフォルトの名無しさん
2012/01/12(木) 00:59:15.98デザインパターンの勉強をしているのですが、
下記のコードがよく分かりません。
http://www.netobjectives.com/resources/books/design-patterns-explained/cpp-code-examples/chapter10/#10-3Client
●質問1
CircleとRectangleは、Shapeを継承していますが、
継承先でCircle::drawCircle()およびRectangle::drawLine()が純粋仮想関数にされています。
これらはShapeには実装があります。
継承先で純粋仮想関数としてオーバーライドするものをはじめて見たのですが
これによって何を実現することができるのですか?
使用不可にするために純粋仮想関数にしているのでしょうか?
●質問2
サンプルコードなので仕方が無いですが、
Factory::getShapes()はほとんど空です。
ここにはどのようなコードが書かれることを期待しているのでしょうか?
ちゃんとデータを入れて返してやろうと思って次のコードを書きましたが、
Circleが抽象クラスなのでうまくいきません。
Shape **myShapes = new Shape*;
*myShapes = new Circle[10];
0449デフォルトの名無しさん
2012/01/12(木) 01:00:32.72よろしくお願いします。
0450デフォルトの名無しさん
2012/01/12(木) 01:24:22.660 [0xbf8ba364] size=12
1 [0xbf8ba364] size=12
2 [0xbf8ba364] size=12
3 [0xbf8ba364] size=12
*** glibc detected *** ./a.out: realloc(): invalid next size: 0x08776008 ***
と表示され、停止してしまいます。途中まではうまく動いているようなんですが、
どうしたらいいでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
class hoge { };
int main(int c,char** v)
{
hoge** p = NULL;
int i;
for (i=0; i<10; i++) {
if ( (p = (hoge**)realloc( p, sizeof(hoge*)*i )) == NULL) return 1;
printf("% 2d [0x%08x] size=%d\n", i, &p, malloc_usable_size(p));
hoge* ptr_hoge = new hoge();
p[i] = ptr_hoge;
}
free(p);
return 0;
}
0451デフォルトの名無しさん
2012/01/12(木) 01:39:51.940452デフォルトの名無しさん
2012/01/12(木) 01:50:40.70たこるぞほんまに
0453450
2012/01/12(木) 01:51:28.49ありがとうございます。ご指摘のとおり、以下のようにしてみるとうまく行きました。
- hoge* ptr_hoge = new hoge();
- p[i] = ptr_hoge;
+ *p[i] = hoge();
0454デフォルトの名無しさん
2012/01/12(木) 01:53:22.290456デフォルトの名無しさん
2012/01/12(木) 02:01:36.77#include <vector>
class hoge { };
int main(int c,char** v)
try
{
std::vector<hoge> p;
for (int i=0; i<10; i++) {
p.push_back(hoge());
}
return 0;
}
catch (...)
{
return 1;
}
0457デフォルトの名無しさん
2012/01/12(木) 02:08:00.50グローバル スコープを持ち、_ で始まる名前
_ で始まり、その次が大文字の名前
__ を含む名前
の3種類か。グローバルは小文字も駄目だったんだな、知らなかった。
0459デフォルトの名無しさん
2012/01/12(木) 07:11:11.38あくまでコンパイラ屋のためにな
0460デフォルトの名無しさん
2012/01/12(木) 08:23:17.01他のサイトに変えたら?
そのサイトのコードが高尚すぎるのか
単に間違ってんのか分からんが、
デザパタの分かりやすい例なら他のサイトにも色々あるし、
他を調べて後で見直すのも手よ。
個人的には、不審な点が多々あるんで
単に間違ってるだけだと思う
0461デフォルトの名無しさん
2012/01/12(木) 10:23:17.470462デフォルトの名無しさん
2012/01/12(木) 16:09:02.202chやニコニコ動画に民主党から反日工作費が流れていることが知られるようになってきた。
民主党が用意した資金で工作員が2chを荒らしていることもだんだんと知られるようになってきた
0463デフォルトの名無しさん
2012/01/13(金) 01:23:39.91レスありがとうございます。
CircleとRectangleはそのまま使うものではなかったみたいです。
純粋仮想関数にしているのはCircleとRectangleを更に継承させるためのようです。
・質問1について
純粋仮想関数した方を使用不可にするのではなく、
されなかった方が使用不可になります。
Circleでいうと、Circleを継承したクラスではdrawCircleを実装しなければならず、
drawLineが使用不可になります。
Shapeを限定した使い方になります。
Shapeは一般的な「形」を定義した側面になります。
・質問2について
これも同じく、Circle、Recltangleを継承したクラスのインスタンスをnewすることになります。
ただしgetShapeはShape**なので、これを使うクラスからは
drawCircleを直接使うことはできず、drawのみ使うことができます。
drawの内容はCircleクラスにあるので、
インスタンスの型によってdrawの実装が与えられます。
Bridgeパターンを説明するよいコードだという印象を受けました。
0464デフォルトの名無しさん
2012/01/13(金) 08:14:02.47納得してるのに言う事でもないか知れないけど、
このサンプルは変だよ。
完全仮想関数によってCircleで有れば、
ShapeのdrawCircle実装が使われなくなる。
使おうと思えば使えるが、C++でも滅多に
使わない機能だし、それを読む人が使用することを
期待して書いてるとも考えられない。
なので、Shapeの内容はdraw関数以外存在意義がなくおかしい。
そもそもShapeにdrawCircleや、
drawLine、
myDrawingがあるのが変だし。
myDrawingはCircleとRectangleが個々に持ってりゃ済む。
0465デフォルトの名無しさん
2012/01/13(金) 08:29:29.052つの描画システムDP1とDP2が存在していて、それぞれに円と四角形の描画機能が乗っかってる。
この2つのシステムを一つのインタフェースで使うために
アダプタとファサードとブリッジの3つのパターンを使う。
Circleクラスに純粋仮想関数があるのはそのため。
本書を読んでるとつるっと入ってくるけど、そうでないならわかりにくっ。
0466デフォルトの名無しさん
2012/01/13(金) 08:59:11.270467デフォルトの名無しさん
2012/01/13(金) 17:11:43.080468デフォルトの名無しさん
2012/01/13(金) 20:23:14.380469デフォルトの名無しさん
2012/01/13(金) 20:38:58.280470デフォルトの名無しさん
2012/01/13(金) 22:07:16.56#ifdef __cplusplus
#error hasta la vista baby!
#endif
0471デフォルトの名無しさん
2012/01/13(金) 22:12:12.20四則演算をするときに、小数を扱うにはどうしたらいいんでしょうか?
0472デフォルトの名無しさん
2012/01/13(金) 22:17:06.710473デフォルトの名無しさん
2012/01/13(金) 22:20:28.830474デフォルトの名無しさん
2012/01/13(金) 22:26:50.92何がやりたいのか全く分からん
0475デフォルトの名無しさん
2012/01/13(金) 22:38:03.58yamada 68
shimizu 100
yoshioka 74
hosaka 28
のように名前と得点が書かれたテキストファイルがあって、この平均点を求めたいです
それでhttp://codepad.org/WHKCSHqPを元にしてコードをつくってみたのでが、
テキストの得点部分が小数になるとどうも上手く機能しません。
いろいろいじってみたんですが結局できませんでした。
アドバイスお願いします
0476デフォルトの名無しさん
2012/01/13(金) 22:43:03.16文字型(char)の配列では、少数は使えません
0477デフォルトの名無しさん
2012/01/13(金) 22:47:13.02やっぱそこですか・・・
charを小数に変換するような関数使うんですか?
0478デフォルトの名無しさん
2012/01/13(金) 22:49:11.86doubleで受けろよ
0479デフォルトの名無しさん
2012/01/13(金) 22:51:24.67貼ったのは元のコードでdoubleにしたりlfにしてみたんですがやっぱり上手くいきませんでした・・・
0480デフォルトの名無しさん
2012/01/13(金) 22:58:12.03stdio.hとstdlib.hをインクルードはしてるんだろうね?
0481デフォルトの名無しさん
2012/01/13(金) 23:00:59.64atof()は、Anal to Fuckの略な、
0482デフォルトの名無しさん
2012/01/13(金) 23:03:55.04素人童貞ですいません
0483デフォルトの名無しさん
2012/01/13(金) 23:15:13.00手ほどきしてやれ
0484デフォルトの名無しさん
2012/01/13(金) 23:28:22.58アンダーバー付きならコンパイラ屋の領域だから
ユーザーは使えないし、小文字使おうが何使おうが問題ない
0485デフォルトの名無しさん
2012/01/13(金) 23:57:33.02@aritayoshifu 有田芳生
捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の
行方はどこに?
@minorucchu ジャーナリスト 田中稔
野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。
34分前 webから
https://twitter.com/#!/minorucchu/status/157687110562881537
鹿野と筒井らしい
自公は問責も視野に調査開始だって
0486デフォルトの名無しさん
2012/01/14(土) 17:00:21.07ユーザーは使えないし、
ユーザーは使えないし、
0487デフォルトの名無しさん
2012/01/14(土) 17:25:39.26使えないだろ。使っちゃいけない。
0488デフォルトの名無しさん
2012/01/14(土) 18:12:31.09http://codepad.org/N8er8eMm
8行目が4,3,2,1,0,になって欲しいんだけどなんでこうなっちゃうか教えて欲しい
コピーコンストラクタが悪いんだろうけど何がおかしいのかわからなくて困ってる
0489デフォルトの名無しさん
2012/01/14(土) 18:13:45.880490デフォルトの名無しさん
2012/01/14(土) 18:51:01.55デバッガとか使えばすぐ分かると思うが
× for(int i=0;i<size;i++){
○ for(int i=1;i<=size;i++){
0491デフォルトの名無しさん
2012/01/14(土) 18:53:33.18いろいろ突っ込みたいところはあるが、とりあえず動くようにした
http://codepad.org/eQBwEsze
0492デフォルトの名無しさん
2012/01/14(土) 18:55:15.35あーなるほど勘違いしてた
ありがとう
0493デフォルトの名無しさん
2012/01/14(土) 18:58:56.43突っ込み所満載でごめん
わざわざありがとう
0494デフォルトの名無しさん
2012/01/14(土) 22:54:33.77で、禿をしばきにでも行くのか? がんばれなw
0495デフォルトの名無しさん
2012/01/15(日) 12:30:10.58FNN 2010年7月4日
民主党 29.9% 自民党 16.3%
ttp://sankei.jp.msn.com/politics/policy/100706/plc1007060530003-n1.htm
ttp://www.fnn-news.com/archives/yoron/inquiry100705.html
マスコミに、ダマされるなよ。
0496デフォルトの名無しさん
2012/01/15(日) 15:37:43.17なんでpragmaとか使わず
拡張キーワード使うんだろうな
MSは死ねばいいのに
0497デフォルトの名無しさん
2012/01/15(日) 15:47:46.560498デフォルトの名無しさん
2012/01/15(日) 15:51:51.72omp みたいなやり方でいくらでも出来るじゃん
0499デフォルトの名無しさん
2012/01/15(日) 15:54:40.720500デフォルトの名無しさん
2012/01/15(日) 16:06:40.03勝手に消えてくれる訳じゃないし
0501デフォルトの名無しさん
2012/01/15(日) 17:28:30.03どっちみち他のコンパイラにそのまま持って行けないんじゃないのか
あと#pragmaだと#defineに含められないのがな
(_Pragma演算子で解決はされるけど、
_Pragma演算子の無いコンパイラに持って行けないな)
0502デフォルトの名無しさん
2012/01/15(日) 19:22:16.97plug的なものを連想したが関係ないよね
0503デフォルトの名無しさん
2012/01/15(日) 19:30:36.820504デフォルトの名無しさん
2012/01/15(日) 23:54:54.27野田内閣は過半数が帰化人
野田はどうだろうか
韓国人から賄賂を貰い、韓国人の集いに出席している野田は
首になった蓮○はシャブで逮捕歴のある人間と仲が良いな。蓮○自身はやってんの?
い-6-1
テレビが言えない民主党のスポンサー=韓国北朝鮮
あとはもうわかるよな
0505デフォルトの名無しさん
2012/01/16(月) 16:11:18.68たとえば以下のようなコードで、Unko はクラステンプレートにせず、
処理部のみをテンプレート化する、といった具合です
struct Unko {
void Func() {
if(条件) 処理A;
else 処理B;
}
処理A用データ dataA;
処理B用データ dataB;
};
0506デフォルトの名無しさん
2012/01/16(月) 16:13:22.73void Func() {
0507デフォルトの名無しさん
2012/01/16(月) 16:13:54.63else B;
ってこと?
0508デフォルトの名無しさん
2012/01/16(月) 16:26:14.33条件は内部で生成でき、且つ外部では同じコードで記述したいため、Unko のみで操作できるのが望ましいです
>>507
そうです。
AやBは関数でもメンバ関数でも何でも
0509デフォルトの名無しさん
2012/01/16(月) 16:45:03.71条件は定数でいいのか?
0510デフォルトの名無しさん
2012/01/16(月) 16:50:49.51やはりテンプレート化するにはハードコーディングするしかないのでしょうか
0511デフォルトの名無しさん
2012/01/16(月) 17:05:20.160512デフォルトの名無しさん
2012/01/16(月) 17:13:10.030513デフォルトの名無しさん
2012/01/18(水) 12:48:59.79class X { static const whcar_t A = L"a"; };
ができると思っていたのですが CGG 4.5 だとリンク時に A
が無いと言われました。
whcar_t を int にするとリンクできたのですが static const
メンバ変数をクラス内で初期化できるのは int 型だけですか?
0514デフォルトの名無しさん
2012/01/18(水) 12:56:03.110515デフォルトの名無しさん
2012/01/18(水) 14:25:45.620516デフォルトの名無しさん
2012/01/18(水) 15:04:24.74すみません。whcar_t ではなく wchar_t でした。
>>514
bool を使用しているのをよく見かけるのですがそれは間違いでしょうか?
0517デフォルトの名無しさん
2012/01/18(水) 15:11:47.020518デフォルトの名無しさん
2012/01/18(水) 15:25:11.420519デフォルトの名無しさん
2012/01/18(水) 15:25:21.71L'a'の間違いじゃね?
0520デフォルトの名無しさん
2012/01/18(水) 15:28:45.19あれ?boolの規格は1Byte以上じゃなかったっけ?
しかも2008からは1Byteになってたと思うんだけど
0521デフォルトの名無しさん
2012/01/18(水) 15:38:43.35http://msdn.microsoft.com/library/tf4dy80a
規格違反だとほざくならちゃんと規格読めバカ
5.3.3 Sizeof
[Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.(69)]
69) sizeof(bool) is not required to be 1
0522デフォルトの名無しさん
2012/01/18(水) 16:02:39.92すみません。これも間違っていました。L"a" ではなく L'a' でした。
boost 1.42.0 のソースを見ても普通にクラス定義の中で
static const bool value = false のように初期化していますね。
0523デフォルトの名無しさん
2012/01/18(水) 16:39:11.74ならvcではコンパイルできた。
L"a"じゃintでもリンクの以前にコンパイルできないだろ。
よく見たらCGGってなんだ。
突っ込みどころが多くて釣りの練習に見えてきた。
0524デフォルトの名無しさん
2012/01/18(水) 17:19:46.860525デフォルトの名無しさん
2012/01/18(水) 18:02:12.680526デフォルトの名無しさん
2012/01/18(水) 18:32:51.49すみません。CGG ではなく GCC の間違いでした。
以下のコードを g++ main.cpp でコンパイルすると undefined reference to `X::Y'
が出ますが、wchar_t を int に変えるとエラーが出ません。
----
#include <vector>
class X { public: static const wchar_t Y = L'a'; };
int main() {
std::vector<wchar_t> v;
v.push_back( X::Y );
return 0;
}
0527デフォルトの名無しさん
2012/01/18(水) 18:43:39.170528デフォルトの名無しさん
2012/01/18(水) 19:05:06.21JIS X3014:2003 の 9.4.2 静的データメンバの 4 段落目に
静的データメンバが const 付き汎整数型又は const 付き列挙型の場合、
クラス定義内の静的データ宣言には、《定数初期化子》を指定することができる。
とあるので int 型以外でもできるのではないでしょうか?
0529デフォルトの名無しさん
2012/01/18(水) 19:13:29.220530デフォルトの名無しさん
2012/01/18(水) 19:34:25.18JIS X3014:2003 の 3.9.1 基本型の 7 段落目に
bool 型, char 型, wchar_t 型, 符号付き整数型及び符号なし整数型をまとめて、
汎整数型と呼ぶ。
とあるので wchar_t 型も汎整数型ではないでしょうか?
0531デフォルトの名無しさん
2012/01/18(水) 20:05:08.670532デフォルトの名無しさん
2012/01/18(水) 21:02:51.230533デフォルトの名無しさん
2012/01/19(木) 01:16:00.80東京にある6つのキー局の内、製作から財務まで一貫して朝鮮人が行ってるテレビ局が1つ
中国共産党から毎年大量の反日工作費が流れているテレビ局が2つ
もろに北朝鮮と繋がっているテレビ局が1つ
年寄はまだまだテレビという外国人に騙され続ける
0534デフォルトの名無しさん
2012/01/19(木) 01:19:13.720535デフォルトの名無しさん
2012/01/19(木) 02:27:34.72push_back() の引数 wchar_t const& で Y への直接の参照が使われてるから、
定義が必要になってる。
↓の定義を追加すればおk。
const wchar_t X::Y;
int にしてエラーが出なくなるのは、 push_back() の引数として wchar_t const& に
暗黙変換の結果が使われることで Y への直接の参照が使われなくなるからだね。
0536デフォルトの名無しさん
2012/01/19(木) 10:10:33.24なるほど。
仕様書をよく読んだら JIS X3014:2003 の 9.4.2 静的データメンバの 4 段落目の最後に
そのメンバは、それがプログラム内で使われるとき、やはり名前空間有効範囲内で定義し
なければならないし、名前空間有効範囲内の定義の中に《初期化子》を含んではならない。
とあるので、その static const 変数を使用するときは参照やポインタを得るかどうかに
かかわらず定義も追加しないとダメなようですね。
0537デフォルトの名無しさん
2012/01/19(木) 12:31:29.57かなり意味変わってくるんだがな。
0538デフォルトの名無しさん
2012/01/19(木) 17:40:41.12なんでもいいのでマクロに詳しいやつ教えてください。
0539デフォルトの名無しさん
2012/01/19(木) 17:46:49.36マクロを使わずに書く方法を考えることだ
0540デフォルトの名無しさん
2012/01/19(木) 17:54:10.15gcc拡張についても触れてるから注意ね。
プリプロセッサっつーかコンパイラのマニュアルが一番詳しいと思う。
0541デフォルトの名無しさん
2012/01/19(木) 18:04:12.72それを目指してマクロを大量に使うことから始めよう。
0542デフォルトの名無しさん
2012/01/19(木) 18:27:15.02コンパイルしたら使わない関数のためにメモリーが消費されるんだぞ。
0543デフォルトの名無しさん
2012/01/19(木) 18:29:18.970544デフォルトの名無しさん
2012/01/19(木) 18:30:48.15マクロだと定数はマジックナンバーと同等の感じで埋め込まれるから微妙すぎる。
0545デフォルトの名無しさん
2012/01/19(木) 19:01:03.72リンカーに削除してもらう
0546デフォルトの名無しさん
2012/01/19(木) 19:28:06.800547デフォルトの名無しさん
2012/01/19(木) 19:30:54.910548デフォルトの名無しさん
2012/01/19(木) 19:56:19.207.1.5.1 The cv-qualifiers
2 An object declared in namespace scope with a const-qualified type has internal linkage unless it is explic-
itly declared extern or unless it was previously declared to have external linkage. A variable of non-
volatile const-qualified integral or enumeration type initialized by an integral constant expression can be
used in integral constant expressions (5.19). [Note: as described in 8.5, the definition of an object or subob-
ject of const-qualified type must specify an initializer or be subject to default-initialization. ]
0549デフォルトの名無しさん
2012/01/19(木) 21:51:49.950550デフォルトの名無しさん
2012/01/19(木) 21:59:11.400551デフォルトの名無しさん
2012/01/20(金) 00:09:01.060552デフォルトの名無しさん
2012/01/20(金) 00:11:06.61windowsのCreateEvent&WaitFor...Object的な
簡単なものはありませんか.
共有メモリにmutexとかセマフォを乗っけるしかないのでしょうか.
0553デフォルトの名無しさん
2012/01/20(金) 00:26:54.11http://www.fireproject.jp/feature/c-language/process/fork-wait.html
0554552
2012/01/20(金) 00:37:01.92質問が適切ではなかったです.
起動順等が不定で,異なるアプリケーション同士のプロセス間通信が必要です.
あと,これらのアプリではそれぞれ別の仕事をしてるので,
プロセスを勝手に終了するわけにもいきません.
WaitforSingle…みたいに許可が出るまでsleepしたいのですが…
(各プロセス内ではマルチスレッドになっています^^;)
0555デフォルトの名無しさん
2012/01/20(金) 00:49:01.80http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/wait.2.html
0556デフォルトの名無しさん
2012/01/20(金) 01:14:51.870557デフォルトの名無しさん
2012/01/20(金) 07:20:26.88所属?
0558デフォルトの名無しさん
2012/01/20(金) 08:05:42.97グローバルの場合はconstだけでいいが
クラスメンバーの場合、staticを付けないと、
オブジェクトのメンバーとみなされ、
外部からアクセスできないし、定数扱いもされない。
0559デフォルトの名無しさん
2012/01/20(金) 08:18:33.22static constで定義したマジックナンバーが埋め込まれるのと
変数のアドレスというマジックナンバーが埋め込まれるのの
どっちが効率いいか考えてみろ。
static constはファイルスコープで初期化後変更できない変数なのか
コンパイル時定数なのか区別が付かないからめんどいな。
0560デフォルトの名無しさん
2012/01/20(金) 08:36:05.99北朝鮮の国営メディアは、韓国のイ・ミョンバク大統領が、キム・ジョンイル総書記の死去後初めて、韓国軍の最前線の部隊を視察し、
北朝鮮に対する警戒を緩めないよう指示したことについて、「悲しみのなかにあるわが国の人民に対する許し難い冒とくだ」として、
大統領を「人間のくず」と呼んで厳しく非難しました。
http://www3.nhk.or.jp/news/html/20120120/t10015405461000.html
0561デフォルトの名無しさん
2012/01/20(金) 09:29:28.77もしかして、static constな整数は定数と同じ扱いをされるから最適化によって消えることさえあるのを知らないのだろうか。
0562デフォルトの名無しさん
2012/01/20(金) 11:00:36.69>整数は定数と同じ扱いをされるから
されない場合があるのを知らないのか?
static const int hoge1 = 1 + 1;
のように書くとコンパイル時定数になって、アセンブリには2が埋め込まれる。
static const int hoge2 = func();
のように書くと、ただのconst変数になって、配列の添字などにも使えない。
アセンブリにはhoge2のアドレスが埋め込まれる。
>消えることさえある
どちらの場合も、数値が消えたらプログラムの動作かわるから、消えるわけないだろ。
0563デフォルトの名無しさん
2012/01/20(金) 11:32:43.19Hoge(int v) : v(v) {}
const int v;
};
0564デフォルトの名無しさん
2012/01/20(金) 11:51:32.890565デフォルトの名無しさん
2012/01/20(金) 12:00:41.090566デフォルトの名無しさん
2012/01/20(金) 12:08:16.08if (foo) {
...;
}
こんなのだと1は消え去るな。
0567デフォルトの名無しさん
2012/01/20(金) 12:57:07.21initialized by an integral constant expression が読めないバカはお帰りください
0568デフォルトの名無しさん
2012/01/20(金) 13:29:37.720569デフォルトの名無しさん
2012/01/20(金) 13:50:10.600570デフォルトの名無しさん
2012/01/20(金) 16:13:22.080571デフォルトの名無しさん
2012/01/20(金) 16:19:07.500572デフォルトの名無しさん
2012/01/20(金) 17:48:42.360573デフォルトの名無しさん
2012/01/20(金) 18:15:43.40まだまだいろいろ時間がかかりそうなんだな
ttp://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx
0574デフォルトの名無しさん
2012/01/20(金) 18:22:31.29VIPにたまに立ってるよ。
0575デフォルトの名無しさん
2012/01/20(金) 19:23:30.66VCのC++2011対応は遅れ気味になるのも仕方ないんじゃないか、と。
代わりにC#はさらに使いやすくなって窓プログラム開発は一層のRAD化が進行すると期待される
0576デフォルトの名無しさん
2012/01/20(金) 19:30:36.68糞重いWPF
オワコンのSilverlight
Windows8でしか使えないWinRT
C#ってこんなんしかないんだけど
0577デフォルトの名無しさん
2012/01/20(金) 19:58:47.14clangとgccさえ対応してくれりゃ問題ない
いつまでゴミを使う気だ?
0578デフォルトの名無しさん
2012/01/20(金) 20:03:43.090579デフォルトの名無しさん
2012/01/20(金) 20:10:12.45別ファイルでextern宣言したクラス(の配列)をform1.h等で参照したいのですがコンストラクタが上手く働いてくれないのか
ゴミ値ばかりで上手く動作してくれません。
何かヒントもらえませんか?
0580デフォルトの名無しさん
2012/01/20(金) 20:17:40.29くだすれC++/CLI(初心者用)part2
http://toro.2ch.net/test/read.cgi/tech/1268613679/l50
0581デフォルトの名無しさん
2012/01/20(金) 20:17:42.57バカ言え
気にするからこそ使うものだよ
0582デフォルトの名無しさん
2012/01/20(金) 20:23:28.16強引にコンパイル時解決 (できなければコンパイルエラー) にするべきだよ
0583デフォルトの名無しさん
2012/01/20(金) 20:28:41.74>強引にコンパイル時解決 (できなければコンパイルエラー) にするべきだよ
それがconstexprでは?
0584デフォルトの名無しさん
2012/01/20(金) 20:38:33.10定数になれるならなる、なれないなら、ならないって方が
テンプレートの融通が効くのに
0585デフォルトの名無しさん
2012/01/20(金) 20:50:11.80はやくC++11に来いよ
0586デフォルトの名無しさん
2012/01/20(金) 21:38:03.49ありがとうございます。
それとは別スレになりますが、VC++の質問板見つけたのでそっちいって質問してみます。
紹介有難うございます。
0587デフォルトの名無しさん
2012/01/20(金) 22:13:41.390588デフォルトの名無しさん
2012/01/20(金) 22:47:13.83ああ、メンバの時の話ね
そらそうだわ
0589デフォルトの名無しさん
2012/01/21(土) 01:34:37.14constexpr 理解できてる?
コンパイル時定数は constexpr,実行時定数は const を使う、と明確に使い分ければ
const int i = func(); // コンパイル時定数? 実行時定数?
↑のような文脈依存の違いを気にする必要がなくなるってこと。
constexpr int j = func(); // コンパイル時定数
ちなみに上の例の i は、func() が constexpr 指定されていればコンパイル時定数、でなければ実行時定数になる。
0590デフォルトの名無しさん
2012/01/21(土) 01:42:31.790591デフォルトの名無しさん
2012/01/21(土) 01:47:15.280592デフォルトの名無しさん
2012/01/21(土) 03:38:30.18ニートだもん。
うすっぺらい知識で上から目線になるくらいしか
自尊心保てないんだもーん。
ぷげらっちょー。
0593デフォルトの名無しさん
2012/01/21(土) 09:26:08.03static const time_t piyo = std::time();
0594デフォルトの名無しさん
2012/01/21(土) 10:24:33.670595デフォルトの名無しさん
2012/01/21(土) 22:03:50.17ほう、では
const int i = 5;
は実行時定数なんだな?
constexprt と、その点で使い分けるんだったな
どうなんだ?
0596デフォルトの名無しさん
2012/01/21(土) 22:04:40.63ほう、では
const int i = 5;
は実行時定数なんだな?
constexprt と、その点で使い分けるんだったな
どうなんだ?
0597デフォルトの名無しさん
2012/01/21(土) 22:45:19.79const DWORD WM_MY_MESSAGE = WM_APP + 1;
が実行時定数になるのは勘弁して欲しかったな
#define から離れられない理由だった
0598デフォルトの名無しさん
2012/01/21(土) 22:55:01.42typedef const_integer<DWORD, WM_APP + 1> MyMessage;
これでいいじゃん
0599デフォルトの名無しさん
2012/01/21(土) 22:58:14.04それswitchに食わせられるのかい?
0600デフォルトの名無しさん
2012/01/21(土) 23:05:18.69ったりめーだろ
常識だ
0601デフォルトの名無しさん
2012/01/21(土) 23:09:55.51const DWORD WM_MY_MESSAGE1 = WM_APP;
const DWORD WM_MY_MESSAGE2 = WM_MY_MESSAGE1 + 1;
だった
いずれにせよ、switch に書けないのは問題だったな
0602デフォルトの名無しさん
2012/01/21(土) 23:10:24.98それ VC6 で通る?
0603デフォルトの名無しさん
2012/01/21(土) 23:15:56.520604デフォルトの名無しさん
2012/01/21(土) 23:49:07.51もはやじゃなくて昔の話をしてたんだが
あと、このコード VC2008 で通らないから何とかしてくれ
#include <stdio.h>
#include <windows.h>
const DWORD WM_MY_MESSAGE1 = WM_APP;
const DWORD WM_MY_MESSAGE2 = WM_MY_MESSAGE1 + 1;
template <class T, T val> struct const_integer { static T const value = val ; };
typedef const_integer<DWORD, WM_MY_MESSAGE1 + 1> MyMessage2;
int main(void)
{
DWORD msg = 0;
switch(msg)
{
case WM_MY_MESSAGE1:
break;
case WM_MY_MESSAGE2:
break;
case MyMessage2.value: // C2226
break;
}
printf("%u\n", MyMessage2.value); // これは OK
getchar();
return 0;
}
0605デフォルトの名無しさん
2012/01/21(土) 23:55:52.19typedef const_integer<DWORD, MyMessage1::value + 1> MyMessage2;
switch(msg) {
case MyMessage1::value: fack(); break;
case MyMessage2::value: fuck(); break;
}
0606デフォルトの名無しさん
2012/01/21(土) 23:56:18.49VC6のコンパイラにMSVCの最新コンパイラを使うことも可能では。やってはない。
しかしVC6まではコンパイラの内部バージョンも6で一緒だから違うかもしれんが。
VC6以降ではこのようにバージョンアップしてる。一部動作しなくなるかもしれないがコンパイラの基本的動作は変わってないはず。
Visual C++.NET2002 付属コンパイラバージョン7.0
Visual C++.NET2003 付属コンパイラバージョン7.1
Visual C++ 2010 付属コンパイラバージョン10.0
0607デフォルトの名無しさん
2012/01/22(日) 00:30:07.96MyMessage1 = WM_APP,
MyMessage2,
};
0608デフォルトの名無しさん
2012/01/22(日) 00:31:17.61> Copyright (C) Microsoft Corporation. All rights reserved.
えっ
0609デフォルトの名無しさん
2012/01/22(日) 00:39:34.290610デフォルトの名無しさん
2012/01/22(日) 00:39:59.85MS-Cからの通し番号
Visual C++の製品バージョンは、バージョン6.0までは内部バージョンと同じ番号が付けられていたが、
2002以降は内部バージョンではなくリリース予定年を冠するようになった。
なお、Visual C++にはコンパイラのバージョンを表す _MSC_VER というプリプロセッサ シンボルが存在するが、
これはVisual C++の前身であるMS-DOS用C/C++コンパイラ(通称MS-C)からの通し番号となっており、
コンパイラ本体である cl.exe のファイルバージョンを表している。
(このようにユーザーを混乱させかねない複数のバージョン表記は、Windowsと共通するものがある。)
Microsoft Visual C++ - Wikipedia
0611デフォルトの名無しさん
2012/01/22(日) 00:42:17.81VC6 とか VC2010 とかは主にコンパイラの名前だろ
VC6 でコンパイルしろとか、よく言うだろ
その時 CL.EXE のバージョンが違ってたら 「VC6 でコンパイル」 の意味無いだろうよ
それとも、普通は 「Visual C++ 6 付属コンパイラバージョン6.0 でコンパイル」 とでも言うのか
IDE を指すのは VC じゃなくて VS だと思うが
0612デフォルトの名無しさん
2012/01/22(日) 00:43:33.86VC6で同じ表示をしてみればver 12.0くらいになってるはず。
Visual C++ 6.0 製品バージョン 6.0 内部バージョン 6.0 _MSC_VER 1200 リリース 1998年
Microsoft Visual C++ - Wikipedia
0613デフォルトの名無しさん
2012/01/22(日) 00:47:19.75いやそれは統合環境、製品名だよ。
VCではコンパイラだけすげ替えるやつが滅多にいないだけ。
他では、コンパイラとIDEは別個で、コンパイラだけ入れ替えとか普通にできる物もある。
0614デフォルトの名無しさん
2012/01/22(日) 00:51:14.02そのコンパイラ名をVC2010などとは言わないだろ。
0615デフォルトの名無しさん
2012/01/22(日) 00:57:40.860616デフォルトの名無しさん
2012/01/22(日) 10:07:04.74GCCであるのか、またはVC++であるのかをマクロによって判断したいと思うのですが、
そのようなマクロはありますか?
例えば、_VCPP_ 、_GCC_ のような。
よろしくお願いいたします。
0617デフォルトの名無しさん
2012/01/22(日) 10:16:30.030618デフォルトの名無しさん
2012/01/22(日) 10:29:52.09__GNUG__ (C++で使ったときに定義)
0619デフォルトの名無しさん
2012/01/22(日) 11:31:50.640620デフォルトの名無しさん
2012/01/22(日) 11:37:07.630621デフォルトの名無しさん
2012/01/22(日) 13:35:23.840623デフォルトの名無しさん
2012/01/22(日) 17:04:22.520624デフォルトの名無しさん
2012/01/22(日) 19:03:28.010625クラウドがバズワードって言ってたやつ、ちょっと来い
2012/01/22(日) 19:23:43.78富士通、余剰SE変身作戦
富士通がグループで抱える約3万人のシステムエンジニア(SE)の大がかりな職務転換に乗り出した。
一つのシステムを複数の企業などが利用するクラウドサービスがこのまま普及すれば、顧客の要望を
聞いて個別システムを作り込むSEは仕事がなくなり、余剰人員問題が顕在化するからだ。野副州旦元
社長の急進的な改革路線を修正した富士通はSE余剰問題で軟着陸を目指すが、クラウドの奔流にの
み込まれる危うさもはらむ。
--
↑クラウドのせいでSE三万人が職務転換だってよ。
自分の見る目の無さを恥じろ!
0626デフォルトの名無しさん
2012/01/22(日) 19:24:42.26すごい誤爆したわ。
すまん。
0627デフォルトの名無しさん
2012/01/22(日) 19:27:07.970628デフォルトの名無しさん
2012/01/22(日) 19:28:23.410629デフォルトの名無しさん
2012/01/22(日) 19:30:56.490630デフォルトの名無しさん
2012/01/22(日) 19:33:53.60クラウドってのは機密を外部が指定したフォーマットに整形して渡し外部がこねくり回す仕組み
0631デフォルトの名無しさん
2012/01/22(日) 19:46:58.910632デフォルトの名無しさん
2012/01/22(日) 20:10:19.96そういう名目で余剰人員整理なだけ。
いままでも既製品のマイクロソフトオフィスとかが存在していて
それを使う企業ではソフト開発は必要なかった。
クラウドのGoogle docsに切り替えたところで、シェアには差はない。
ソフト開発を必要とする会社ではクラウドが進んでも依然として必要。
0633デフォルトの名無しさん
2012/01/22(日) 20:13:09.08これがクラウドになれば要らなくなる。
ソフトウェア開発者はたいした被害はないだろう。
0634デフォルトの名無しさん
2012/01/22(日) 20:55:55.540635デフォルトの名無しさん
2012/01/22(日) 20:57:38.550636デフォルトの名無しさん
2012/01/22(日) 21:21:32.820637デフォルトの名無しさん
2012/01/22(日) 21:23:23.39政府がネット潰そうとしてるからね
0638デフォルトの名無しさん
2012/01/22(日) 21:54:13.81就活中
(p)http://livedoor.blogimg.jp/jin115/imgs/3/1/31a6f8e6.jpg
就職後
(p)http://livedoor.blogimg.jp/jin115/imgs/2/b/2b790359.jpg
街の人(やらせ業者)募集中です
0639デフォルトの名無しさん
2012/01/23(月) 04:05:23.64int iostream::* null = 0;
cout << (ptrdiff_t&)null << endl;
これは、ヌルポインタは必ずしもアドレスが0にはならないよっていう
確認のコードのようですが、キャストの部分(ptrdiff_t&)の&はどういう
意味ですか?こんなキャストは見たことありません。普通にアドレスを
表示させるなら(ptrdiff_t)で良いような気もしますが、&を取るとエラーが
出てしまいますね。
0640デフォルトの名無しさん
2012/01/23(月) 04:06:44.000641デフォルトの名無しさん
2012/01/23(月) 04:36:40.740642デフォルトの名無しさん
2012/01/23(月) 04:52:50.860643デフォルトの名無しさん
2012/01/23(月) 05:13:17.81しかし、このケースでそれをやるとエラーが出るのはなぜですか?
0644デフォルトの名無しさん
2012/01/23(月) 06:01:23.79式中に現れた null は(略)メンバへのポインタへの参照となる。
(略)メンバへのポインタから ptrdiff_t への変換は、エラーが出るとおり、
できない。
参照から参照へのCスタイルキャストなら、 reinterpret_cast と同様に大抵の
型を無視して変換できる。変換の結果を使って実際にアクセスしちゃうと、
そのコードを含めてほぼ未定義動作になるんだけどね。
0645デフォルトの名無しさん
2012/01/23(月) 07:26:31.650646デフォルトの名無しさん
2012/01/23(月) 07:39:10.40おぼろげながら理屈はわかったような気がしますが
完全に理解するには、もう少しC++の理解が必要だと
思いますた。
0647デフォルトの名無しさん
2012/01/23(月) 07:39:21.98行えないと規格で決まっているから
環境によってはメンバへのポインタって多重継承や仮想継承の有無で
サイズが変わる事もあるし
0648デフォルトの名無しさん
2012/01/23(月) 07:54:46.820649デフォルトの名無しさん
2012/01/23(月) 08:55:11.670650デフォルトの名無しさん
2012/01/23(月) 12:48:43.74あるいは代替する方法はありますか?
0651デフォルトの名無しさん
2012/01/23(月) 12:54:05.72>std::mapにはstd::vectorにあるreserveのようなメンバは無いんですか?
ありません
>あるいは代替する方法はありますか?
アロケータを自作して下さい
0652デフォルトの名無しさん
2012/01/23(月) 17:23:30.28比較演算子を向きを反対にしたコンテナを作成して
イテレータでコピーするしかないな
比較演算子が違う時点で別のコンテナとみなされるからoperator=も使えない
0653デフォルトの名無しさん
2012/01/23(月) 21:36:57.20reverse_iteratorで逆からアクセスすればいいだけじゃね?
0654デフォルトの名無しさん
2012/01/23(月) 21:42:33.12あらかじめ必要な領域を確保しておくこと。
0655デフォルトの名無しさん
2012/01/23(月) 21:57:56.74素で見間違えてた
0656デフォルトの名無しさん
2012/01/23(月) 22:01:18.250657デフォルトの名無しさん
2012/01/23(月) 22:03:11.49マクロ以外を大文字だけで書くな。
お前や、MSみたいなマクロと、Cの識別子を
ごっちゃにする奴がいるから、
外部ライブラリの導入が面倒になる。
0658デフォルトの名無しさん
2012/01/23(月) 22:10:00.24Microsoft? C/C++ Optimizing Compilerが正式名称だよな
いまでも、コマンドラインから確認できる
0659デフォルトの名無しさん
2012/01/23(月) 22:12:34.04なんで面倒になるのさ
0660デフォルトの名無しさん
2012/01/23(月) 22:22:38.96単純にプールしておけばいいだけではあるけど
普通は削除するとメモリ開放して欲しいからねえ
プールするかどうかのフラグでもあればいいんだが
0661デフォルトの名無しさん
2012/01/23(月) 22:27:11.93マクロと識別子が衝突すると、マクロが勝つんだよ。
んで、例え名前空間に識別子が入ってても問答無用でマクロが勝つ。
だから、マクロとの衝突を避けるために、マクロは全て大文字で書き、
識別子は、小文字を混ぜることがマナーになってる。言語設計者も、
絶対に識別子を全て大文字で書くのはヤメロと言っている。
この決まりを破ってトラブった有名な例に、MSのmin,maxマクロがある。
このマクロのせいで、std::min, std::maxを使ったコードが
コンパイルエラーを起こす。
0662デフォルトの名無しさん
2012/01/23(月) 22:31:00.620663デフォルトの名無しさん
2012/01/23(月) 22:34:33.57そこまでして大文字で書きたいのか?
あと、boostとか外部ライブラリに飛び火してたら、全部直すのか?
0664デフォルトの名無しさん
2012/01/23(月) 22:37:46.890665デフォルトの名無しさん
2012/01/23(月) 22:38:43.940666デフォルトの名無しさん
2012/01/23(月) 23:41:05.84よくわかった。ありがとう。
0667デフォルトの名無しさん
2012/01/24(火) 12:04:58.56v a=(v){0,0,0};
こういう書き方を見たのですが標準なんですか?
0668デフォルトの名無しさん
2012/01/24(火) 12:22:59.67キャストだよ。
explicitなコンストラクタではないので引数が合ってればキャストできるよ。
0669デフォルトの名無しさん
2012/01/24(火) 20:15:44.70C99の複合リテラルだから
C++じゃ無理
0670デフォルトの名無しさん
2012/01/25(水) 03:09:38.070671デフォルトの名無しさん
2012/01/25(水) 07:01:02.500672デフォルトの名無しさん
2012/01/25(水) 08:48:17.87PODだから出来るのか?
0673デフォルトの名無しさん
2012/01/25(水) 18:52:31.99c99や独自拡張を並存させて667 を通すコンパイラはあるけどさ
0674デフォルトの名無しさん
2012/01/25(水) 22:16:51.99(std::vector test[6][6][6]; このようなもの)
vector内の指定した位置の要素の値を書き換えたいときはどうすればいいのでしょうか?
普通なら位置の添え字を[]内に書けばいいと思いますが、配列の場合は単純に配列の添え字の後にもうひとつ[]をつければいいんですか?
例えば配列test[1][2][1]のvectorの13番目の要素ならtest[1][2][1][12]でいいんでしょうか?
0675デフォルトの名無しさん
2012/01/25(水) 22:34:16.300676デフォルトの名無しさん
2012/01/25(水) 23:07:42.29お互い頑張ろう。
0677デフォルトの名無しさん
2012/01/25(水) 23:29:20.160678デフォルトの名無しさん
2012/01/25(水) 23:49:27.18スゲーコスト高なスコープだな
0679デフォルトの名無しさん
2012/01/25(水) 23:50:45.700680674
2012/01/26(木) 00:23:17.62そんなひどいんですね、これ・・・
私が書いたコードではないんですが、私もこのひどさに気付かないほどの初心者です.
ちなみに一般的にvectorの集合を管理する場合はどういったものを使うのでしょうか?
0681デフォルトの名無しさん
2012/01/26(木) 01:15:23.61要素数が変わらないなら配列とかreserve遣って決めうちにする。
データ構造を見直す。
3次元以上は使わない。
もちろん必要なら使うことになるが・・・
3次元テンソルでも扱ってんのかい?
きっとそれ遅いから計測してホットスポット見つけたりでアルゴリズムの見直しも必要だろう。
0682デフォルトの名無しさん
2012/01/26(木) 01:34:12.90vector処理側ではメモリ大移動が起こりまくる。
0683デフォルトの名無しさん
2012/01/26(木) 01:37:06.46C++行列ライブラリ Eigen
0684デフォルトの名無しさん
2012/01/26(木) 07:22:36.37実際には一次元配列を確保して、
添字を自分で求めて使う場合が多いかな
std::vector<double> test(6 * 6 * 6 * size); と作って、
test[i][j][k][l] じゃなく、
inline int Index(int i, int j, int k, int l, int size) {
return (((i * 6) + j) * 6 + k) * size + l;
}
とした上で test[Index(i, j, k, l, size)] と使う
return i * 6 * 6 * size + j * 6 * size + k * size + l;
とどちらが速いかは実測してくれ
(バラにした方が同時計算可能になるので速くなるかもしれないし、
size が複数出ると遅くなるかもしれない)
0685デフォルトの名無しさん
2012/01/26(木) 11:00:00.680686デフォルトの名無しさん
2012/01/26(木) 11:37:52.040687デフォルトの名無しさん
2012/01/26(木) 11:59:50.79boost::spirit
0688デフォルトの名無しさん
2012/01/26(木) 13:06:14.62thx
0689デフォルトの名無しさん
2012/01/26(木) 15:24:18.710690デフォルトの名無しさん
2012/01/28(土) 01:34:24.94double r = static_cast<double>(x) / static_cast<double>(y);
って書いてたんですが、キャストを使わない方法なんてあります?
Casts really are mostly avoidable in modern C++.
というビャーネ先生からすると避けられるものなのかとふと思いまして。
0691デフォルトの名無しさん
2012/01/28(土) 01:36:23.260692デフォルトの名無しさん
2012/01/28(土) 01:44:21.500693デフォルトの名無しさん
2012/01/28(土) 02:12:55.830694デフォルトの名無しさん
2012/01/28(土) 03:05:35.841.0 * x / y はそれ明示してないだけでキャストしてるじゃないですかー。
とはいえどうもありがとう。
>演算子に対する単元とかtraitsでほしいよねー。
ほしいですね。あってもよさそうに思うけど無いって事はなんか問題
あるんでしょうけど。
0695デフォルトの名無しさん
2012/01/28(土) 03:11:42.130696デフォルトの名無しさん
2012/01/28(土) 03:13:09.160697デフォルトの名無しさん
2012/01/28(土) 03:17:49.75つキャストを使わない方法
0698デフォルトの名無しさん
2012/01/28(土) 06:38:33.46・固定少数点で計算してからdoubleを作る
・xyと答えの変換テーブルを用意する
・xとy全組み合わせのif文を書く
0699デフォルトの名無しさん
2012/01/28(土) 09:14:55.11r=d[x][y];
0700デフォルトの名無しさん
2012/01/28(土) 12:17:33.92・x,yを最初からdoubleにする
0701デフォルトの名無しさん
2012/01/28(土) 12:41:31.280702デフォルトの名無しさん
2012/01/28(土) 13:35:28.600703デフォルトの名無しさん
2012/01/28(土) 14:16:52.51string型で X = "文字列"; を格納し,
その文字列をif文に使うことってできますか?
たとえば本来
if(a>0 && b=0) というのを
std::string X="a>0 && b=0";
if(X) としても大丈夫ですか?
0704デフォルトの名無しさん
2012/01/28(土) 14:24:31.780705デフォルトの名無しさん
2012/01/28(土) 14:29:11.350706デフォルトの名無しさん
2012/01/28(土) 14:49:38.390707デフォルトの名無しさん
2012/01/28(土) 15:12:21.69俺は面倒だからやだ。
0708デフォルトの名無しさん
2012/01/28(土) 15:35:49.81そういう処理がしたいなら、文字列として入力された条件式を構文解析して解釈するコードを書かねばならない。
boost::spiritあたりで割と簡単に実装出来るっぽいからやってみたら?
0709デフォルトの名無しさん
2012/01/28(土) 15:39:28.86まじluaちゃんかわいい
0710デフォルトの名無しさん
2012/01/28(土) 15:41:04.102.コンパイラ・スクリプトエンジンスレでどうぞ
http://toro.2ch.net/test/read.cgi/tech/1296214398/
3.氏ね
0711デフォルトの名無しさん
2012/01/28(土) 19:39:21.250712デフォルトの名無しさん
2012/01/28(土) 21:00:09.17少数桁(1の位置)を100とか1000という事にしとけば、
intだけでも小数点演算は出来る。
0713デフォルトの名無しさん
2012/01/28(土) 21:21:11.20余に限って適用すべきだな
0714デフォルトの名無しさん
2012/01/28(土) 22:13:17.11また、std::string型の"false"をbool型に変換するにはどうすれば良いんですか?
0715デフォルトの名無しさん
2012/01/28(土) 22:15:17.93boost::lexical_cast
0716デフォルトの名無しさん
2012/01/28(土) 22:27:45.56atoi
strtol
sscanf
istringstream
0717デフォルトの名無しさん
2012/01/28(土) 22:47:45.99boolに変換することは不可能なんでしょうか・・・
0718デフォルトの名無しさん
2012/01/28(土) 23:02:41.38それ位自分で関数作れなくない?
bool Tobool (std::string str) {
if (str == "false") {
return false;
} else if (str == "true") {
return true;
} else {
return false; //バグ止め
}
標準関数にありそうな気もするが…
0719デフォルトの名無しさん
2012/01/28(土) 23:06:02.59上のに1と0がきた時の処理もいれといたらより汎用的になるかもね。
0720デフォルトの名無しさん
2012/01/28(土) 23:18:25.190721デフォルトの名無しさん
2012/01/28(土) 23:43:56.55boolまで解釈してくれるんだ
0722デフォルトの名無しさん
2012/01/29(日) 00:01:33.90こいつも逐一削除したほうが良いんでしょうか?
こういったオブジェクトってdeleteじゃ消せないんですか?
0723デフォルトの名無しさん
2012/01/29(日) 00:02:41.850724デフォルトの名無しさん
2012/01/29(日) 00:09:19.480725デフォルトの名無しさん
2012/01/29(日) 01:14:11.81あざっすw
0726デフォルトの名無しさん
2012/01/29(日) 01:57:17.910727デフォルトの名無しさん
2012/01/30(月) 08:34:14.39Class *obj = Class.Create();
みたいなことだったりして
0728デフォルトの名無しさん
2012/01/30(月) 11:14:12.70そいつを作った奴に聞けとしか。
0729デフォルトの名無しさん
2012/01/30(月) 20:00:30.810730デフォルトの名無しさん
2012/01/30(月) 20:03:08.200731デフォルトの名無しさん
2012/01/30(月) 20:59:13.520732デフォルトの名無しさん
2012/01/30(月) 21:41:04.62ref classではメンバに直接持てないのでシェアポをnewするという意味の無い事に
(自動変数として使う分には役に立つけど)
0733デフォルトの名無しさん
2012/01/30(月) 22:26:22.25いや単にクラスオブジェクトなんだろ。
0734デフォルトの名無しさん
2012/01/31(火) 00:13:03.22>シャアポ
シャア専用ポインタ?
0735デフォルトの名無しさん
2012/01/31(火) 00:38:12.31非シグナル状態で作成しましたが、
その直後にイベントがシグナル状態になってます。
ほんとにCreateService直後にはシグナル状態になるんですが。
なぜでしょーか??
0736デフォルトの名無しさん
2012/01/31(火) 00:57:47.860737デフォルトの名無しさん
2012/01/31(火) 23:49:14.73スレ違いだし、そもそも「CreateServiceでイベントを作成しました」が意味不明。
0738デフォルトの名無しさん
2012/02/01(水) 18:05:05.08setter,getterを書くのめんどくさくなったので、
BigData & getRef(){
return &mNum;
}
でよくね。大してめんどくささは変わらないか
メリット
publicよりはカプセル化してる
コピーのコスト化からない。
デメリット
使い方間違うといやらしいバグが起きそう
他に何かある?
0739デフォルトの名無しさん
2012/02/01(水) 18:20:25.67アドレス返してどうすんの?w
それはまぁ冗談として、値の範囲チェックとかが仕込みにくくなるんじゃないかな
0740デフォルトの名無しさん
2012/02/01(水) 18:31:21.24バグの特定がしづらいってのが最大にして最高の欠点だな。
セッターでチェックしてない関数が大半とはいえ、
この実装にすると、後々実装の変更もしにくいね。
あと結局、const メンバー関数も欲しくなるだろうから手間は変わらないか。
まあ、パブリックよりはましって程度か
0741デフォルトの名無しさん
2012/02/01(水) 19:03:32.490742デフォルトの名無しさん
2012/02/01(水) 19:36:39.49オーバーライドを活かせないのが最悪。
0743デフォルトの名無しさん
2012/02/01(水) 19:51:30.88別にメンバ野ざらしでも拡張するのに問題はないでしょ
0744デフォルトの名無しさん
2012/02/01(水) 20:04:32.35getRefの中身を他のオブジェクトの関数呼出に
変えたくなったらどうすんの?
特にオーバーライドによって子クラスでの実装が違う場合。
0745デフォルトの名無しさん
2012/02/01(水) 20:19:24.48もっと具体的に何をどう変えたいのか
0746デフォルトの名無しさん
2012/02/01(水) 20:27:21.45どうして、↓の6行目でエラーになるんでしょうか?
どのように書けば(できればスマートに)、意図したとおりに動くんでしょうか。。
ttp://ideone.com/IDuWo
0747デフォルトの名無しさん
2012/02/01(水) 20:39:31.33理由はおまえさんが [] と * が同じだと思い込み強力なバイアスを持っていることだよ
C++ じゃなく C ネタだな
0748デフォルトの名無しさん
2012/02/01(水) 20:50:24.33getRefじゃ説明しづらいんで、
仮にGetPriceとしておく。
GetPriceをクラスAは、連想配列から値を取り出す形で実装する。
クラスBは、DBのレコードセットから値を取り出す形で実装する。
変数外出しじゃこんな事できん。
0749デフォルトの名無しさん
2012/02/01(水) 20:57:22.660750デフォルトの名無しさん
2012/02/01(水) 21:00:48.91void Print(int i) ;
// 古いコード
struct Hoge {
int price ;
} ;
// 古いクライアントコード
Hoge hoge ;
Print(hoge.price) ;
// 新しいコード
struct IPrice {
virtual int Get(void) const = 0 ; // 継承して連想配列やDBを扱うように実装
} ;
class Price {
SP<IPrice> body ;
public:
Price(SP<IPrice> body) : body(body) { }
operator int (void) const { return body->Get() ; }
} ;
struct Hoge {
Price price ;
Hoge(void) : price(CreateDefaultPrice()) { }
Hoge(Price price) : price(price) { }
} ;
// 新しいクライアントコード(変更なしで動く。拡張は成功だ!)
Hoge hoge ;
Print(hoge.price) ;
0751738
2012/02/01(水) 21:02:07.31thx
すいません。そこまで考えてませんでした。
関数でラップしてある分だけ何か出来るってことか
自分が考えてたメリットとしてはコピー時のコストぐらいしか考えてなかった
0752738
2012/02/01(水) 21:10:07.01たぶん意図した実装と違うような?
ヒープでもスタックでもいいからメモリを確保してmemcpyだ
#include <iostream>
int main()
{
int ia[ 2 ][ 4 ] = { { 1, 3, 5, 7 }, { 2, 4, 6, 8 } };
int* ip;
ip=reinterpret_cast<int*>(ia);
for ( int i = 0 ; i < 2 ; ++i )
{
for ( int j = 0 ; j < 4 ; ++j )
{
std::cout << *(ip+i*j+j) << ' ';
}
std::cout << std::endl;
}
return 0;
}
0753デフォルトの名無しさん
2012/02/01(水) 21:17:02.84冗長なネタだなぁー
0754デフォルトの名無しさん
2012/02/01(水) 21:43:47.24Cash &operator = (const Base &source)
{
price = source.GetPrice();
label = source.GetLabel();
}
こういう関数がある時どうすんの?
テンプレートである程度何とかなるけど、
operator=が抽象化された関数だったら詰むよね。
0755デフォルトの名無しさん
2012/02/01(水) 21:47:40.97struct IPrice {
virtual int Get(void) const = 0 ;
virtual void Set(int value) = 0 ;
} ;
class Prince {
0756デフォルトの名無しさん
2012/02/01(水) 21:50:01.92public:
Price(SP<IPrice> body) : body(body) { }
operator int (void) const { return body->Get(); }
Price & operator = (int value) { body->Set(value) ; return *this ; }
} ;
// 以下略
0757746
2012/02/01(水) 21:50:35.60一般的なルールはあるんでしょうか?
ia
↓
ia[0] → ia[0][0] … ia[0][1] … ia[0][2] … ia[0][3]
:
ia[1] → ia[1][0] … ia[1][1] … ia[1][2] … ia[1][3]
みたいな、配置とは異なる?
a[ i ] が *( a + i ) の糖衣構文である辺りが、妙に突っかかって分かりません…
int** ip = reinterpret_cast<int**>( ia );
した後に、逆参照するとセグメ違反で落ちるし、よく分かりません…
ia[ 2 ][ 4 ] ⇒ *( ia + 2 )[ 4 ] ⇒ *( *( ia + 2 ) + 4 )
ip[ 2 ][ 4 ] ⇒ *( ip + 2 )[ 4 ] ⇒ *( *( ip + 2 ) + 4 )
ia の型が int (*)[ 4 ] … 最も外側の添え字以外は固定
ip の型が int**
どうして、ia ⇒ ip の型変換が規格で許可されていないんでしょうか?
やはり、コンパイラによるメモリ確保とその配置ルールに関係があるんでしょうか…
0758デフォルトの名無しさん
2012/02/01(水) 22:01:14.41ttp://kmaebashi.com/programmer/pointer.html
の多次元配列見ればわかるかな
0759デフォルトの名無しさん
2012/02/01(水) 22:01:48.43jが4ね。
ia[2][4]とia[8]はメモリ上は同じだ
ここで聞くよりぐぐるか本見たほうが早いよ
0760デフォルトの名無しさん
2012/02/01(水) 22:06:17.02ん?どうやって使う気だ?
例えば下のコードはどう置き換わる?
Cash cash;
DBSource db(略);
MapSource map(略);
cash = db;
cash = map;
0761デフォルトの名無しさん
2012/02/01(水) 22:09:47.330762デフォルトの名無しさん
2012/02/01(水) 22:13:46.73int a[8];とメモリー上は全く同じ。
0763デフォルトの名無しさん
2012/02/01(水) 22:18:45.74struct ICash {
virtual void Set(DBSource const & db) = 0 ;
virtual void Set(MapSource const & map) = 0 ;
} ;
struct Cash {
Cash & operator = (DBSource const & db) { body->Set(db) ; return *this ; }
Cash & operator = (MapSource const & map) { body->Set(map) ; return *this ; }
// 以下略
0764デフォルトの名無しさん
2012/02/01(水) 22:25:33.970765746
2012/02/01(水) 22:26:36.30スタックに詰まれた2次元配列は、配列の配列として1次元状に並べられるんですね
だから、最も外側以外の添え字は固定じゃないといけないのか…
ia の型が、要素数4の配列へのポインタだから、a[ i ] と *( a + i ) の糖衣構文のうち
( a + i ) では sizeof(int) * 4 * i だけポインタが進むんですね
sizeof( ia ) == 20
sizeof( ip ) == 4
ここが、異なるんですね!
>>758
リンク先にある多次元配列の解説が、分かりやすかったです
ありがとうございます
0766デフォルトの名無しさん
2012/02/01(水) 22:27:16.59おとなになればわかる
0767746
2012/02/01(水) 23:43:04.96std::cout の出力が16進のままになっていました
誤:sizeof( ia ) == 20
正:sizeof( ia ) == 32
int ia[ 2 ][ 4 ]; の ia の型は int (*)[ 4 ] つまり、要素数4のint型配列へのポインタ、なので
素直にこの型の変数を使うと、スマートに書けることに気づきました
初期の目的を達成できました!みなさんありがとうございます!
int (*)[N] とか int (&)[N] とかの使い道って結構おもしろいかも…
ttp://ideone.com/21MPf
0768デフォルトの名無しさん
2012/02/01(水) 23:50:31.852次元配列の使用が多くて、あんまり固定2次元は使わないけどね。
0769デフォルトの名無しさん
2012/02/02(木) 14:45:33.84Vector3 v1, v2 ;
float dot = <v1, v2> ;
こういうオペレーターは定義できないんですか?
あるいはdot = (v1, v2);とか
0770デフォルトの名無しさん
2012/02/02(木) 14:58:54.210771デフォルトの名無しさん
2012/02/02(木) 16:30:07.47C++ってどのくらいで就業できるレベルになるの?
前は社内のシステム管理とミドルウェアでエクセルいじっていた程度。
0772デフォルトの名無しさん
2012/02/02(木) 16:42:28.93派遣でベテランと抱き合わせならわからんけど。
0773デフォルトの名無しさん
2012/02/02(木) 17:07:54.38C++覚えてる暇があったら就活した方が良さそうだけど
0774デフォルトの名無しさん
2012/02/02(木) 17:32:13.58つんだ、おわた、ってやつだな
0775デフォルトの名無しさん
2012/02/02(木) 17:40:00.28ベテランが年下になりそうだな。もう40間近だ。
障害者枠で採用してもらえないかと思っている。
合同説明会が来月あるからね。
21歳くらいからずっと病気を抱えていて、
去年良くなってきてようやく就業できた感じ。
0776デフォルトの名無しさん
2012/02/02(木) 17:40:35.980777デフォルトの名無しさん
2012/02/02(木) 18:52:16.73C++使う所は大抵言語知識はC+クラスレベルでよくて、
数学知識やOSの知識を求めてる。
言語知識が有ったって
名前空間すら使わせてくれない環境にイラつくだけ。
0778デフォルトの名無しさん
2012/02/02(木) 19:18:52.5340の未経験のオッサンには向いてない。
もし才能あると思ってるなら、商業的な成功は別にして
フリーでもシェアでも良いから作ってアピールすれば。
ただし自分はプログラマーでない。
0779デフォルトの名無しさん
2012/02/02(木) 19:31:29.07プログラミング技術は進歩が激しく、技術の陳腐化も著しいため、常に新しい技術に目を向け習得していくバイタリティや、
場合によっては永年の努力によって培ってきた技術を捨て去る柔軟性が必要である。
また、年功序列的賃金体系のもとでは、高年齢のプログラマはコストが高すぎると考える企業がある。
俗にIT土方とも呼ばれデスマーチとなった場合は徹夜が続いたり体力が必要となってくる。
現在では経験豊かなプログラマにも一定の需要があり、プログラマ定年説はもはや過去のものとなっているが、
コストの観点からは、一定年齢に至ったプログラマに、より単価の高いシステムエンジニアや営業へ転向がすすめられることがある。
労働者たるプログラマ
如何なる職業に就いた経緯があろうとも、資本家によって頭数の一つとして利用されるがままに生涯を終える。
頭数として利用される立場である以上、プログラマ自身のアイデンティティに対する価値は最初から全く期待されておらず、
肉体の能力や精神的な意欲の低下が顕著となる30代後半以降の局面を以って職業を継続する事が困難な状況に陥る傾向がある。
本来は知的労働者であるべきプログラマが、そのアイデンティティを無視されたままに、年齢や怪我による主に肉体的な能力の低下を理由として
簡単に使い捨てられる日本の常識的な産業構造を揶揄する意味でIT土方という言葉や新3Kという言葉はあまりにも有名である。
プログラマ - Wikipedia
0780デフォルトの名無しさん
2012/02/02(木) 19:37:12.19わざわざ40間際のおっさんにありがとね。
コンピュータは好きなんだよね。飽きが来ない。
フリーソフト世界に飛び込むかな。死ぬまでの趣味として。
収入が必要なので、寒いけど郵便局の配達でもしているか。
乗りたいクルマナンバーワンのスカイラインとか、一生買えない・乗れないだろうな。
C++は使いこなせればかっこいいだろうなと思うから、
エリック・レイモンドが一にPython、二にJAVAと言っても、初めからC++で始めたわけですよ。
あと数学やOS(カーネルとかファイルシステムとかデバイスドライバかな?)が必要なら、また勉強か。
まあLinuxでもイジるしかないと思うけども、
Ubuntuとか仕掛けを見せないようにしているから、Debianでもインストールするかな。
長くなってすまない。御返事有難う。
0781デフォルトの名無しさん
2012/02/02(木) 19:37:21.72IT後進国の日本にはありません
0782デフォルトの名無しさん
2012/02/02(木) 19:37:41.250783デフォルトの名無しさん
2012/02/02(木) 19:38:49.74なんだか大学時代のアジ演説みたいだな。
0784デフォルトの名無しさん
2012/02/02(木) 19:40:36.11日本ってIT後進国だったのか。
ソフトのインターフェイスがださいとは思っていたが。
0785デフォルトの名無しさん
2012/02/02(木) 19:40:56.55それはその逆が進化の過程では?
0786デフォルトの名無しさん
2012/02/02(木) 19:43:48.76ちょっとクラスまでは今日の勉強は進めないな。
0787デフォルトの名無しさん
2012/02/02(木) 19:44:35.81ほかの仕事探して趣味で書いてるほうが幸せになれる
0788デフォルトの名無しさん
2012/02/02(木) 19:49:36.27なるほどねぇ。趣味か。
プログラミングじゃなくて、ネットワークとかデータベースを狙うかな。
経験とかを問う前に、年齢聞かれそうだけども。
0789デフォルトの名無しさん
2012/02/02(木) 19:52:15.75スカイラインは宝くじで狙って下さい
0790デフォルトの名無しさん
2012/02/02(木) 19:55:12.87IT後進国の日本にはありません
0791デフォルトの名無しさん
2012/02/02(木) 19:57:28.150792デフォルトの名無しさん
2012/02/02(木) 20:52:48.230793デフォルトの名無しさん
2012/02/02(木) 21:01:50.21IT後進国の日本人が通用する仕事は
0794デフォルトの名無しさん
2012/02/02(木) 21:22:27.45おまえのスコープは先刻見通したうえで言ってるんだから
0795デフォルトの名無しさん
2012/02/02(木) 22:04:57.790796デフォルトの名無しさん
2012/02/02(木) 22:12:22.780797デフォルトの名無しさん
2012/02/02(木) 22:13:42.43世界的には何の意味もない
0798デフォルトの名無しさん
2012/02/02(木) 22:14:05.120799デフォルトの名無しさん
2012/02/02(木) 22:14:19.71実際、今のトップ3に日本は入っていない
たとえ日本が今すぐに消えてなくなっても、明日も世界は何も変わらない
0800デフォルトの名無しさん
2012/02/02(木) 22:17:03.42勘違いした人たちが海外に進出してたりしたけど
数年で日本に逃げ帰ってきてるよな
0801デフォルトの名無しさん
2012/02/02(木) 22:18:21.15ソフトウェアは一度もそういう時期がない
0802デフォルトの名無しさん
2012/02/02(木) 22:19:07.38売れてるじゃん
昔は
0803デフォルトの名無しさん
2012/02/02(木) 22:25:18.200804デフォルトの名無しさん
2012/02/02(木) 22:28:10.820805デフォルトの名無しさん
2012/02/03(金) 03:20:45.73C++から始まって、業界情報を提供してくれてありがとう。
思うんですよ。学部は化学だったから情報とは関係がない。
じゃあ、技術をみっちり教えてくれるオーストラリア大学大学院留学とかどうかなって。
40間際ではもう無理だ、詰んだ・オワタ、社会の落伍者の貧困層で生きろとか言われるかもしれません。
学費・生活費も1000万かかるでしょう。
それで留学するカネがないのですよね。
前ネットゲームやっていた時に、人の嫌がる仕事を日に3件入れて2年で2000万貯めた人がいた。
その人は当時FXの種金2000万からスタートしたれしい。
俺にFXの種金はないけども、コンピュータをみっちりやりたいなぁ。
40間際にして人生賭けてみるか。
体を動かす仕事なら、気が楽で良いかなってね。。。
0806デフォルトの名無しさん
2012/02/03(金) 03:47:55.76コンピュータの勉強なんざ大学いかないでも出来ると思うけど
0807デフォルトの名無しさん
2012/02/03(金) 03:54:20.960808デフォルトの名無しさん
2012/02/03(金) 04:46:45.96とりあえずsageろや
0809デフォルトの名無しさん
2012/02/03(金) 06:12:54.30宿題スレにすでに終わった奴がいるよ
勉強とやらをしてるみたいだが迷惑でみんな困ってる
いま暴れてる
0810デフォルトの名無しさん
2012/02/03(金) 06:50:57.480811デフォルトの名無しさん
2012/02/03(金) 08:31:19.95そんな人は、もう今世は諦めて、来世に学ぶしかない気がするわ
ネットも参考書も溢れてるこの時代、自分からやろうという気概のないやつに、新たなことが学べるかっての
0812デフォルトの名無しさん
2012/02/03(金) 08:42:04.190813デフォルトの名無しさん
2012/02/03(金) 09:48:03.41C++の設計者のホームページ見てみたら?
0814デフォルトの名無しさん
2012/02/03(金) 11:38:19.62海外の大学を金銭的な面で諦めるってことは英語できるの?
そっち方面で就職したら?
0815デフォルトの名無しさん
2012/02/03(金) 12:43:57.89C++だけ出来るようになってもしょうがないだろ
日本語覚えたら物書きで食ってけますか?ってのと同じだぞ
>>777の言うように言語以外の知識の方が重要なんだよ
ソフト作れと言われてから、下調べに何ヶ月もかかったり
分からないので作れませんでしたじゃマズイだろ。特に中途採用者は
0816デフォルトの名無しさん
2012/02/03(金) 13:21:46.670817デフォルトの名無しさん
2012/02/03(金) 15:09:29.09Pythonだけど
0818デフォルトの名無しさん
2012/02/03(金) 21:17:24.62else if (x == 0 && y == 1) z = 2;
...
というひたすら条件を羅列する処理が続くのだけれど、
条件の抜け漏れが見つけにくいし良くないと思って、
map[make_pair(0, 0)] = 0;
map[make_pair(0, 1)] = 2;
z = map.at(make_pair(x, y));
としてみた。
ただ、この処理を行うオブジェクトが何度も生成されるので、
そのたびにmapが作成されるのは非効率だな、と。
mapをstaticにするか、とか短絡的に考えたんだが、一方で、
auto lambda = [&](int a, int b, int c) -> bool {
if (x == a && y == b) { z = c; return true; }
return false;
};
lambda(0, 0, 0) ||
lambda(0, 1, 2) ||
...;
というのを考えたんだが、どうだろうか?
なんか結局最初のif, else ifが一番見やすいような気がしてきて・・・
自分ならこうする、とかあれば是非お願いします。
0819デフォルトの名無しさん
2012/02/03(金) 21:30:56.11多分岐するんだったら、自分はこれ使うが。
do {
if() { ・・・ break; }
if() { ・・・ break; }
・・・
} while(1);
0820デフォルトの名無しさん
2012/02/03(金) 21:35:08.99インデントも好きでない。
breakやらreturnを有効活用したら便利だ。
>>81の do { } while(1);全体を関数化して、分岐が確定したらreturnで戻すというのもある。
0821デフォルトの名無しさん
2012/02/03(金) 21:38:40.64コードをスクリプトで生成が正解
0822デフォルトの名無しさん
2012/02/03(金) 21:43:14.010823デフォルトの名無しさん
2012/02/03(金) 21:44:30.54後で見たとき分かりやすいかもしれない。
0824デフォルトの名無しさん
2012/02/03(金) 21:53:28.990825デフォルトの名無しさん
2012/02/03(金) 21:53:48.49switch (x+y*X_MAX){
#define PAIR(a,b) a+b*X_MAX
case PAIR(0,0):break;
case PAIT(0,1):break; }
だな
0826デフォルトの名無しさん
2012/02/03(金) 22:12:11.60{
1, // x=0 y=0
5, // x=0 y=1
3, // x=0 y=2
},
{
9, // x=1 y=0
2, // x=1 y=1
6, // x=1 y=2
},
};
int z = table[x][y];
0827818
2012/02/03(金) 22:20:12.25xがこの状態でyがこの状態ならzは「待機中」みたいな。
なので、xとyの値から一定の規則性に従ってzを自動計算させる、というのは
ちょっと難しいです。
819,820氏のシンプルさがやはり可読性の観点からも良いと思いましたので、
821氏指摘も加えてスクリプトで生成させることにしたいと思います。
825氏の方法はなるほどと思いましたがマクロはなるべく避けたいなぁ、
ということで・・・。
826氏のは・・・あとで拡張しようとしたときにtable[2][3]の部分の
変更ミスとかやりそうなので、自分にはまだ早いようです。
ともあれ皆さん色々と回答ありがとうございました。
0828デフォルトの名無しさん
2012/02/04(土) 10:43:48.49Hoge(/* 引数たくさん */);
};
// A
struct HogeEx : Hoge {
HogeEx(void) : Hoge(/* 引数固定 */) {}
};
// B
Hoge HogeEx(void) { return Hoge(/* 引数固定 */); }
Hoge hoge(HogeEx());
コンストラクタの引数を利用ケースに合わせて固定省略したい場合にはAとBどっちを使うべき?
0829デフォルトの名無しさん
2012/02/04(土) 12:20:47.340830デフォルトの名無しさん
2012/02/04(土) 12:22:46.30いじれるんですが
あくまで文脈に依存したパラメーターなのでHogeクラスには書きたくないんです
0831デフォルトの名無しさん
2012/02/04(土) 13:14:34.76どうせExのパターンが増えるんだろ
引数なしのコンストラクタは下手に意味を持たせるより未設定状態になるようにしたほうがいいんじゃないか?
0832デフォルトの名無しさん
2012/02/04(土) 13:28:03.34型である必要があるかを考えりゃいい
結果が型でないならジェネレータークラスでもいいし
class gen_hoge {
Hoge operator()();
あとわかるよな?
}
0833デフォルトの名無しさん
2012/02/04(土) 14:45:16.460834デフォルトの名無しさん
2012/02/04(土) 15:37:36.46{
ObjectManager om;
om.add(new Object());
om.add(new Object());
// 以下略
} // ObjectManagerのデストラクタでObjectをdelete
このように生成と破棄の場所が異なるようなコードは避けるべきなんですか?
{
Object o;
ObjectManager om;
om.add(&o);
}
みたいに書かれると問題ですし
そもそも、引数にnewを直に書くのが問題?
0835デフォルトの名無しさん
2012/02/04(土) 15:57:38.05それでは内部でdeleteしているという実装の都合で利用者にnewを強制してしまう
オブジェクトの寿命は外部で管理してManager内では削除する代わりにNULLポインタの代入か内部コンテナの縮小で済ませるべき
0836834
2012/02/04(土) 16:26:16.21ありがとうございます
やはりそうですよね。
ただManagerは、プログラム中にけっこう現れるので
できれば全部任せたいんですよね
そこで、
add(Object* obj) {
// list は list<Object*>
list.push_back(obj);
}
を
add(const Object& obj) {
// list は list<Object>
list.push_back(obj); // 代入
}
または
add(const Object& obj) {
// list は list<Object*>
list.push_back(new Object(obj)); // コピーコンストラクタ
}
にしてコピーするようにして
{
ObjectManager om;
om.add(Object());
}
のように利用するのはどうでしょう
コピーのコストがかかる場合が心配ですけど
0837デフォルトの名無しさん
2012/02/04(土) 16:42:43.19あくまでも、参照させてやってるだけ
という捉え方が良いと思う。
役割によって複数のコンテナを用意し、
一つのオブジェクトを複数のコンテナに所属させる
なんてよくある事だから。
0838デフォルトの名無しさん
2012/02/04(土) 16:47:19.62そもそもObjectManagerってなにするクラスよ。
オブジェクト管理つって言われても、
どういう結果を得るために作ってんのか分からん。
0839834
2012/02/04(土) 17:19:14.29ObjectManagerというのは適当につけた名前で
実際はAnimationGraphicというクラス名です
役割として、画像とそのアニメーション(パラパラアニメ)を管理させてます
時間経過による変化を考慮して、描画すべき画像を返す。または描画する
管理しているオブジェクトについては、
画像:
画像。IDをつけてmapに入れてます(map<id,graphic>)
アニメーション:
どの画像をどのタイミングで切り替えるかを定義します。
今回の質問はこの管理。
アニメーション自体はAnimationGraphicクラスだけでしか
使われることがないと予想されるので、
アニメーションの仕方だけを通知させればよいと考えています(>>836 の add(obj))
0840デフォルトの名無しさん
2012/02/04(土) 17:25:31.54add(std::shared_ptr<Object> obj)
で寿命管理はシェアポに投げることを明示したらいかんの?
0841デフォルトの名無しさん
2012/02/04(土) 17:28:30.170842デフォルトの名無しさん
2012/02/04(土) 17:38:17.50管理クラスの実装の都合でスマポを使ってるだけなのにそれを利用者に押し付けて特定のスマポを強制するのがいやだ
>>837のようなケースで管理クラス間で使うポインタの互換性が厳しく制限されるのも困るし
0843834
2012/02/04(土) 17:54:37.68スマポは勉強中でして、よくわかってなかったので…
特に使ってはいけないわけではないので、検討してみます。
>>841
アニメーションは複数持つことができ、場面に応じて切り替えて使おうと考えています
同じ画像に対して、アニメーションが定義されることもあるので
結局 >>841 のオブジェクトでも管理が必要に感じるのですが
(といいますかAnimationGraphicがそれに当たるような)
解釈間違ってたらすいません。
0844デフォルトの名無しさん
2012/02/04(土) 18:03:59.38イマイチアニメーションがどう画像に作用するのか分からん。
アニメーション自体がどう言うものかも分からん。
アニメーションが画像に対する操作を格納しており、
多態によって操作を切り替え用途するなら
コピーしちゃいかんだろ。
あと、マップのidって誰が何をするタイミングで使うの?
0845デフォルトの名無しさん
2012/02/04(土) 18:19:40.30Animationが画像の入ったmapを参照してるとか?
0846834
2012/02/04(土) 18:42:24.46アニメーション(Animationクラス)は
listで 画像IDの変化パターン と 切り替えタイミング をもっている
変化パターン{3,4,5,6}切り替えタイミング{12,12,24,12}であれば
画像3―12fおいて→画像4―12f→画像5―24f→画像6―12f→ループ
画像とは直接やり取りはなく
AnimationGraphicが橋渡しに
anime.tick(); // 時間経過
// 描画タイミングで
int id = currentAnimation->getDrawGraphID(); // 描画すべき画像のIDを受け取る
Graphic* g = graphList.at(id); // 画像と結びづけて
g->draw(x,y); // 描画。または上の階層にGraphicを返す
アニメの切り替えは↑のcurrentAnimationに割り当てるだけで
多態性を使ったものは考えていなかったので
コピーしてもいいやと(保守、拡張性に乏しいですが)
0847834
2012/02/04(土) 18:51:38.43無駄にIDで管理しようとしてますね
(あまりいろんな所で参照をもたせるのが嫌だったのでしょう)
出なおしてきます。
0848デフォルトの名無しさん
2012/02/04(土) 19:00:20.65stringなどは動的なメモリ管理するクラスだ。
0849デフォルトの名無しさん
2012/02/05(日) 19:36:21.35int bbb;
}
こんな感じのをグローバルで作った時に、これを他のファイルでも使いたいときは
extern namespace AAA;
でちゃんと中の変数が全部使えるようになるんでしょうか?
namespace AAA{
extern int bbb;
}
こっちみたいにするんでしょうか?
それともnamespaceはextern不要でしょうか?
0850デフォルトの名無しさん
2012/02/05(日) 19:38:10.030851デフォルトの名無しさん
2012/02/05(日) 19:48:12.58ですよ。
0852デフォルトの名無しさん
2012/02/05(日) 19:51:26.90間違えても爆発したりせんぞ
0853デフォルトの名無しさん
2012/02/05(日) 19:53:13.08なんせC++の規格に合致するコンパイラなんかこの世に一つも存在しないから
己が今作っているプログラムで動けばいいというのなら試すのもひとつの手
でも、一番簡単なのはリファレンス読むこと
0854デフォルトの名無しさん
2012/02/05(日) 20:00:21.920855デフォルトの名無しさん
2012/02/05(日) 20:04:04.090856デフォルトの名無しさん
2012/02/05(日) 20:05:05.68どのコンパイラでもOSでも同一機能が実現できるように作成するといい。
0857デフォルトの名無しさん
2012/02/06(月) 01:24:16.90と書いてきたんですが、
try {
process(map.at(key));
} catch(...) { }
のような記述の方がいいんでしょうか?
keyがmap内に存在しないことをロジック上想定していない、
というのであればまさしく「例外」だと思いますが、
keyがmap内にあってもなくてもいい、というのであれば
「例外」ではないような。
ロジック上の条件分岐を実現するのに例外を持ち出すのは
なんとなく間違った使い方な気がしていますが、どうでしょうか?
0858デフォルトの名無しさん
2012/02/06(月) 01:43:19.43何が例外で何が例外でないか、なんて基準は時と場合によるから人に聞いても無駄だよ。
その2択で言うと値が存在したときの効率は後者のほうがいいんだけど、
例外無しで同等の効率にしたければ find() を使えばいいわけで、おそらくそれが
一番やりたいことを素直に表現できるんじゃないかな?
0859デフォルトの名無しさん
2012/02/06(月) 21:59:04.44確かにfind使えば検索は一度で済みますね。
了解です。どうもありがとう。
0860デフォルトの名無しさん
2012/02/08(水) 22:06:49.35BYTE *pPtr = (BYTE*)&dwNumber + 3;
*pPtr = 0xFF;
(BYTE*)とか使ってて何か気持ち悪いです
良い書き方ありませんか?
0861デフォルトの名無しさん
2012/02/08(水) 22:11:59.35BYTE *pPtr = &dwNumber + 3;
0862デフォルトの名無しさん
2012/02/08(水) 22:23:57.27エンディアンに依存するような気持ち悪いコード書いてるからしょうがない、諦めろ。
>>861
それ、pPtr が全然関係ない情報指してたりするかもよ。
0863デフォルトの名無しさん
2012/02/08(水) 22:33:28.710864デフォルトの名無しさん
2012/02/08(水) 22:47:37.13はたまたMSBを書き換えてるのがキモいのか
0865デフォルトの名無しさん
2012/02/08(水) 23:02:30.240866デフォルトの名無しさん
2012/02/08(水) 23:05:00.570867デフォルトの名無しさん
2012/02/08(水) 23:23:39.950868デフォルトの名無しさん
2012/02/08(水) 23:26:38.580869デフォルトの名無しさん
2012/02/08(水) 23:27:30.11aの型による。
0870デフォルトの名無しさん
2012/02/08(水) 23:34:39.56匿名共用体おすすめ
union {
DWORD d;
BYTE b[4];
};
d = 0x00000000;
b[3] = 0xFF;
0871デフォルトの名無しさん
2012/02/08(水) 23:35:21.080872デフォルトの名無しさん
2012/02/09(木) 00:12:42.14キャスト使いなさい
0873デフォルトの名無しさん
2012/02/09(木) 00:14:22.70気持ち悪さが緩和されるのは怖いね。
0874デフォルトの名無しさん
2012/02/09(木) 00:23:17.030875デフォルトの名無しさん
2012/02/09(木) 01:01:49.980876デフォルトの名無しさん
2012/02/09(木) 01:40:52.17DWORDのサイズを確信してるなら意味ないね。
0877デフォルトの名無しさん
2012/02/09(木) 01:44:45.12共用体が混ざると継承や委譲が発展していくうちに、
初期化子の書きにくさが後々余計な束縛になる。
C++でないならどうでもいいが。
0878デフォルトの名無しさん
2012/02/09(木) 01:55:20.97それ以外ではあまり使わない(使うことが全く無い訳でもない)
0879デフォルトの名無しさん
2012/02/09(木) 01:56:36.63何がしたいのか分からんけど
dwNumberの特定のバイトだけを0xFFで埋めたいなら
dwNumber |= 0x0000ff00;
特定のバイトを任意の値(例えば0xa3)にしたいなら
dw = dwNumber & 0xffff00ff;
dwNumber = dw ^ 0x0000a300;
0880デフォルトの名無しさん
2012/02/09(木) 01:59:29.820881デフォルトの名無しさん
2012/02/09(木) 05:29:51.060882デフォルトの名無しさん
2012/02/09(木) 05:34:37.01auto dw2b4=[&]()->char(&)[sizeof(DWORD)]{return*reinterpret_cast<char(*)[sizeof(DWORD)]>(&dwNumber);};
dw2b4()[3]=0xff;
0883デフォルトの名無しさん
2012/02/09(木) 05:36:37.390884デフォルトの名無しさん
2012/02/09(木) 06:24:41.210885デフォルトの名無しさん
2012/02/09(木) 07:15:36.40確かに規格で動作保証はされてなかった気はするけど
実際には開発環境側がそういった共用体を提供していたりする
(レジスタ共用体やら、LARGE_INTEGER やら)
0886デフォルトの名無しさん
2012/02/09(木) 08:28:46.510887デフォルトの名無しさん
2012/02/09(木) 10:36:31.560888デフォルトの名無しさん
2012/02/09(木) 10:42:04.81DWORD d ;
public:
my_uint32_t() {}
my_uint32_t(DWORD d) : d(d) {}
operator DWORD const & () const { return d; }
BYTE get(int i) { assert(0 <= i && i < 4); return (d & (0xFF << (i * 8))) >> (i * 8) ; }
void set(int i, BYTE b) { assert(0 <= i && i < 4); d = (d & ~(0xFF << (i * 8))) || (b << (i * 8)) ; }
} ;
0889デフォルトの名無しさん
2012/02/09(木) 11:46:30.38namespace A { class Hoge {}; class Fuga {}; class Piyo {}; }
template <class X> void func(X const & obj);
// A::Hoge, A::Fuga, A::Piyo以外の型をエラーにしたい
// 実際には3つの型だけでなく非常に多くの型があるのでオーバーロードで解決することは難しい
0890デフォルトの名無しさん
2012/02/09(木) 11:49:02.430891デフォルトの名無しさん
2012/02/09(木) 12:04:46.68funcをそのnamespaceの中に置けばいいんじゃないの
namespace N {
class X {};
template<class T> void func(T t) {};
}
int main(int argc, char **argv) {
N::X x;
func(x); // ok
func(0); // error
return 0;
}
0892デフォルトの名無しさん
2012/02/09(木) 15:12:01.55template <class X> void func(X const & obj){ck_habitant_A(obj);…};
0893デフォルトの名無しさん
2012/02/10(金) 01:13:22.930894デフォルトの名無しさん
2012/02/10(金) 03:29:05.260895デフォルトの名無しさん
2012/02/10(金) 09:26:28.52理解する能力が非常に欠落してる模様。
こんな事は出来ますか?
//B.cpp
namespace A{#include "a.h"}
namespace B{
B::B(){A::a();}
B::z(A::z());
}
0896デフォルトの名無しさん
2012/02/10(金) 09:45:22.03a.h
の中身は?
0897デフォルトの名無しさん
2012/02/10(金) 09:58:03.46class a{
public:
a(){val=0};
int z(){return val+1;};
private:
int val;
protected:
};
同じ名前のメソッドがあった場合、どれを呼び出すかを
指示してやるのがnamespaceですよねぇ。。
0898デフォルトの名無しさん
2012/02/10(金) 10:34:23.67その中身は
> namespace B{
> B::B(){A::a();}
> B::z(A::z());
> }
となんら関係ないよねw
スコープの概念すら分かってないみたいだから
Cから始めたほうがいいかも
0899デフォルトの名無しさん
2012/02/10(金) 10:35:56.130900デフォルトの名無しさん
2012/02/10(金) 19:58:34.56#include <GameLib/Framework.h>
namespace GameLib{
void Framework::configure( Configuration* c ){
}
void Framework::update(){
}
}
void f(){
//int *p=new int;
}
void main(){}
エラー 2 error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
エラー 1 error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に LIBCMTD.lib(dbgdel.obj) で定義されています。GameLib_d.lib(MemoryManager.obj)
コメント取るとエラーがでるんですが、何が原因と推測します?
後学のため教えてください。
ちなみに、リンカ→システム→サブシステム コンソールに変更した場合、コメント取らなくてもコンパイルできます。
/verbose:lib オプションで見る限り、両方ともLibcmtd.libはリンクしてると思うのですが…
再現させようと自分で何もしない void operator delete(void*);のlib作ったけど、再現出来ませんでした。
0901デフォルトの名無しさん
2012/02/10(金) 20:03:30.120902デフォルトの名無しさん
2012/02/10(金) 20:04:20.47>コメント取るとエラーがでるんですが、何が原因と推測します?
間違えました。
コメントを取るとエラーが消えるんですが、何が原因と推測しますか?
0903デフォルトの名無しさん
2012/02/10(金) 20:10:01.23GameLib_d.libはマルチスレッドデバッグ(MTd)で作ってあって、合わせたほうがいいと思うのですが
MDDに変えると、
警告 11 warning LNK4098: defaultlib 'libcmtd.lib' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。MSVCRTD.lib(cinitexe.obj)
やエラーが山ほど出てきます。
ちなみにリリースビルドだと上手くいきます。
0904デフォルトの名無しさん
2012/02/10(金) 20:28:22.040905デフォルトの名無しさん
2012/02/10(金) 21:01:19.84ランタイムライブラリをMDd、特定ライブラリを無視 MSVCRTD.lib にするとこんな感じです
エラー 2 error LNK2001: 外部シンボル "__RTC_InitBase" は未解決です。 main.obj
エラー 1 error LNK2001: 外部シンボル "__RTC_Shutdown" は未解決です。 main.obj
エラー 3 error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。
GameLib_d.libのなかにWinMainが入っているので、MTdかMDd、どちらかのランタイムのlibは欲しいと思われます。
自分はこの現象が起こる原因はlibの読み込み順序にある気がしてるのですが、
なんでnewとかdeleteといったmemoryManager.hの中にある関数使うと、リンク順序が正しくなるのか謎です。
なんで、delete演算子オーバーロードがコンソールにすると上手くいくのかはCRTとMFCの関係性がなくなるからの気がします。
自分で再現できないのが非常に気持ち悪い 。
バグだとしても、たいしたバグではないんだけど、何時間も苦しめられたのでむかつくというか…
もしかして、lib内にwinMainのエントリポイントもなければ、再現できないのか?
とにかく、レスくれた人、ありがとうございました。
0906デフォルトの名無しさん
2012/02/11(土) 11:31:48.18関数の仕様を確認したところ、EOFを入力ストリームが検出した場合
eof()は真になりますが、fail()は真にはならないとのことでした。
しかしVC++2010で以下のコードを試してみると
int i;
cin >> i; //ここでCtrl+Zを押してEOFを入力
if( cin.eof() ) cout << "eof" << endl;
if( cin.fail() ) cout << "fail" << endl;
出力は
eof
fail
となり、EOFを検出するとfailbitも立ってしまっているようなのですが
これはなぜでしょうか?
0907デフォルトの名無しさん
2012/02/11(土) 11:56:18.15> eof()は真になりますが、fail()は真にはならないとのことでした。
仕様って、どこ見たの?
指定した入力が得られなければ failbit は当然立つよ。
failbit 無しで eofbit だけ立つ状況はかなり限られている(あるいは存在しない)と思う。
0908デフォルトの名無しさん
2012/02/11(土) 12:04:06.99どうやら勘違いしたようです。
EOFの検出と、入力が得られなかったことが同時に起こるために
eofbitとfailbitが立つという解釈だと、仕様通りみたいですね。
0909デフォルトの名無しさん
2012/02/11(土) 12:37:46.92先ほどのコードを変更して
string s;
cin >> s;
if( cin.eof() ) cout << "eof" << endl;
if( cin.fail() ) cout << "fail" << endl;
とします。
そしてcin>>sのところで次のように入力してリターンを押します。
abc[Ctrl+Z]
そうすると、読み取りは1回のはずなのに、なぜかまだ入力が促されるので再度
[Ctrl+Z]
と入力すると、出力は
eof
だけとなりました。いったい何が起きてるんかちんぷんかんぷんです。
0910デフォルトの名無しさん
2012/02/11(土) 12:55:54.08string の入力は EOF を読んだ時点で入力語の終わりとして成立するから、
eofbit が立って入力は成功する( failbit は立たない)んだろう。
0911デフォルトの名無しさん
2012/02/11(土) 21:08:33.820912デフォルトの名無しさん
2012/02/12(日) 17:07:02.11�Amapのように素早く検索できる
�@�Aを満たすようなデータ構造ってありますか?
0913デフォルトの名無しさん
2012/02/12(日) 17:22:31.010914デフォルトの名無しさん
2012/02/12(日) 17:30:08.20ナルホド!
ありがとうございます!
0915デフォルトの名無しさん
2012/02/12(日) 22:17:28.14ファイル移動用のスレッドを生成して、
下記の様なソースで共有フォルダから
ローカルへのファイル移動を行っています。
しかし、大量のファイルを移動中に
アプリを終了すると、ファイル移動失敗時の
ログ出力に失敗し、エラーになります。
アプリを終了したら、ファイルの移動も
止める様にする良い方法はないでしょうか?
CStringList strlFileList;
CString strMoveFileName;
CString strOldFilePath;
CString strNewFilePath;
BOOL bRet = FALSE;
// ファイルリスト取得
GetFileList(strlFileList);
0916デフォルトの名無しさん
2012/02/12(日) 22:18:01.66{
// 移動ファイル名取得
strMoveFile = strlFileList.GetAt(strlFileList.FindIndex(iCount));
// 移動先
strNewFilePath = 移動先フォルダ + strMoveFile;
// 移動元
strOldFilePath = 移動元フォルダ + strMoveFile;
for(int iRetry=0; iRetry<リトライ回数; iRetry++)
{
//ファイル移動
bRet = MoveFile(strOldFilePath, strNewFilePath);
if (bRet == FALSE)
{
ログ出力
Sleep(中断時間);
}
else
{
// 移動成功
break;
}
}
if (bRet == FALSE)
{
ログ出力
}
}
0917デフォルトの名無しさん
2012/02/12(日) 22:52:02.08メインスレッドの方でスレッドが終了するのを待たせないとダメ
0918デフォルトの名無しさん
2012/02/13(月) 00:44:54.64int main() {
string s = test("abc");
cout << s;
}
試したところ動くのですが、たまたま動いているだけな気もしています。
なんとなく"abc"はtestを抜けたら消滅してもおかしくない気がして・・・
実際には、
const char* x = "abc";
string s = test(x);
と上記のコードは同じなのでしょうか?
0919デフォルトの名無しさん
2012/02/13(月) 00:48:51.650920デフォルトの名無しさん
2012/02/13(月) 01:03:10.80で、関数の戻り値はstringに食われるので、sにコピーされてsのスコープに移譲する。
で、あってるかな??あんまり詳しいことは知らないけど、問題ないと思う。
0921918
2012/02/13(月) 01:10:06.04文字列リテラルの生存期間はプログラム開始から終了までなんですね・・・。
基本的な話ですみません。どうもありがとうございました。
0922デフォルトの名無しさん
2012/02/13(月) 07:21:02.680923デフォルトの名無しさん
2012/02/13(月) 11:36:22.30> "abc"はtestを抜けたら消滅してもおかしくない気がして
test()の呼び出しが終了した後に"消滅"するとして、動作に違いが出るとは思えない
0924デフォルトの名無しさん
2012/02/13(月) 11:38:58.21>>923は無視してくれ
0925デフォルトの名無しさん
2012/02/14(火) 01:50:39.400926デフォルトの名無しさん
2012/02/14(火) 11:09:50.12で操作するGUIライブラリーみたいなものありますか?
0927デフォルトの名無しさん
2012/02/14(火) 12:10:56.660928デフォルトの名無しさん
2012/02/14(火) 12:27:52.490929デフォルトの名無しさん
2012/02/14(火) 12:31:33.760930デフォルトの名無しさん
2012/02/14(火) 12:33:23.56TurboC++に付いてるOWLのCUI版があるよ
0931デフォルトの名無しさん
2012/02/14(火) 12:53:22.35定番といえばcursesだけど
それが使えない環境ではAPIに組み込まれていたり
代替えのライブラリがあったりするので
環境明記したほうがいいかも
0932デフォルトの名無しさん
2012/02/14(火) 13:32:42.42class Mng1 {
void register(boost::shared_ptr<IObj1> p);
// ry
};
これだと利用者にIObj1インターフェースだけでなくboost::shared_ptrの利用まで押し付ける事になるので利用しづらくなります
さらに
class Mng2 {
void register(boost::intrusive_ptr<IObj2> p);
// ry
};
という管理クラスが存在した場合IObj1とIObj2の両方を継承したクラスがあった場合ポインタの型が競合してしまいます
struct Elem : IObj1, IObj2 { ... };
Mng1 m1;
Mng2 m2;
ElemPtr p; // ElemPtrの型は???
Mng1.register(p);
Mng2.register(p);
また管理クラスはMng1とMng2だけとは限りません
0933デフォルトの名無しさん
2012/02/14(火) 13:38:46.040934デフォルトの名無しさん
2012/02/14(火) 14:09:15.42ターボビジョンなんてもう誰もしらねーよ。
おっさんは帰れ!
0935デフォルトの名無しさん
2012/02/14(火) 15:08:26.70色々あると知ってよかったです。
アスキーアートのウインドーは無いみたいですね。
Cライブラリーだけでつくれるものですか?
0936デフォルトの名無しさん
2012/02/14(火) 19:05:16.51void func(char **dst){
int size=sizeof(int)*8;
*dst=(char *)malloc(size+1);
*dst[size]='\0';←ここでエラーでる
for(int i=size-1;0<=i;i--)*dst[i]='1';
return;
}
int main(){
char *dst;
func(&dst);
free(dst);
}
0937デフォルトの名無しさん
2012/02/14(火) 19:17:20.170938デフォルトの名無しさん
2012/02/14(火) 19:17:46.25sizeはintが8個分。つまり、sizeof(int)が4なら32になる。
* dst[size] は即ち * dst[32]なのだから当然、領域外アクセスになる。
そもそも、何故最後にナル文字を入れようとしているのか理解できない。
0939デフォルトの名無しさん
2012/02/14(火) 19:17:51.60(*dst)[size] = '\0';
(*dst)[ i ] = '1';
とするといいかもしれない
0940デフォルトの名無しさん
2012/02/14(火) 19:18:15.990941デフォルトの名無しさん
2012/02/14(火) 19:19:32.00malloc(size+1)で一個大きくとってるじゃん。
0942デフォルトの名無しさん
2012/02/14(火) 19:19:32.920943デフォルトの名無しさん
2012/02/14(火) 19:21:01.66言葉遣いを直してから聞けアホ
32+1は4で割れるのか?
0944デフォルトの名無しさん
2012/02/14(火) 19:23:41.010945デフォルトの名無しさん
2012/02/14(火) 19:33:07.95お前はなにを言ってるんだ。
正解は>>939だろ?
ろくにコードも読めないのにえらそうに口だけはききたいんだな。
0946デフォルトの名無しさん
2012/02/14(火) 20:16:54.190947デフォルトの名無しさん
2012/02/14(火) 21:26:21.99それを知っているお前さんも
0948デフォルトの名無しさん
2012/02/14(火) 22:07:51.34おまえほんとばかだな
n-cursesは?
0950デフォルトの名無しさん
2012/02/14(火) 22:45:14.030951デフォルトの名無しさん
2012/02/14(火) 23:02:53.95Getterは問題ないんですが、Setterをどう書いたらいいものかと。
PushBackVector, AtVector等、いちいちvectorのメソッドを書いていたら
きりがないですし・・・。
代入等のリスクを考えるとpublicにvectorを置くのは良くないですし。
どう書くのが無難でしょうか?
0952デフォルトの名無しさん
2012/02/14(火) 23:05:46.180953デフォルトの名無しさん
2012/02/14(火) 23:22:04.13push_back()、at()等を使用した設定、size()ぐらいしか使わない→各種メンバ関数を用意する
前者のばあい、俺は
ゲッタ: const vector & Hoge::GetPiyos() const
アクセッサ: vector & Hoge::AccessPiyos()
という、しっかり名前を分けたconst版、非const版の関数を用意する
機密性?お前は何を(ry
0954デフォルトの名無しさん
2012/02/14(火) 23:36:42.44push_back, find, at, size, empty, clearが最低限必要な操作になります。
>>953
>しっかり名前を分けたconst版、非const版の関数を用意する
非constと明示して公開ですか。了解です。
今回はまだアクセサの数もたかが知れているので、一つずつ関数を用意
してやることにします。
どうもありがとうございました。
0955デフォルトの名無しさん
2012/02/15(水) 01:04:02.74所有権を共有するなら shared_ptr 強制で妥当だろ。
0956デフォルトの名無しさん
2012/02/15(水) 01:33:25.34intrusive_ptr<Elem> p;
Wrapper1(const intrusive_ptr<Elem> &p): p(p){}
// デリゲーターを書く
};
Mng1 m1; Mng2 m2;
intrusive_ptr<Elem> p(new Elem);
m1.register(shared_ptr<Wrapper1>(new Wrapper1(p)));
m2.register(p);
こうだろJK
効率?知るかボケ
0957デフォルトの名無しさん
2012/02/15(水) 20:00:13.00あるならそれはどういう状況ですか?
0958デフォルトの名無しさん
2012/02/15(水) 22:08:23.40ありがとう、知らなかった。すごく助かりました
0959デフォルトの名無しさん
2012/02/16(木) 18:29:24.00HogeImpl(void): c(0) {}
void func(void) { std::cout << "hello: " << c << std::endl; ++c; }
int c;
};
class Hoge {
HogeImpl * pImpl;
public:
Hoge(void) : pImpl(new HogeImpl) {} ~Hoge(void) { delete pImpl; }
void func(void) const { pImpl->func(); }
};
HogeのほうのメソッドはHogeImplのconstに合わせるべきか
それとも基本的に全部constにするべきなのか
0960デフォルトの名無しさん
2012/02/16(木) 19:38:18.18を組んでいます(switch文)
このキー入力をwindwsFormのbuttonを使ってそれぞれボタンごとに
割り当てたいと考えています
buttonにそれぞれのパターンを割り当てる方法を教えてください
0961デフォルトの名無しさん
2012/02/16(木) 21:04:42.830962デフォルトの名無しさん
2012/02/16(木) 21:06:20.750963デフォルトの名無しさん
2012/02/17(金) 14:12:01.35以下のようなことをしたいのですが、なんかいい方法はありませんか?
struct A{ //Aは継承予定なのでunion Aにはできない
union{
const char *const buf; //公開用
protected: //無名共用体で protected メンバーが定義されています
char *m_buf; //内部用
};
};
union B_BASE{
const char *const buf; //公開用
protected:
char *m_buf; //内部用
};
struct B : B_BASE{ //共用体は基本クラスとして使用できません
};
0964デフォルトの名無しさん
2012/02/17(金) 14:19:31.10protected:
char * buf;
public:
inline char const * GetReadBuf(void) const { return buf; }
};
0965デフォルトの名無しさん
2012/02/17(金) 14:20:21.780967デフォルトの名無しさん
2012/02/17(金) 14:47:30.69protected:
char * buf;
public:
inline char const * Buf(void) const { return buf; }
};
bufとBuf()でそんなに違う?
こんなことにこだわってる暇があったらもっとガリガリコード書けば?暇なの?
0968963
2012/02/17(金) 14:50:50.79struct BUF{
const char *const buf;
};
class M_BUF{
friend struct C;
char *m_buf;
};
struct C{
union{
struct : BUF{};
struct : M_BUF{};
};
};
C c;
char *t = c.buf; //'buf' : 'C' のメンバーではありません
int s = sizeof(C); //4 領域は確保されているようだが、変数名が見えない
0969デフォルトの名無しさん
2012/02/17(金) 15:00:09.28public:
char const * const & buf;
protected:
char * mBuf;
public:
A(void) : buf(mBuf) {}
};
0970デフォルトの名無しさん
2012/02/17(金) 16:06:48.51getter,setter使わないと後で痛い目みるかもよ
0971デフォルトの名無しさん
2012/02/17(金) 16:12:11.56これで理解出来ないならお前には無理だから諦めてアクセサ書け
0972デフォルトの名無しさん
2012/02/17(金) 16:22:35.370973963
2012/02/17(金) 16:34:51.36テンプレート関数の挙動が変わってしまうので不可です。
いつも情報は小出しにするなと言われるので、背景まで説明しましたが
質問はゲッターをなくす方法ではありません。
0974デフォルトの名無しさん
2012/02/17(金) 16:44:55.09まあわからないなら諦めろ
0975デフォルトの名無しさん
2012/02/17(金) 16:45:16.18「私の質問はAではありません。私の質問はBです。」
という記述のうち必要性の低い前文を書いて
必要性の高い後文を書かないのはどうして?
0976デフォルトの名無しさん
2012/02/17(金) 16:48:36.76プロパティクラスの問題点って具体的にどういうの?
今考えてみたけど中々思いつかなくて
struct A {
class p_{
friend A;
int n;
p_():n(0){}
public:
operator int() const { return n; }
} p;
protected:
int& nref(){return p.n;}
};
struct B : public A{
void x(){ nref() = 20; }
};
template<class T> T fi(T n){ return n; }
void f(){
B a;
a.x();
int n = fi(a.p);
std::cout << a.p << std::endl; // 20
}
0977デフォルトの名無しさん
2012/02/17(金) 16:48:49.33他のことは随時質問を受け付けます。
0978デフォルトの名無しさん
2012/02/17(金) 16:53:31.640979デフォルトの名無しさん
2012/02/17(金) 16:53:57.93ワロタ
0980963
2012/02/17(金) 17:05:55.56union{
const char *const buf;
char *m_buf;
};
F() : buf(0){}
};
struct G : protected F{
using F::buf;
G(){}
};
H g;
//g.m_buf = "g"; //'F::m_buf' はアクセスできません。'G' は 'protected' で 'F' からの継承で使われています
auto h = g.buf;
すいません、これでいけました。
次はもっとわかりやすいように質問します。
>>976
operator int()が定義されていても、オーバーロードされた関数に渡すときに
intへの変換が優先されるとは限らないのが問題です。
また、printfのような...にも渡せなくなってしまいます。
0981デフォルトの名無しさん
2012/02/17(金) 17:16:06.50質問がわからないふりしてるだけなんだろ
0982デフォルトの名無しさん
2012/02/17(金) 17:19:15.90>intへの変換が優先されるとは限らない
その具体例が欲しかったんだけど・・・
プロパティとしての型を決める以上はキャスト演算子は基本一つになるだろうし
まぁ解決してなにより
0983デフォルトの名無しさん
2012/02/17(金) 19:23:11.72void Hoge(T arg){}
があった際にプロパティクラスを渡すと予定と違ってしまうということじゃね?>>973でテンプレートって言ってるし。
オーバーロードは知らん
0984デフォルトの名無しさん
2012/02/17(金) 19:47:20.44単にテンプレートにするだけならargをintのように扱うタイミングで
結局int化するから問題無いと思う
でもこういうケースだと分かれるね
void Hoge(int arg){
std::cout << "int:" << arg << std::endl;
}
template <typename T> void Hoge(T arg){
std::cout << "T:" << arg << std::endl;
}
これでテンプレートの方が呼ばれて不都合があるのは作りがアレだけど
既存ソースとかとの互換を考える場合は避ける理由にはなるかな
0985デフォルトの名無しさん
2012/02/17(金) 19:48:27.54その関数がintで通るところにintをラップしたプロパティで駄目なケースってあまりないだろ
0986デフォルトの名無しさん
2012/02/17(金) 20:37:12.840987デフォルトの名無しさん
2012/02/17(金) 20:59:20.58クラスの最初のメンバ変数の先頭アドレスは
等しいと規約で決められてる?
それとも環境依存?
0988デフォルトの名無しさん
2012/02/17(金) 21:08:01.370989デフォルトの名無しさん
2012/02/17(金) 21:09:47.220990987
2012/02/17(金) 21:18:12.46vtableのないクラスなら大丈夫?
0991デフォルトの名無しさん
2012/02/17(金) 21:22:33.690992デフォルトの名無しさん
2012/02/17(金) 21:26:05.230993デフォルトの名無しさん
2012/02/18(土) 06:10:29.83http://toro.2ch.net/test/read.cgi/tech/1329512856/
0994デフォルトの名無しさん
2012/02/18(土) 06:46:27.33スレ立て乙です
0995デフォルトの名無しさん
2012/02/18(土) 13:04:30.090996デフォルトの名無しさん
2012/02/18(土) 13:09:09.99まるでC++0xがC++ではないかのような
0997デフォルトの名無しさん
2012/02/18(土) 13:10:34.520998デフォルトの名無しさん
2012/02/18(土) 13:26:37.840999デフォルトの名無しさん
2012/02/18(土) 14:19:23.93C++相談室 part94
http://toro.2ch.net/test/read.cgi/tech/1329512856/
1000デフォルトの名無しさん
2012/02/18(土) 14:19:42.67http://toro.2ch.net/test/read.cgi/tech/1329512856/
うめてんてー
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。