C++相談室 part90
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/07/17(日) 15:50:39.24ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part89
http://hibari.2ch.net/test/read.cgi/tech/1304410950/
このスレもよろしくね。
http://hibari.2ch.net/test/read.cgi/tech/1299218426/
ついでに壁紙にしてね。
http://www.research.att.com/~bs/Bjarne.jpg
0002デフォルトの名無しさん
2011/07/17(日) 15:51:19.94[C++ FAQ]
http://www.parashift.com/c++-faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://www.cppreference.com/ (英語)
http://www.cppreference.com/wiki/jp/ (↑の日本語訳だけどまだ未完)
[Stroustrup大聖人]
http://www2.research.att.com/~bs/
[C++ International Standard]
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
http://www.jisc.go.jp/app/pager?id=15868
ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。
0003デフォルトの名無しさん
2011/07/17(日) 15:51:33.55[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/07/17(日) 15:51:47.76amazon 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/07/17(日) 15:52:03.54Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
http://www.amazon.com/exec/obidos/ASIN/0321227255/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0006デフォルトの名無しさん
2011/07/17(日) 16:22:16.880007デフォルトの名無しさん
2011/07/17(日) 17:22:45.500008デフォルトの名無しさん
2011/07/17(日) 19:06:37.25環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0009デフォルトの名無しさん
2011/07/17(日) 21:18:59.47地鎮祭乙
0010デフォルトの名無しさん
2011/07/17(日) 21:21:34.14なにこれ
0011デフォルトの名無しさん
2011/07/17(日) 21:25:12.600012sage
2011/07/17(日) 21:56:10.33fflush(cin);ではできなかったので
0013デフォルトの名無しさん
2011/07/17(日) 22:23:44.70標準ではないんじゃね?
リダイレクトされてどこに接続されているか分からないし
食っても食っても後から追加されてきて予想外の動作になるかも
だからVCは敢えて非標準の fflush(stdin) を付けたのだと思う
0014デフォルトの名無しさん
2011/07/17(日) 22:26:28.18std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
正しいのかどうかは知らん。
0015デフォルトの名無しさん
2011/07/17(日) 22:33:35.340016デフォルトの名無しさん
2011/07/17(日) 23:03:40.64おおこんなメンバ関数があったんだ
ISO/IEC14882/2003を見てもstd::basic_streambufのメンバ関数としてしか
紹介されてないし、「プログラミング言語C++第3版」を見ると 入力に対するsync()は
いつも正しく終了するとは限らない。成功すると 0 を返し、ios_base::badbitをセットして
-1を返す。 とあるので、使い方には気を付けなければならないようだけど、一応
あるみたいだね
0017デフォルトの名無しさん
2011/07/18(月) 01:55:18.65http://www.nicovideo.jp/watch/sm14923835
http://www.nicovideo.jp/watch/sm14923866
http://www.nicovideo.jp/watch/sm14923781
0018デフォルトの名無しさん
2011/07/18(月) 03:30:15.010019デフォルトの名無しさん
2011/07/18(月) 14:09:39.67STATIC_ASSERT(std::is_same<int, int>::value);
VC++2010ではstd::is_same<int, int>のカンマが、マクロ引数を区切るカンマと解釈されているようで警告C4002が出ます。
C4002の説明によると、多すぎるマクロ引数は無視されるらしく
static_assert(std::is_same<int, "std::is_same<int");
と展開されているようで、意図通りになりません。
言語仕様的にこの動作は正しいのでしょうか?
0020デフォルトの名無しさん
2011/07/18(月) 14:13:51.670021デフォルトの名無しさん
2011/07/18(月) 14:17:11.660022デフォルトの名無しさん
2011/07/18(月) 14:18:30.170023デフォルトの名無しさん
2011/07/18(月) 14:19:52.93回答が得られるような質問のスキルを習得してから出直す。
0024デフォルトの名無しさん
2011/07/18(月) 14:37:19.83すいません、プログラムは下のような感じです。
//main.cpp
#include <iostream>
#include <string>
#include "sub.h"
using namespace std;
int main()
{
string a = "aaaa";
bbb(string a);
return 0;
}
//sub.cpp
#include <iostream>
#include <string>
#include "sub.h"
using namespace std;
void bbb(string a)
{
cout << a << endl;
}
//sub.h
void bbb(string a);
これをvisual c++で「デバッグ無しで開始」しようとすると
1>c:\users\あなた\desktop\c++\abbb\bbb.h(2) : error C2065: 'string' : 定義されていない識別子です。
1>c:\users\あなた\desktop\c++\abbb\bbb.h(2) : error C2146: 構文エラー : ')' が、識別子 'a' の前に必要です。
1>c:\users\あなた\desktop\c++\abbb\bbb.h(2) : error C2182: 'bbb' : 'void' 型が不適切に使用されています。
1>c:\users\あなた\desktop\c++\abbb\bbb.h(2) : error C2059: 構文エラー : ')'
というようなエラーが出てしまいます
初歩的な所で躓いてるんだと思うのですけど原因が何なのか分からなくて
0025デフォルトの名無しさん
2011/07/18(月) 14:40:32.09#include <string>
void bbb(std::string a);
0026デフォルトの名無しさん
2011/07/18(月) 14:43:10.20できました!!
ありがとうございます!!
0027デフォルトの名無しさん
2011/07/18(月) 14:48:47.91提示されてないbbb.hのエラー貼るとか、俺には釣りにしか見えなかったよ。
0028デフォルトの名無しさん
2011/07/18(月) 22:35:44.30入門書の次に読むべき本としては何が宜しいでしょうか?
0029デフォルトの名無しさん
2011/07/18(月) 22:42:00.750030デフォルトの名無しさん
2011/07/18(月) 22:53:52.280031デフォルトの名無しさん
2011/07/18(月) 23:20:35.39現在の「コスト+ゴールまでの予想コスト」の小さいもの。に置き換えた版ってことであってる?
0032デフォルトの名無しさん
2011/07/18(月) 23:29:15.230033デフォルトの名無しさん
2011/07/18(月) 23:56:42.30提示されている・・・と思うよ
コードの下のほう。
//sub.h
void bbb(string a);
0034デフォルトの名無しさん
2011/07/19(火) 00:25:13.95それはsub.hだろ。
エラーメッセージにははっきりとbbb.hって出てるんだが?
少なくともそのソースをコンパイルしたエラーメッセージを貼ったのではない。
こういう粗忽さがつまらないコンパイルエラーの根本的な原因だから、ちゃんと指摘すべき。
0035デフォルトの名無しさん
2011/07/19(火) 00:28:18.19そして予想コスト(heuristic functionの値)が外れ(矛盾発生)だった場合の付け替え処理も含まれています。
0036デフォルトの名無しさん
2011/07/19(火) 00:54:05.62まぁ今回は外れることはないとして作るからいいや
0037デフォルトの名無しさん
2011/07/19(火) 11:52:57.95別の名前空間でtypedef E E_t; したらE_t::aとできてすごく使えると思うんだけど
もちろんC言語と互換性ないのはわかるけど・・・
0038デフォルトの名無しさん
2011/07/19(火) 11:57:15.910039デフォルトの名無しさん
2011/07/19(火) 12:00:42.75class Hoge
{
public:
enum Enum { a, b, c };
inline Hoge(Enum e) : e_(e) { }
inline operator Enum (void) const { return e_; }
private:
Enum e_;
};
int main(void)
{
Hoge hoge(Hoge::a);
switch(hoge)
{
case Hoge::a: 〜; break;
case Hoge::b: 〜; break;
case Hoge::c: 〜; break;
}
return 0;
}
0040デフォルトの名無しさん
2011/07/19(火) 12:00:49.740041デフォルトの名無しさん
2011/07/19(火) 12:04:46.56クラスや構造体で包めばいいというのも分かってはいたんですが
すでにあるもの、何かしらのライブラリの名前空間にある列挙型を
自分の名前空間でtypedefして、>>37のように使えたらいいのにな、ってことでした
0042デフォルトの名無しさん
2011/07/19(火) 12:06:44.41#define a 0
#define b 1
#define c 2
を置き換えるためのものだからな
「強く型付けされた」列挙体が欲しければ
作りようはいくらでもあるし
Cとの互換性を捨てたらC++の地位は大幅に後退する
0043デフォルトの名無しさん
2011/07/19(火) 12:08:34.430044デフォルトの名無しさん
2011/07/19(火) 12:09:39.220045デフォルトの名無しさん
2011/07/19(火) 12:10:22.910046デフォルトの名無しさん
2011/07/19(火) 12:56:38.18{
Operation_Add,
Operation_Subtract,
Operation_Multiply,
Operation_Divide,
Operation_Assign,
...
};
Operatioin op = Operation_Divide;
0047デフォルトの名無しさん
2011/07/19(火) 13:06:47.24>>46は無視してくれ
0048デフォルトの名無しさん
2011/07/19(火) 14:11:25.52ヘッダーファイルに書いたらエラーになるんだけどどう書くべきですか?
0049デフォルトの名無しさん
2011/07/19(火) 14:13:25.44じゃねーの?
0050片山博文MZ
2011/07/19(火) 14:20:51.440051デフォルトの名無しさん
2011/07/19(火) 14:22:16.620052デフォルトの名無しさん
2011/07/19(火) 14:23:29.63ヘッダーでは定義じゃなくて宣言で済ませて、対応するソースファイルで定義する。
ついでに const 付けて、変数名の先頭アンダースコアは外しとけ。
0053デフォルトの名無しさん
2011/07/19(火) 14:24:19.090054デフォルトの名無しさん
2011/07/19(火) 14:30:15.04内モンゴルを荒廃させたのは中共だろ、
日本のせいにするなよチャソコロ!
0055デフォルトの名無しさん
2011/07/19(火) 14:40:37.95005648
2011/07/19(火) 15:32:18.820057デフォルトの名無しさん
2011/07/19(火) 21:58:44.72Hoge クラスのメンバ変数 n をFoo クラスのコンストラクタの初期化子リストで
初期化したいのですが、このような継承関係がある場合は、どのように書いたらいいのでしょうか?初期化子リストで初期化できない場合は、どのようにしたらいいのですか?
合わせてお願いします。
class Hoge
{
public:
virtual Hoge * clone () const = 0;
protected:
int n;
};
class Foo : public Hoge
{
Foo * clone() const { return new Foo( *this ); }
Foo() : n(0) // 当然これでは初期化できません・・・・orz
{
n;
}
};
0058デフォルトの名無しさん
2011/07/19(火) 22:05:04.57×
初期化したいのですが、このような継承関係がある場合は、どのように書いたらいいのでしょうか?初期化子リストで初期化できない場合は、どのようにしたらいいのですか?
○
初期化したいのですが、このような継承関係がある場合は、どのようにしたらいいのでしょうか?
また、不可能な場合、他の手段でn を初期化する方法はあるのでしょうか。
0059デフォルトの名無しさん
2011/07/19(火) 22:38:48.61本来はHogeしか初期化できないんだから、Hogeを触っていいなら
Hoge(int n = 0) : n(n) {}
Foo() : Hoge(0) {}
0060デフォルトの名無しさん
2011/07/19(火) 23:01:40.35thx です。そうですか、Foo() { n = 0; }オーソドックスな、コンストラクタ内で
初期化する方法ですね
質問ですが
Hoge(int n = 0) : n(n) {}
Foo() : Hoge(0) {}
これですと、Hoge()引数無しの、デフォルトコンストラクタが初期化されるのではなく
Hoge(int n)の如く、引数付きのコンストラクタが初期化されているように
見えるのですが、自分の勘違いでしょうか?
0061デフォルトの名無しさん
2011/07/19(火) 23:22:34.51>>59のはデフォルト値を設定してあるからHoge(0)は省略すればnは0で初期化されるし
任意の値を設定できるようにもなってる
つまりFoo() {}でもFoo() : Hoge() {}でもFoo() : Hoge(n) {}でもいける
もっとちゃんと書くとこうなるかな
Hoge() : n(0) {}
Hoge(int n) : n(n) {}
Foo() {} // Hoge()が呼ばれてHoge::nは0で初期化
Foo(int n) : Hoge(n) {} // Hoge::nをnで初期化
0062sage
2011/07/19(火) 23:23:19.62public:
IntArray2D(int size0,int size1):
mArray(0),
mSize0(size0),
mSize1(size1){mArray=new int[size0*size1];}
上のクラス宣言内のコンストラクタについてなんですが:の意味がわからないので教えて
ください
0063デフォルトの名無しさん
2011/07/19(火) 23:28:40.11初期化子リストで調べて
0064デフォルトの名無しさん
2011/07/19(火) 23:32:41.740065デフォルトの名無しさん
2011/07/20(水) 02:50:05.57const class Hello
{
};
0066デフォルトの名無しさん
2011/07/20(水) 03:40:19.86VC++ならclass Hello sealedでいけるが非標準
0067デフォルトの名無しさん
2011/07/20(水) 04:02:37.97以下のような形式で親クラス*に戻した場合、正しい実装クラスを指すことが
できますか?
class Abstract {
virtual void hoge() = 0;
};
class ImpA : public Abstract{ void hoge(){} };
class ImpA : public Abstract{ void hoge(){} };
class ImpA : public Abstract{ void hoge(){} };
enum AbstractType { A, B, C };
Abstract* restore(char* binary, AbstractType type)
{
if(type == A)
{
ImpA* pResult = (ImpA*)binary;
return pResult;
}
if(type == B)
{
ImpB* pResult = (ImpB*)binary;
return pResult;
}
if(type == C)
{
ImpC* pResult = (ImpC*)binary;
return pResult;
}
return 0;
}
006867
2011/07/20(水) 04:03:50.36誤
class ImpA : public Abstract{ void hoge(){} };
class ImpA : public Abstract{ void hoge(){} };
class ImpA : public Abstract{ void hoge(){} };
正
class ImpA : public Abstract{ void hoge(){} };
class ImpB : public Abstract{ void hoge(){} };
class ImpC : public Abstract{ void hoge(){} };
0069デフォルトの名無しさん
2011/07/20(水) 04:11:18.43007067
2011/07/20(水) 04:26:01.68char* p = (char*)new ImpA();
AbstractType type = A;
受け取った側が復元したいのです。
Abstract* restore(p, type);
0071デフォルトの名無しさん
2011/07/20(水) 04:34:23.29そんなことは無理
boost::serializationとか使え
0072デフォルトの名無しさん
2011/07/20(水) 12:18:21.93ファイル名がstd::wstringで与えられてるんだが、
STLportのstd::ofstreamはwchar_tのファイル名を扱えないっぽい。
どうしてる?
変換するしかない?
0073デフォルトの名無しさん
2011/07/20(水) 12:52:55.130074デフォルトの名無しさん
2011/07/20(水) 13:06:04.710075デフォルトの名無しさん
2011/07/20(水) 14:44:14.93C++1Xが出てムーブコンストラクタを多用したSTLが出るまで待てないのか?
0076デフォルトの名無しさん
2011/07/20(水) 18:12:29.87標準のfstreamが取るファイル名は常にchar*(実装依存)だよ。
boost::filesystem::fstreamならpath/wpathが使える。
0077sage
2011/07/20(水) 19:17:50.350078デフォルトの名無しさん
2011/07/20(水) 19:19:46.590079デフォルトの名無しさん
2011/07/20(水) 21:39:16.48よくわかりました。
ところで、ふと疑問が湧きました、よろしくお願いします。
class Hoge
{
public:
virtual Hoge * clone () const = 0;
protected:
int n;
};
class Foo : public Hoge
{
public:
Foo * clone() const { return new Foo( *this ); }
void Delete() { delete this; }
~Foo()
{
Delete();
}
};
純仮想関数のインスタンスをヒープから削除する実装ですが、こんな感じでいいでしょうか?
それとも、参照カウンタを付けないとヤバイですか?
0080デフォルトの名無しさん
2011/07/20(水) 21:42:40.35基底クラスのインスタンスBと派生クラスのインスタンスCで、たとえばBのpublicなメンバ変数を
Cにコピーしたい場合は、Cで=オペレータをオーバーロードしてやる以外に方法はある?
0081デフォルトの名無しさん
2011/07/20(水) 21:45:10.50デストラクタからdelete this;を呼んでいる方がヤバイ。
参照カウンタを使うかどうかは使い方による。
0082デフォルトの名無しさん
2011/07/20(水) 22:00:22.70デストラクタでdeleteはありえない(破棄されることが決まってるんだから)
ヒープに作ることを前提にするなら
コンストラクタを非公開にして(スタックに置かせないため)、静的メンバ関数から生成するとかで対応しないと
外部からdeleteさせていいならスマートポインタでいいんじゃないかな
>>80
普通にコピーするための関数をクラスBに用意すれば良いんじゃないかな
クラスBの参照かポインタで受ければインスタンスCも放り込めるでしょ
0084デフォルトの名無しさん
2011/07/20(水) 22:04:18.86なるほど、デストラクタに難ありですか、難しそうなので、こういう場合スマートポインタとか
boost::shared_ptr とかを使うことは出来るのでしょうか?
0085デフォルトの名無しさん
2011/07/20(水) 22:09:24.16なるほどありがとうです、調べてみます。
0086デフォルトの名無しさん
2011/07/20(水) 23:27:01.07なんかやりたいことが違ったらスマンが
ttp://ideone.com/5ILos
こういうことがしたいってこと?
0087デフォルトの名無しさん
2011/07/21(木) 00:39:37.51ありがとうございます。
やりたいことは派生クラスから、基底クラスのコンストラクタの振る舞いを制御するということです。いわゆる仮想コンストラクタという奴です。
いろいろ調べたり、More Effective STL を読み返すと、一筋縄でない事を知り思考錯誤しています。
auto_ptrの使い方が間違っていてエラーが出ます
error C2555: 'Foo::clone': オーバーライドする仮想関数の戻り値の型が異なり、'Hoge::clone' の covariant ではありません。
error C2664: 'Foo::Foo(const Foo &)' : 1 番目の引数を 'const Foo *const ' から 'const Foo &' に変換できません。(新しい機能 ; ヘルプを参照)
#include <memory>
#include <iostream>
using namespace std;
class Hoge
{
public:
virtual Hoge * clone () const = 0;
protected:
int n;
};
class Foo : public Hoge
{
public:
//Foo * clone() const { return new Foo( *this ); } ここでエラーがでますorz
auto_ptr<Foo> clone() const { return new Foo( this ); }
Foo()
{
int n = 0;
cout << "Foo Constructor" << endl;
}
};
008887
2011/07/21(木) 00:40:40.010089デフォルトの名無しさん
2011/07/21(木) 01:46:58.10相談に乗って欲しいならエラーメッセージ貼れ。
Hoge に virtual デストラクタが要る。
そこに auto_ptr は要らない。呼び出し側で欲しけりゃ使えばいい。
009089
2011/07/21(木) 01:48:37.31あ、エラーメッセージは上に貼ってあったのか。ごめん。
covariant じゃなくなってるのは auto_ptr のせい。
2つめのやつは this と *this の違い。
009187
2011/07/21(木) 02:04:05.19#include <memory>
#include <iostream>
using namespace std;
class Hoge
{
public:
virtual Hoge * clone () const = 0;
virtual ~Hoge(){}
};
class Foo : public Hoge
{
public:
Foo * clone() const { return new Foo( *this ); }
Foo()
{
cout << "Foo Constructor" << endl;
}
};
class Foo_ : public Hoge
{
public:
Foo_ * clone() const { return new Foo_( *this ); }
Foo_()
{
cout << "Foo_ Constructor" << endl;
}
};
009287
2011/07/21(木) 02:04:34.22int main(int argc, char* argv[])
{
try {
auto_ptr<Foo> PtrFoo(new Foo());
auto_ptr<Foo_> PtrFoo_(new Foo_());
} catch(...){
;
}
return 0;
}
0093デフォルトの名無しさん
2011/07/21(木) 08:23:43.31class Hoge
{
private:
int x;
public:
Hoge(int a){ x = a; }
operator+(Hoge hoge);
}
Hoge Hoge::operator+(Hoge hoge)
{
return Hoge(x + hoge.x);
}
演算子オーバーロードのサンプルコードでこのようなものがありました。
xはprivateになっているので、11行目のhoge.xはアクセスできないように思うのですが、
何故これで大丈夫なのでしょうか?
初歩的な質問ですみません。
0094デフォルトの名無しさん
2011/07/21(木) 08:26:59.920095デフォルトの名無しさん
2011/07/21(木) 10:44:02.93x も hoge.x もクラスHogeのメンバーだから。
異なるクラスからアクセスできないのであって、異なるインスタンスからアクセスできないわけじゃない。
同じクラスならアクセス可能。
0096デフォルトの名無しさん
2011/07/21(木) 11:00:04.46そろそろそのでたらめなコードをなんとかしないとな、聞いたことはちゃんと取り入れないと
まずは目的と欲しい機能を文章で分かりやすく表現できないことには前に進まない
まずコードの前に落ち着いて文章でまとめてみてよ
あとエラーC2555は、戻り値だけが違う関数はオーバーロードできないってこと
0097デフォルトの名無しさん
2011/07/21(木) 11:16:59.120098デフォルトの名無しさん
2011/07/21(木) 12:46:08.15> あとエラーC2555は、戻り値だけが違う関数はオーバーロードできないってこと
違うよ。全然違うよ。
0099デフォルトの名無しさん
2011/07/21(木) 18:59:53.58virtual void func();
};
struct Y : X {
char func(); // C2555
};
1. 名前とパラメータの型が同じ仮想関数が基本クラスで宣言されている
2. その関数をオーバー「ライド」しようとしているが、戻り値の型だけ違う
1番、2番が合わさることでC2555となり最強に見える
0100Perl忍者
2011/07/21(木) 20:01:51.00そういうIDEと飼ってありますか? 教えてください
.NETみてみたんですが
.NET C++とか検索してもなんか 入門サイトとか全然のってなくてよくわかりません
.NET 入門とか調べると C#がでてくるんですが C#がむいてるんですか?
C#は.NETがむいてるんですか???わかりません教えてください
C++でできるGUIアプリ開発とかやりたいですがなにがむいてますか?
Xcodeみたいにウインドウとかボタンとか自由に配置してやりたいんですが
WIN32みたいに変な全部ウインドーコードかいたり リソースエディタとかめんどくさいのやりたくないです
C++をやる理由なんですが UnrealEngine3っていうやつC++つかうみたいなんで
教えてください
C++でできるXcodeみたいなやつ
C++だと.NETはむずかしい C#使えっていわれたんですがホンとですか??
C++でできるGUIのIDEとかそういうのあったら教えてくださいまってます
0101デフォルトの名無しさん
2011/07/21(木) 20:09:21.14マルチ死ね
0102Perl忍者
2011/07/21(木) 20:15:16.390103Perl忍者
2011/07/21(木) 20:15:46.96マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
マルチしてません 教えてください
0104デフォルトの名無しさん
2011/07/21(木) 20:17:57.00死ね
0105Perl忍者
2011/07/21(木) 20:19:26.77本当に違います
どなたか親切なかた教えてく
0106Perl忍者
2011/07/21(木) 20:22:08.41やっぱり.NETはC#のほうがいいんですか?教えてください
本当に教えてくださいまってますみまさん
0107デフォルトの名無しさん
2011/07/21(木) 20:28:26.15死ね
0109デフォルトの名無しさん
2011/07/21(木) 20:47:44.59なに忍者さんに口聞いてんだ?
死ね
0110デフォルトの名無しさん
2011/07/21(木) 21:56:45.41ファック
0111デフォルトの名無しさん
2011/07/21(木) 22:21:03.10何も考えずにC#(VS Express)かJava(Eclipse)を始めろ。
C++のことは一旦忘れるんだ。
0112デフォルトの名無しさん
2011/07/21(木) 23:47:45.490113デフォルトの名無しさん
2011/07/22(金) 16:59:33.38unsingned long num_ = *( reinterpret_cast<const unsigned long *>(pData) );
pData += sizeof( unsigned long );
//etc
}
この関数で移動したpDataのアドレスを返すにはどうするのがスマートですかね?
引数を2重ポインタ使って返す?
返値で返す?
一般的な解法がわからん
0114デフォルトの名無しさん
2011/07/22(金) 17:04:36.56FILE *pFile;
fpos_t fposFileSize;
char *pData;
pFile = fopen( fileName, "rb" );
if( !pFile ) return false; // ファイルが開けない
// ファイルサイズ取得
fseek( pFile, 0, SEEK_END );
fgetpos( pFile, &fposFileSize );
// メモリ確保
pData = (char *)malloc( (size_t)fposFileSize );
// 読み込み
fseek( pFile, 0, SEEK_SET );
fread( pData, 1, (size_t)fposFileSize, pFile );
fclose( pFile );
bool bRet = load( pData );
free( pData );
return bRet;
}
pDataはこんな感じになってます
0115デフォルトの名無しさん
2011/07/22(金) 17:11:44.23std::pair<bool, char*>で返すとか
三つ以上はboost::tupleかstd::tr1::tuple
0116デフォルトの名無しさん
2011/07/22(金) 17:15:08.20参照でもポインタでもいいけど、呼び出し元のpData変えたらfree()できなくなるから戻り値しかないじゃん。
0117デフォルトの名無しさん
2011/07/22(金) 17:59:19.23thx。こんな感じにしました。
http://codepad.org/yMQoNwL0
ファイル操作慣れてないので、なんか突っ込みどころあったら突っ込んでください
初めてcodepad使ったんだけど、urlいつまで有効なんだろう?
0118デフォルトの名無しさん
2011/07/22(金) 20:11:22.01char num_ = *( reinterpret_cast<const char *>(pData) );
pData += sizeof( char );
//etc
return (char*)pData;
}
↓
static const char* classAinit( const char *pData) {
char num_ = *pData;
++pData;
//etc
return pData;
}
0119デフォルトの名無しさん
2011/07/22(金) 20:13:22.84無闇とキャストするな。
C型のキャストは禁物。
sizeof(char)は意味が無い。
つーか、char *をint *にキャストしてもまともに使えるとは限らんぞ。
0120デフォルトの名無しさん
2011/07/22(金) 21:10:57.99これはやめろ
0121デフォルトの名無しさん
2011/07/22(金) 21:23:04.080122デフォルトの名無しさん
2011/07/22(金) 21:39:08.130123デフォルトの名無しさん
2011/07/22(金) 23:18:42.570124デフォルトの名無しさん
2011/07/22(金) 23:53:50.870125デフォルトの名無しさん
2011/07/23(土) 00:23:27.85C++0xでは廃止
0126デフォルトの名無しさん
2011/07/23(土) 00:34:10.750127デフォルトの名無しさん
2011/07/23(土) 06:32:27.240128デフォルトの名無しさん
2011/07/23(土) 10:08:29.70>>127
まじで!?
0129デフォルトの名無しさん
2011/07/23(土) 10:11:47.500130デフォルトの名無しさん
2011/07/23(土) 12:46:46.03これですか。
http://ja.wikipedia.org/wiki/%E5%AE%9F%E5%BC%95%E6%95%B0%E4%BE%9D%E5%AD%98%E3%81%AE%E5%90%8D%E5%89%8D%E6%8E%A2%E7%B4%A2
勉強になります。
0131デフォルトの名無しさん
2011/07/23(土) 13:52:59.13まあADLがなかったら標準C++ライブラリはあり得なかったからな
0132117
2011/07/23(土) 15:36:46.42ぬーCはホント黒魔術だ
>つーか、char *をint *にキャストしてもまともに使えるとは限らんぞ。
void* かpritf %pの方がよかったのか。
いいわけだけど、C++型のキャストは書きにくいからC形式のキャストを使ってしまう。
使いにくくするのも目的の1つなんだろうけど、自分のコードの悪い癖ですね
0133デフォルトの名無しさん
2011/07/23(土) 15:44:30.62アクセスできる場合でも速度上のペナルティ食らう。
0134デフォルトの名無しさん
2011/07/23(土) 16:24:42.920135デフォルトの名無しさん
2011/07/23(土) 16:55:38.24thx
そういう理由ですか
ほんとに複雑な言語だな
勝手にコンパイラがやってくれる最適化とか、アライメントでつい最近壮大な時間はまった。
#programa pack(push, 1)
#program pack(pop)
これを知らなかった
仕様を知らないのが、バグの温床にもなる
怖いな
0136デフォルトの名無しさん
2011/07/23(土) 16:59:17.810137デフォルトの名無しさん
2011/07/23(土) 17:09:23.410138デフォルトの名無しさん
2011/07/23(土) 17:17:42.350139デフォルトの名無しさん
2011/07/23(土) 18:12:58.790140デフォルトの名無しさん
2011/07/23(土) 18:26:03.260141デフォルトの名無しさん
2011/07/23(土) 18:26:50.520142デフォルトの名無しさん
2011/07/23(土) 18:51:15.71やるじゃん
0x△
0143デフォルトの名無しさん
2011/07/23(土) 19:51:49.640144デフォルトの名無しさん
2011/07/23(土) 20:09:02.970145デフォルトの名無しさん
2011/07/23(土) 20:59:54.570x▽
0146sage
2011/07/24(日) 01:05:19.38const int& h = mHeight;
Array2D< unsigned char >& o = mObjects;
mWidth,mHeight, mObjectsはそれぞれメンバ変数なんですが
この参照の使い方がわからないので教えてください
0147デフォルトの名無しさん
2011/07/24(日) 01:19:28.120148デフォルトの名無しさん
2011/07/24(日) 01:20:37.71const int& h = mHeight;
w = 100;
h = 200;
bool a = (w == mWidth);
bool b = (h == mHeight);
この地点で a == true、b == true
ってこと?
0149デフォルトの名無しさん
2011/07/24(日) 01:21:20.19単に、一時変数として使いたいだけでしょ。
0150デフォルトの名無しさん
2011/07/24(日) 05:04:09.28どうせその後にw,n,o使ったなんかの処理あるんだろ?
0151デフォルトの名無しさん
2011/07/24(日) 18:01:11.61例外安全の為らしいですが、どういう状況の時に役に立つのでしょうか?
0152デフォルトの名無しさん
2011/07/24(日) 21:24:26.86クラスのメンバー関数にして、それを型キャストしてpthreadに入れるとワーニングが出るんですが。
0153デフォルトの名無しさん
2011/07/24(日) 21:25:40.600154デフォルトの名無しさん
2011/07/24(日) 22:22:56.680155デフォルトの名無しさん
2011/07/24(日) 22:27:45.860156デフォルトの名無しさん
2011/07/24(日) 22:34:50.10わかってないですね
教えて頂けると嬉しいです。
>>155
friniedにした方が良いという事でしょうか?
0157デフォルトの名無しさん
2011/07/24(日) 22:39:45.730158デフォルトの名無しさん
2011/07/24(日) 22:44:02.88こういう話でC++がハブられるのは何故なんでしょう?
0159デフォルトの名無しさん
2011/07/24(日) 22:48:36.120160デフォルトの名無しさん
2011/07/24(日) 23:19:42.99なので、関数ポインタの型キャストをしたのです。
警告がでますが、正常に動きます。
friendの方が良いということでしょうか?
0161デフォルトの名無しさん
2011/07/24(日) 23:31:08.49void(*a)() = (キャスト)printf;
a();
↑
何が起きるか考えてみな
0162デフォルトの名無しさん
2011/07/24(日) 23:37:08.920163デフォルトの名無しさん
2011/07/24(日) 23:38:46.980164デフォルトの名無しさん
2011/07/24(日) 23:39:54.580165デフォルトの名無しさん
2011/07/24(日) 23:42:23.73大抵の実装ではキャスト無しで通ってしまうが、ほんとうは extern "C" の付いてる
pthread の関数に extern "C++" な static メンバ関数へのポインタは渡せない。
>>160 キャストってのは↑の問題のことか?
よくわかんないからコピペ推奨。
0166デフォルトの名無しさん
2011/07/24(日) 23:44:16.71よくわかりませんね。
class A{
void *func(void *p);
};
pthread_create(NULL, NULL, reinterpret_cast<void* (*)(void*)>(&A::func), NULL);
において、
このキャストが悪い理由がわかりません。
結局、friendにした方が良いとおっしゃりたいんですかね?
0167デフォルトの名無しさん
2011/07/24(日) 23:48:25.22func を実行する相手がいないだろ
アクセス制御とは無関係な問題だ
0168デフォルトの名無しさん
2011/07/24(日) 23:52:04.17funcの実体がないという事ですか?
割愛したんですが、
xxx.h
class A{
void *func(void *p);
};
xxx.c
A::A(){
pthread_create(NULL, NULL, reinterpret_cast<void* (*)(void*)>(&A::func), NULL);
}
void *A::func(void *p){
return NULL;
}
取りあえず、クラスのメンバ関数にするか、frindでAにアクセスする方が良いかを聞きたいのですが…
0169デフォルトの名無しさん
2011/07/24(日) 23:53:01.50これはfriendとかそういう次元の話じゃないな
0170デフォルトの名無しさん
2011/07/24(日) 23:53:42.08では、funcがclass Aにアクセスするにはどうすればいいですか?
0171デフォルトの名無しさん
2011/07/24(日) 23:55:14.54pからアクセスすれば?
0172デフォルトの名無しさん
2011/07/24(日) 23:55:41.27すみません。
pってなんですか?
0173デフォルトの名無しさん
2011/07/24(日) 23:57:46.90pthread_createの第四引数にthis渡せば普通にAのメンバ呼べるでしょ
0174デフォルトの名無しさん
2011/07/24(日) 23:58:14.76func の実体じゃない、func の対象
クラスにアクセスって、自分が言ってることを冷静に考えてみな
0175デフォルトの名無しさん
2011/07/24(日) 23:58:26.05ライブラリ実装側が、個別の出入力ごとに事前操作と事後操作を入れられるようになる。
オブジェクトにすることで事後操作が正しく実行されることを想定できる。
こんなところかと。たぶん。
0176デフォルトの名無しさん
2011/07/25(月) 00:00:29.18やっと納得できる答えがありました。
どうもありがとうございます。
0177デフォルトの名無しさん
2011/07/25(月) 01:03:21.26ていうか、頭固すぎ。
0178デフォルトの名無しさん
2011/07/25(月) 01:09:32.28仮想関数のメンバポインタがからむと
発狂しそうだな、このお方
sizeof の違う reinterpret_cast とか平気みたいだし
0179デフォルトの名無しさん
2011/07/25(月) 02:13:07.61C++って最近暇つぶしに書き始めたばかりだから、先輩諸氏には到底及ばんと思う。
結局、ワーニングでるけどこれにしました。
pthread_create(NULL, NULL, reinterpret_cast<void* (*)(void*)>(&A::func), NULL);
privateにアクセス出来ないのは結構痛いので。
0180デフォルトの名無しさん
2011/07/25(月) 02:15:20.64陰口もいいけど、合理的な理由も付けて欲しいね
0181デフォルトの名無しさん
2011/07/25(月) 02:19:59.36それじゃやりたいことができないだろう。
A のインスタンスをスレッド内で作成できるなら別だが。
0182デフォルトの名無しさん
2011/07/25(月) 02:25:42.82こいつ何もわかってなくて泣いた
0183デフォルトの名無しさん
2011/07/25(月) 02:32:54.63メンバポインタからやり直した方がいいよ
0184デフォルトの名無しさん
2011/07/25(月) 02:33:01.77確かに sizeof は本質ではないが、サイズとは無関係に reinterpret_cast 自体が大丈夫じゃない。
大丈夫だと思うならまずその理由を言ってみろよ。
0185デフォルトの名無しさん
2011/07/25(月) 02:38:01.05お前それで正常に動いたか?
0186デフォルトの名無しさん
2011/07/25(月) 02:40:15.38確かに…
0187デフォルトの名無しさん
2011/07/25(月) 03:57:15.70ダメな理由を述べよ
てか、教えないがグダグダ言われてもな…
嫌なら答えなきゃ良いのに、腐った死体ばかりだなw
0188デフォルトの名無しさん
2011/07/25(月) 03:58:16.970189デフォルトの名無しさん
2011/07/25(月) 04:02:08.08相手に語らせればつついて遊べるし
0190デフォルトの名無しさん
2011/07/25(月) 04:03:53.12動かなかった。
スレッドは実行されるが、メンバ変数にアクセスしたところで落ちた。
勉強して出直すわ。
friendにして、明日試してみる。
0191デフォルトの名無しさん
2011/07/25(月) 04:11:34.030192デフォルトの名無しさん
2011/07/25(月) 04:19:24.48むしろ、メンバ変数を参照するには、それしか思いつかんかった。
0193デフォルトの名無しさん
2011/07/25(月) 04:33:01.56>friendにして、明日試してみる。
結果報告ヨロ
メンバ関数ポインタという物を全く理解してないのがこれでわかるな・・・
0194デフォルトの名無しさん
2011/07/25(月) 04:34:44.69もうこれでいいよ
0195デフォルトの名無しさん
2011/07/25(月) 05:28:32.37メンバ関数は中で this ポインタを使えるじゃん?
hoge.Save(); って呼び出すと、メンバ関数Saveの中で this(= hogeのアドレス)が使えるじゃん?
ってことはメンバ関数は裏で hoge(インスタンス)のアドレスが勝手に渡されてるってことじゃん?
ってことは普通の関数とメンバ関数は別物ってことになるじゃん?
0196デフォルトの名無しさん
2011/07/25(月) 06:18:53.110197デフォルトの名無しさん
2011/07/25(月) 06:28:49.43void*しか積んでないのでおかしな事になる。(thisには多分pthread_createルーチン内の
リターンアドレスが入っていると思う)
スタックの清掃は呼び出し側で行っているようなので問題ない様に見えるけど、
やってる事はスタックオーバーフローと大して変わらない
0198デフォルトの名無しさん
2011/07/25(月) 06:43:38.13面白いからやってみろよ
0199デフォルトの名無しさん
2011/07/25(月) 07:17:15.23N3290 5.2.10 [expr.reinterpret.cast] p6 より。
"The effect of calling a function through a pointer to a function type that is not the same
as the type used in the definition of the function is undefined."
これまで流れを見るに、これで理解してもらえるとは思わないが。
0200デフォルトの名無しさん
2011/07/25(月) 07:42:00.940201デフォルトの名無しさん
2011/07/25(月) 08:04:45.64「相談室」というスレタイで来たのに、ベテランの公開オナニー場とは詐欺なスレだなw
>>193
間違いなく、ただの関数ポインタって思ってるからな。
昨日の結果を鑑みると、何か間違ってるようだが。。
盆休みにでも、徹底して勉強したい。
>>197
解説ありがとう。
唯一、技術的にCプログラマな俺にもわかるように説明してくれたのはあんただよ。
0202デフォルトの名無しさん
2011/07/25(月) 08:10:28.84せっかく出典出してもらったのに悪いが、君の予想通りわからないっぽい。
せめて日本語なら…
0203デフォルトの名無しさん
2011/07/25(月) 08:18:19.63reinterpret_cast はどこで覚えたの?
どういう解説したら「reinterpret_castしても大丈夫」「ダメな理由を述べよ」なんて
発想になってしまうのか興味があるな。
0204デフォルトの名無しさん
2011/07/25(月) 08:35:58.71> 「相談室」というスレタイで来たのに、ベテランの公開オナニー場とは詐欺なスレだなw
書籍等で学んでいることが前提だよ。その上でわからない場合の相談室。一から十までこのスレで学ぶ気か?
キミは基本を全くわかっていないのに、どこから仕入れてきた知識かしらんけど、見よう見まねでfriendとか言い出してる。
これじゃ、C++の初心者でも簡単に弄れる。弄ってるのはベテランじゃなくて初心者だろう。
面倒くさいから正しい書き方教えてやる。なぜこうするのかは書籍で学べ。
#include <pthread.h>
class A {
private:
void member1() { }
public:
static void* thread_func(void *data) {
A &self = *reinterpret_cast<A *>(data);
self.member1();
....
return NULL;
}
};
void aaaa()
{
pthread_t th;
A a;
pthread_create(&th, NULL, A::thread_func, &a);
}
0205デフォルトの名無しさん
2011/07/25(月) 09:59:39.11> 面倒くさいから正しい書き方教えてやる。なぜこうするのかは書籍で学べ。
「正しい」ねぇ・・・
> A &self = *reinterpret_cast<A *>(data);
static_cast だろ。
> pthread_create(&th, NULL, A::thread_func, &a);
>>165
あと pthread_create() のエラー処理な。
0206デフォルトの名無しさん
2011/07/25(月) 10:23:44.88カルシウム足りてないようだな。
ポインターの変換には例外を設けずreinterpret_castを用いる方が自然。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1120
0207デフォルトの名無しさん
2011/07/25(月) 10:32:25.61リンク先が全然根拠になってない件。
少なくとも C++2003 では標準の範囲外なわけだ。
さらに C++2011 で変換自体が認められたとしても変換後の値自体は
unspecified で、動作は保証されない。
全然自然じゃない。
暗黙変換の逆変換は C++1998 からずっと static_cast の役目。
0208デフォルトの名無しさん
2011/07/25(月) 11:25:24.22一生Cから出てこないでほしいな
0209デフォルトの名無しさん
2011/07/25(月) 11:29:44.20void*からオブジェクトのポインタへの変換後の動作が保証されないのは
static_castも同様。つーか保証できるわけがない。
だからこそ、reinterpret_castでいいじゃんという話がでてきてる。
0210デフォルトの名無しさん
2011/07/25(月) 12:56:40.78暗黙変換の逆なら const_cast や dynamic_cast という場合もある
上記いずれにもあたらない「明示的な型変換」がしたいとき static_cast
よって 204,206 vs 205=207 は 204,206 の勝ち
# この法則にも穴があるが今の流れとは関係ないので放置
0211デフォルトの名無しさん
2011/07/25(月) 13:14:51.06他のキャストを使用するって方針なのかもよ
reinterpret_castだと(やるかどうかは別として)間違えてvoid*以外を渡してもコンパイルエラーにならないし
0212デフォルトの名無しさん
2011/07/25(月) 14:37:25.35まあreinterpret_cast使うなら任意の不完全型でもいいからなw
voidは「static_castでも変換できる不完全型」なのでせっかくだから俺はこのstatic_castを選ぶぜ!ってやつがいてもおかしくない。例えば俺とか
0213デフォルトの名無しさん
2011/07/25(月) 14:40:52.640214デフォルトの名無しさん
2011/07/25(月) 14:50:31.93http://hibari.2ch.net/test/read.cgi/tech/1299218426/
0215デフォルトの名無しさん
2011/07/25(月) 16:20:33.28テンプレートを作ってコンパイルエラー検出。
template <class T>
T hoge_cast(void*p)
{
return reinterpret_cast<T>(p);
}
0216デフォルトの名無しさん
2011/07/25(月) 20:29:47.21入門書にかいてあったよ。
結構平気でvoid *に値突っ込んだり、取り出したりしてたから
>>204
そうカリカリするなよ。
一応、入門書は走破して、実際にコードを書き始めたわけさ。
スレタイに入門者・初心者お断りといれればどうよ?
あと、サンプルありがとな。
早速試すわ。
>>208
お前の人生には迷惑かけないから、ゆるしてちょ
0217デフォルトの名無しさん
2011/07/25(月) 20:30:22.17ttp://ideone.com/BlmAq
サンプル書いてみました。「メンバへのポインタ」でググるといいかも
実際に書いてみると、自分の知識もずいぶんと曖昧だと思いました
21行目でreinterpret_cast<int>(this)がエラーになる理由と
67行目の&演算子を外すとエラーになる理由がよく分からないです
0218デフォルトの名無しさん
2011/07/25(月) 20:49:28.30散々叩かれた俺が言うべきか分からんけど、
一つ目は(64bit cpuでは)intではケタがたりないのでは?
0219デフォルトの名無しさん
2011/07/25(月) 20:50:50.27staticメンバ関数ってようは普通の関数だからthisとか使えない
0220デフォルトの名無しさん
2011/07/25(月) 22:05:29.740221デフォルトの名無しさん
2011/07/25(月) 22:06:38.05pthreadの件については、戻り値と引数が同じ関数なら型キャスト出来ると思っていた。
少なくとも今まで上手くいかなかった事がないので、
生涯わからんと思うけど、
C++において、メンバ関数の型キャストは危険と覚えておくわ。
0222デフォルトの名無しさん
2011/07/25(月) 22:49:13.11普通のポインタ:
メモリ上の直接のアドレス
メンバへのポインタ:
インスタンスの先頭アドレスからのオフセット、
なのでインスタンスと一緒に使わないと意味がない
普通の関数ポインタを、メンバへのポインタに reinterpret_cast するのは
危ないのではないかと思う
0223デフォルトの名無しさん
2011/07/26(火) 00:51:50.21> void*からオブジェクトのポインタへの変換後の動作が保証されないのは
> static_castも同様。つーか保証できるわけがない。
なんでそう思ったの?
static_cast の動作として T* → void* という標準変換の逆変換が含まれることは
きちんと規格で定められているよ。 N3290 だと 5.2.9 p7 で。
0224デフォルトの名無しさん
2011/07/26(火) 00:59:17.78> ビット列を変えずに型だけ変わったことにしたければ reinterpret_cast
reinterpret_cast でビット列が変わらないと期待するコードに移植性は無いよ。
5.2.10 p3
[ Note: The mapping performed by reinterpret_cast might, or might not, produce
a representation different from the original value. ?end note ]
ポインタを別のポインタ型にキャストして、元に戻してから使う限りは static_cast も
reinterpret_cast も同程度の保証があるけど、 >>204 について言えば最初の変換が
暗黙変換なのだから戻すのは static_cast じゃないといけない。
戻すのに reinterpret_cast を使うのなら、最初の変換も reinterpret_cast でなければ
ならない。
pthread_create(&th, NULL, A::thread_func, reinterpret_cast<void*>(&a));
0225デフォルトの名無しさん
2011/07/26(火) 03:24:22.80> なんでそう思ったの?
当たり前だろ。void *として渡されてたポインタが変換先のオブジェクトへの
ポインタであったことなんか保証できないんだから。
>>224
暗黙変換の逆変換がstatic_castで出来るというだけで、暗黙変換の逆変換を
static_castでやらなければいけないなんて、どこにも書いていない。
0226デフォルトの名無しさん
2011/07/26(火) 04:12:55.78> 当たり前だろ。void *として渡されてたポインタが変換先のオブジェクトへの
> ポインタであったことなんか保証できないんだから。
そこの保証が無い場合はどのキャスト使おうがアウトなんで話してもしょうがないでしょ。
> static_castでやらなければいけないなんて、どこにも書いていない。
static_cast では、暗黙変換の逆変換ができると定められている。
reinterpret_cast では、暗黙変換の逆変換ができると定められていない。
(変換自体はできるが値が unspecified になる)
どっちを使うべきか、もうわかるよね?
0227デフォルトの名無しさん
2011/07/26(火) 07:34:46.38> (変換自体はできるが値が unspecified になる)
妄想規格 wwww
0228デフォルトの名無しさん
2011/07/26(火) 08:52:13.99ちがうの?
5.2.10 [expr.reinterpret.cast] paragraph 7 (>>206 のリンク先)に unspecified って
書いてあるみたいだけど。
0229デフォルトの名無しさん
2011/07/26(火) 09:11:57.88The result of any other such pointer conversion is unspecified.
これら以外のポインター変換の結果はunspecified
0230デフォルトの名無しさん
2011/07/26(火) 10:04:46.66韓流ドラマをやたら放送したり、女子フィギュアでは浅田真央よりキム・ヨナに寄せた
報道をして批判を浴びたりしたことがありましたが、最近ではさらに拍車がかかっている
ようで、社内にも微妙な雰囲気が漂っています」(フジテレビ関係者)
フジテレビや産経新聞は「フジサンケイグループ」の傘下だが、同グループのサンケイ
スポーツからは4月に韓国エンターテインメント情報のタブロイド誌「韓Fun(カンファン)」が
創刊されるなど、今年に入って"韓流押し"に本腰を入れてきているという。
「フジは他にも、今年4月に渋谷と恵比寿に同時オープンしたK-POPの常設公演会場
『Kシアター』に出資。系列の音楽出版会社はKARAらK-POPアーティストの版権を
買いまくっている。七夕に放送された同局の情報番組では『少女時代のように足が
綺麗になりますように』『KARAのライブに行けますように』などと書かれた短冊を
映り込ませ、女子アナたちもことあるごとに韓国旅行の魅力をPR。まるで韓国国家の
宣伝企業と化している状態ですよ」(スポーツ紙デスク)
そうしたメディアと視聴者との温度差が露見した形となった今回の騒動。現在のような、
キー局による露骨な"利益誘導型"の放送が続けば、さらなるテレビ離れが進むことは
避けられないだろう。
http://news.livedoor.com/article/detail/5732069/
0231デフォルトの名無しさん
2011/07/26(火) 12:36:47.82これら = reinterpret_castでT1 *→T2 *→T1 *とすると元の値に戻りますよーとかnullはどのポインタに変換してもnullですよーなど
でしょ?
んでその「これら」には
暗黙の変換でT1 *→void *に変換して
そのあとreinterpret_castでvoid *→T1 *に変換すると元の値に戻りますよってのが含まれてるの?
ってのが>>228の言いたいことなんじゃね?
今ちょっと調べられないけどどうなの?
0232デフォルトの名無しさん
2011/07/26(火) 14:28:30.70半端な知識でいいがかりつけてきた>>205が引けなくなって粘着してるだけだから気にすんな。
「これらの変換」が「T1*をT2*に変換したものを元に戻す」の事で、それ以外はunspecifiedと
いうのならば、↓これがunspecifiedという事になってしまう。
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int bbb(sockaddr *sa);
int aaa(struct sockaddr_in *sin)
{
return bbb(reinterpret_cast<struct sockaddr*>(sin));
}
すなわち、「これらの変換」とはその前(スタンダードタイプでかつT2のアライメント要求が
厳しくない、またはどちらかがvoid)の変換も含む。
0233デフォルトの名無しさん
2011/07/26(火) 14:55:48.31> いうのならば、↓これがunspecifiedという事になってしまう。
C++03 までは unspecified なコードだね。
> すなわち、「これらの変換」とはその前(スタンダードタイプでかつT2のアライメント要求が
> 厳しくない、またはどちらかがvoid)の変換も含む。
で、 >>204 のコードでは void* data → A* だから「どちらかがvoid」に含まれ、
その結果は static_cast<A*>(static_cast<void*>(data)) となる、つまり
static_cast<A*>(data) になる、と C++11 では新たに規定されることになった。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#658
0234デフォルトの名無しさん
2011/07/26(火) 15:27:51.46そのメンバポインタの話じゃないだろ
>>226
> static_cast では、暗黙変換の逆変換ができると定められている。
いちいち突っ込むのもアホくせえほど無茶苦茶やなw
0235デフォルトの名無しさん
2011/07/26(火) 15:34:21.300236デフォルトの名無しさん
2011/07/26(火) 15:35:52.25「voidのアライメントなんて定義されてねー」と言いがかりつけてくるのがいるので、
voidが特記された。
5.2.10 p7
A pointer to an object can be explicitly converted to a pointer to an object of
different type. Except that converting an rvalue of type 懼pointer to T1懼
to the type 懼pointer to T2懼 (where T1 and T2 are object types and where the
alignment requirements of T2 are no stricter than those of T1) and back to its
original type yields the original pointer value, the result of such a pointer
conversion is unspecified
0237デフォルトの名無しさん
2011/07/26(火) 15:40:14.59ま、>>233が規格理解してない半可通という事が証明されてしまったわけだ。w
5.2.10 p7
A pointer to an object can be explicitly converted to a pointer to an object of
different type. Except that converting an rvalue of type "pointer to T1" to the
type "pointer to T2" (where T1 and T2 are object types and where the alignment
requirements of T2 are no stricter than those of T1) and back to its original type
yields the original pointer value, the result of such a pointer conversion is
unspecified.
0238デフォルトの名無しさん
2011/07/26(火) 15:41:41.85C++03 では void* → A* の変換自体が認められていない。
unspecified 以前にコンパイルが通らない可能性がある。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1120
0239238
2011/07/26(火) 15:44:19.26void* は "pointer to an object" ではなくてですね。
> ま、>>233が規格理解してない半可通という事が証明されてしまったわけだ。w
お前もな。
0240デフォルトの名無しさん
2011/07/26(火) 15:47:31.99ねー、 >>232 ってキャストした後元に戻してないんだけど、なんで大丈夫なの?
0241デフォルトの名無しさん
2011/07/26(火) 15:57:47.31危険性や移植性が増えるだけだろうに。
0242デフォルトの名無しさん
2011/07/26(火) 15:58:30.32template <typename a>
int b(int c)
{
a d;
d = c; //暗黙変換
return N3290_cast<int>(d); //ふーん、すごいなあ・・・
}
0243デフォルトの名無しさん
2011/07/26(火) 15:59:40.73> C++03 では void* → A* の変換自体が認められていない。
> void* は "pointer to an object" ではなくてですね。
そういう言いがかり付けてくる奴がいるから「どっちかがvoid」が追加されたんだよ。w
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1120
>>240
bbb()はconnect(2)のようにstruct socksaddr*を引数に取る関数。
bbbの内部(共通部分に書かれてるタイプみて)で戻す。
0244デフォルトの名無しさん
2011/07/26(火) 16:01:49.75それじゃお前は↓このように書け。大変だな。www
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int bbb(sockaddr *sa);
int aaa(struct sockaddr_in *sin)
{
return bbb(static_cast<struct sockaddr*>(static_cast<void*>(sin)));
}
0245デフォルトの名無しさん
2011/07/26(火) 16:37:33.920246デフォルトの名無しさん
2011/07/26(火) 16:38:59.490247デフォルトの名無しさん
2011/07/26(火) 17:42:24.37今は>>231の2段落目 "んでその「これら」には……が含まれてるの?" のYes/Noを議論してるので
それが実際にコーディングする上でミスを誘いやすいか否かはまた別の問題として扱ったほうがいいんじゃないかな
0248デフォルトの名無しさん
2011/07/26(火) 17:49:56.19でもその文面に void の特記が含まれてないお
というか現行標準の 5.2.10/7 には未だ void の特記は
含まれてないと思うお
0249デフォルトの名無しさん
2011/07/26(火) 18:57:35.15>>232の例がC++03でunspecifiedだと>>233が言いがかり付けてきたから、
C++03(>>236)を引用した。
>>232-233はvoid*とは直接関係ないから。文脈読めない人は引っ込んでなよ。
0250デフォルトの名無しさん
2011/07/26(火) 19:25:55.62>>248
>>232の例がC++03でunspecifiedだと>>233が言いがかり付けてきたから、
C++03(>>236-237)を引用した。
>>232-233はvoid*とは直接関係ないから。文脈読めない人は引っ込んでなよ。
0251デフォルトの名無しさん
2011/07/26(火) 21:26:03.86確かに 5.2.10p7 の Converting... の文だけでは
A* => void* => A* のような void* を含む変換では、元に戻る確証が得られないような気がする
ただ、最初の文によると void* を経由して static_cast すれば、reinterpret_cast が実現できるので
reinterpret_cast<A*>( reinterpret_cast<void*>( &A() ) )
は
static_cast<A*>( static_cast<void*>( static_cast<void*>( static_cast<void*>( &A() ) ) ) )
= static_cast<A*>( static_cast<void*>( &A() ) ) /* (!) */
と同じこと
そして、5.2.9p13 によれば、(!) の式は元の値に等しくなるとある
「ただ、…」以降の部分は、確証がもてんです
というか、実務で問題なく使えれば、もうそれでいいかなあ。。
0252デフォルトの名無しさん
2011/07/26(火) 21:30:24.11void* gf( void* )
{
A().operation();
return NULL;
}
ところで、戻り値の NULL の型はどのような扱いになるんですか?
0253デフォルトの名無しさん
2011/07/26(火) 21:43:18.030254デフォルトの名無しさん
2011/07/26(火) 21:49:06.07自分の認識を書いてみる。
5.2.10 はあくまで reinterpret_cast の項なので p7 の 2 回の変換が共に
reinterpret_cast の場合にのみ成立する(元に戻る保証がある)、というのが
俺の解釈で、>205 も同様の解釈なのだと思う。
>232 については sockaddr_in と sockaddr が無関係の型なので、bbb の中では
reinterpret_cast を使って戻していると想定されるため unspecified ではない(と想定される)。
一方で、暗黙の型変換の逆方向の変換ができるとは reinterpret_cast では規定されていない。
static_cast は 5.2.9 で規定されている。
実際、(reinterpret_cast の変換が処理系定義なので)処理系に依存するけど元に戻せない例を
作る事が出来て実例が http://ideone.com/L7ZuL
後出しで多重継承かよ、というかもしれないが 5.2.10 の規定に継承について書かれていない以上
多重継承かどうか等に関わらず元に戻せる保証がないと読むべき、というのが俺の主張。
0255デフォルトの名無しさん
2011/07/26(火) 22:11:16.99インチキ
reinterpret_casterの呼び出しの暗黙のC*->B*への変換で変更されている。
0256デフォルトの名無しさん
2011/07/26(火) 22:17:44.17言うと怒るし。
0257デフォルトの名無しさん
2011/07/26(火) 22:19:40.90老害はほっとけ
0258デフォルトの名無しさん
2011/07/26(火) 22:20:10.500259デフォルトの名無しさん
2011/07/26(火) 22:23:35.10して職場の人を困らせてあげましょう
0260248
2011/07/26(火) 22:43:02.850261デフォルトの名無しさん
2011/07/26(火) 23:03:55.06COBOLerかな?
シングルトン一本槍とか、10進ライブラリにご執心とか?
0262デフォルトの名無しさん
2011/07/26(火) 23:19:13.33ああ、俺への回答か。
ありがとう。
今日、昼休み中考えてて、俺なりに納得してみた。
class A{
void *func(void *arg){
reurn NULL;
}
};
の場合において、
reinterpret_cast<void* (*)(void*)>(&A::func)
というキャストは、A::を取る目的でつかったんだが、
A::を取る事は即ちclass Aのメンバでなくなるという事かなと。
なので、class Aのメンバにアクセスしようとすると落ちると。
Cとかアセンブラの場合、関数ポインタは関数の先頭を指すアドレスにすぎないけど、
(だから、強引なキャストで良いと思ってた)けど、
C++ではそうではないんだなと。
0263デフォルトの名無しさん
2011/07/26(火) 23:29:51.91暗黙の変換を元に戻せるかどうか、を確認してるんだから暗黙の変換がないと意味がないじゃん。
0264デフォルトの名無しさん
2011/07/27(水) 01:50:59.53void* vp = p;
assert(static_cast<T*>(vp) == p); // (1)
assert(reinterpret_cast<T*>(vp) == p); // (2)
(1) static_cast (5.2.9)
C++03 でも C++11 でも OK 。
(2) reinterpret_cast (5.2.10)
C++03 では可能な変換として挙げられていない。
C++11 では OK 。(DR #658, #1120 による変更)
とりあえずここまでは合ってる?
0265デフォルトの名無しさん
2011/07/27(水) 17:13:48.64C++では似たようなことはできないのでしょうか
0266デフォルトの名無しさん
2011/07/27(水) 17:21:29.700267デフォルトの名無しさん
2011/07/27(水) 17:23:28.350268デフォルトの名無しさん
2011/07/27(水) 17:31:18.63Cではできないよ
それができるのはGCCの独自拡張じゃないかな
0269デフォルトの名無しさん
2011/07/27(水) 17:42:19.76void Foo(void) {
struct Local { static void Bar(void) { /*^o^*/ } };
Local::Bar();
}
0270デフォルトの名無しさん
2011/07/27(水) 18:29:41.56おまえ >>207 か?
ここ「まで」って何を勝手に限定してるんだよ
> 暗黙変換の逆変換は C++1998 からずっと static_cast の役目。
これだけ大きく出たんなら「任意の」暗黙変換の逆がすべて static_cast であることを示せ
0271デフォルトの名無しさん
2011/07/27(水) 20:07:14.67そしてたぶん>>205も
0272デフォルトの名無しさん
2011/07/27(水) 23:51:17.31g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\blowfish\blowfish.o ..\src\blowfish\blowfish.cpp
In file included from ..\src\blowfish\blowfish.cpp:5:
..\src\blowfish\blowfish.h2:268: warning: missing braces around initializer(長いのでとりあえず略)
こんな感じでエラーになってしまいました。
どこに問題があるのでしょうか?
0273272
2011/07/27(水) 23:53:06.05うまくいきませんでした。
ちなみに組み込んだというのはここのファイルです
http://www.schneier.com/blowfish-download.html
0274デフォルトの名無しさん
2011/07/27(水) 23:56:17.470275デフォルトの名無しさん
2011/07/28(木) 00:09:16.82>Cは関数の中に関数を作ることができる
どう作るのか教えてください
0276デフォルトの名無しさん
2011/07/28(木) 00:15:43.73二次元配列を{{}, {}, ...}って形でなく{...}の形の初期化子で初期化してるからじゃないかな。
0277272
2011/07/28(木) 00:25:00.43これは特に気にしなくていいメッセージでしたか、
確かに276の言うとおりなソースになっていました。
これのエラーメッセージの後にさらに
g++ -oサンプル.exe src\main.o src\blowfish\blowfish.o
src\blowfish\blowfish.o:blowfish.cpp:(.text+0x0): multiple definition of `CBlowFish::CBlowFish()'
src\main.o:main.cpp:(.text+0x0): first defined here
と関数系のエラーが出ているのですが、
ファイルに#ifndefとかを追加していますし、
試しにとコマンドでg++ main.cpp(←blowfishをインクルードしているだけ)をやると
コンパイルが通るのですが、
このエラーは何が原因と考えられるでしょうか?
0278デフォルトの名無しさん
2011/07/28(木) 00:36:55.53gcc独自拡張にあるね。
http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
0279デフォルトの名無しさん
2011/07/28(木) 01:01:50.020280デフォルトの名無しさん
2011/07/28(木) 01:06:38.40unsigned int color =(red<<16)|(green<<8)|blue;
これの使い方わかりますか
赤青緑それぞれ一バイトの数値を持っていてcolorにその赤青緑を代入する
ときビットシフトがかかる と思ってたんですが実際やったらうまくいきませんでした
サンプルのお手本なんですが使い方を教えてください
0281デフォルトの名無しさん
2011/07/28(木) 01:20:40.600282デフォルトの名無しさん
2011/07/28(木) 01:21:11.26まさかと思うが、red, green, blueに赤青緑を代入してないだろうな。
0284デフォルトの名無しさん
2011/07/28(木) 01:39:28.460285デフォルトの名無しさん
2011/07/28(木) 06:15:50.55red,greenをunsigned intにキャストしてからシフト
0286デフォルトの名無しさん
2011/07/28(木) 16:10:06.95SubjectにObserverを登録したいのですが
登録用メンバ関数
Subject::Attach( boost::shared_ptr<Observer> &src)
にObserver自身のshared_ptrを渡せなくてこまっております。
このような場合どうしたらいいでしょうか
0287デフォルトの名無しさん
2011/07/28(木) 16:47:50.020288デフォルトの名無しさん
2011/07/29(金) 06:43:42.03unsigned char red,green,blue;
unsigned int color =(red<<16)|(green<<8)|blue;
namespace GameLib{
void Framework::update(){
unsigned int* vram = videoMemory();
red=0xff;
color=static_cast<unsigned int>(red);
vram[200*width()+100]=color;}}
>>280なんですが
できなかったんでもう一度確認してもらえますか
0289デフォルトの名無しさん
2011/07/29(金) 07:00:48.08この時に勝手にビットシフトがかかると思ってるのか?
0290デフォルトの名無しさん
2011/07/29(金) 07:28:00.23>red=0xff;
>color=static_cast<unsigned int>(red);
うわ、予想の遥か下を行く低空飛行で壁に激突しとるがなw
0291デフォルトの名無しさん
2011/07/29(金) 10:10:57.98unsigned int color =(static_cast<unsigned int>(red)<<16)|(static_cast<unsigned int>(green)<<8)|static_cast<unsigned int>(blue);
携帯からだからtypoあるかも
0292デフォルトの名無しさん
2011/07/29(金) 10:15:25.74将来、リアクティブプログラミングが可能になれば有り、かも。
0293デフォルトの名無しさん
2011/07/29(金) 12:23:33.58colorが他の変数の参照をキャプチャして遅延評価されるなにかなら最初に考えてたコードで思ったとおりに動いたんだろうけどな。
0295デフォルトの名無しさん
2011/07/29(金) 13:21:15.25#include <iostream>
#include <iomanip>
using namespace std;
int main() {
unsigned char red(0),green(0),blue(0);
#define color static_cast<unsigned int>(((red)<<16)|((green)<<8)|(blue))
red=0xff;
cout << setbase(16) << color << endl;
}
0296デフォルトの名無しさん
2011/07/29(金) 17:40:42.45funcT() { TRUE }
funcF() { FALSE }
この場合、TRUEとFALSEの処理をインライン化させたいなら
普通にfunc(boolean)と呼ぶよりboolean ? funcT() : funcF()とした方が良いですか?
0297デフォルトの名無しさん
2011/07/29(金) 17:43:45.470298デフォルトの名無しさん
2011/07/29(金) 17:46:09.190299デフォルトの名無しさん
2011/07/29(金) 17:47:36.760300デフォルトの名無しさん
2011/07/29(金) 17:51:05.39boolで分けたのは例え話なので、そういうところは考慮してないです
0301デフォルトの名無しさん
2011/07/29(金) 17:52:51.72trueの処理とfalseの処理を他で使いまわすつもりがないなら前者で
0302デフォルトの名無しさん
2011/07/29(金) 21:08:26.66>func(bool b) { if(b) { TRUE } else { FALSE } }
なんでfunc()からfuncT()やfuncT()を呼ばないの?
0303デフォルトの名無しさん
2011/07/29(金) 21:15:27.120304デフォルトの名無しさん
2011/07/29(金) 21:39:11.05処理系依存の強制インライン化キーワードでも使うべきなのでは?
0305デフォルトの名無しさん
2011/07/29(金) 22:52:15.800306デフォルトの名無しさん
2011/07/29(金) 23:09:43.74なぜ、ヘッダーファイルに書かなければならないのでしょうか?
理由を教えてください。
0307デフォルトの名無しさん
2011/07/29(金) 23:35:07.07アラームつき時計つくりたいんだが
textBoxに入れた時間(アラーム時刻)と
現在時刻を合わせるのに苦労してるんだが
textBoxに入れた時刻を数値にフォーマットするにはどうしたらよいものか
0308デフォルトの名無しさん
2011/07/29(金) 23:45:42.37mktime(), strftime()
0309デフォルトの名無しさん
2011/07/30(土) 01:20:28.78別にヘッダファイルに書かなければならないというわけではないが、
とりあえず(厳密な説明ではないが)以下を理解しな。
・templateはインスタンス化してクラス定義や関数定義を生成するためのもの。
・templateをインスタンス化するにはtemplateの定義が必要。
・templateのインスタンス化はコンパイル時に行われる。
・コンパイル時にコンパイラが参照できるのはコンパイル中のソースとそこにincludeされたソースだけ。
そのうえで考えてみな。
複数のソースで利用される汎用的なtemplateの定義はどこに置いてどのように利用するのが自然で使いやすい方法か?
0310デフォルトの名無しさん
2011/07/30(土) 01:30:20.79フジテレビ内部者からの告発
フジテレビは内部で戦っています。
ホリエモン買収対応で、ソフトバンク系SBIに助けてもらったので、朝鮮系グループが
経営側でチカラを出してきましたが、報道部はサンケイ新聞とともに、朝鮮系グループに
喧嘩を売って戦ってます
どうかみなさんの応援で助けて下さい。
朝鮮系グループのしつこさとえげつなさには、正攻法では戦えないです。
テレビ側が言うのはおかしですが、ネットで話を盛り上げて助けて下さい。
盛り上がれば多くの芸能時の人の耳にも入り、さらに話が大きくなると思います。
日本のメディアは瀕死状態です。 助けて下さい。行動を起こして下さい。
応援お願いします。
0311デフォルトの名無しさん
2011/07/30(土) 16:28:26.69>>306です、なんとなく分かった感じthx
0312デフォルトの名無しさん
2011/07/30(土) 16:45:55.76オーバーフローするには何万年とかかかる
みたいな場合でもオーバーフロー検知と対応コードを書くべき?
0313デフォルトの名無しさん
2011/07/30(土) 16:50:33.60「2000年まで使われることはない」という思い込みでY2Kは起きた。
0314デフォルトの名無しさん
2011/07/30(土) 16:53:37.27書かない理由が説明できないなら、書くべき。
説明できるならコメントで添えておくべき。
0315デフォルトの名無しさん
2011/07/30(土) 17:51:15.42出来れば理由もお願いします
0316デフォルトの名無しさん
2011/07/30(土) 17:52:59.06某大学院で「正義とは本質的に何か」って授業やってたのと似てるな
0317デフォルトの名無しさん
2011/07/30(土) 17:55:57.16返り値
そんなこと聞くような奴はそうしといたほうがいい
例外安全というものがあって、その辺を理解せずに適当にぶん投げるとろくなことにならない
0318デフォルトの名無しさん
2011/07/30(土) 18:03:20.38例外安全って言葉知りませんでした。
戻り値にしときます
0319デフォルトの名無しさん
2011/07/30(土) 18:27:15.87ttp://www.youtube.com/fujitv
misuzukaru1982 (1分前)
俺「冷やし韓国ってなんですか」
蛆「特別企画で製作したものです」
俺「あのランキングはなんですか?」
蛆「あれは区切りです。ランキングではございません」
俺「え?思いっきり"人気ナンバーone"って言ってたじゃない ですか!?」
蛆「番組の区切りの数字です。それ以上はお答えできません。」
俺「はあ?明らかにランキングを捏造したものでしょ?」?
蛆「お答えしておりません。」
この一点張り。
そこまで公共の電波使って韓国持ち上げる意味が分からん
冷やし韓国一位
ttp://blog-imgs-34-origin.fc2.com/n/e/w/news020/873487.jpg
順位つけてるのに番組の区切りの数字とかwwそれってフジの番組のランキングは
すべて区切りって認識されてもいいって事だろwバカスww
0320312
2011/07/30(土) 19:16:35.97ということで例外処理書くことにしました。まる
0321デフォルトの名無しさん
2011/07/30(土) 21:39:48.66例外のほうが良いよ。
戻り値は戻り値に使えないと嫌でしょ。
使うときにいちいち分岐書かないといけないし。
0322デフォルトの名無しさん
2011/07/30(土) 21:56:01.99例外安全性を壊さずに例外を使うという発想は無いのか?
0323デフォルトの名無しさん
2011/07/30(土) 23:53:04.81そんな気がして、「例外」を使ってみようかと思いました。
>>322
否定されたから、やめとこうかなと…
調べてみたけど、例外安全ってのを考慮するようなプログラムでもない。
0324デフォルトの名無しさん
2011/07/30(土) 23:54:45.92ゲーム用途でも例外使ってない所が多い。
0325デフォルトの名無しさん
2011/07/31(日) 00:03:56.040326デフォルトの名無しさん
2011/07/31(日) 00:36:14.230327デフォルトの名無しさん
2011/07/31(日) 06:45:25.270328デフォルトの名無しさん
2011/07/31(日) 06:53:40.180329デフォルトの名無しさん
2011/07/31(日) 10:14:24.04重く遅くなるから
組み込みもそうなんじゃね
だが局所的に例外使いたいシーンがでてくる
そんなときはwhileとフラグとマクロで疑似例外
0330デフォルトの名無しさん
2011/07/31(日) 11:45:41.92tryブロック入るのと出る時のオーバーヘッドぐらいじゃねーのか
ループ内じゃなくて外に置けば問題ないとおもうが
0331デフォルトの名無しさん
2011/07/31(日) 11:54:39.62>そこで、ゲームエンジンでの構造化例外処理を完全に無効にすることには強力な論拠がある。
>これはノーティドッグで採用されているもので、エレクトロニック・アーツやミッドウェイで私が従事していた
>ほとんどのプロジェクトでも使った方法である。ゲーム機の限られたメモリや処理能力を考えると、
>ゲーム機で動作するゲームエンジンでは、SEHは決して使うべきではないだろう。
>しかし、パーソナルコンピュータ上で実行されることを想定したゲームエンジンであれば、
>何の問題もなくSEHを使えるかもしれない。
>ゲームエンジン・アーキテクチャ ジェイソン・グレゴリー著
0332デフォルトの名無しさん
2011/07/31(日) 12:06:46.43「誰が言ったか」じゃなくて「なんでそうなるのか」を示さないとなんの説明にもならないよ
そのレスからじゃジェイソンが例外アレルギーってことしかわからないよ
0333デフォルトの名無しさん
2011/07/31(日) 12:17:47.69この後にその論拠となるURLがいくつか紹介されてるんだけど書くのめんどくさくなった。
0334デフォルトの名無しさん
2011/07/31(日) 12:31:12.69using namespace std;
int main()
{
char word[20]="Hello";
cout << &word[0] << endl;
}
word[0]のアドレスを表示しようと上のプログラムを書いたのですが、「Hello」と出力されました。
word[0]のアドレスを表示するためにはどうしたらいいのでしょうか。
0335デフォルトの名無しさん
2011/07/31(日) 12:40:19.850336デフォルトの名無しさん
2011/07/31(日) 12:40:46.540337デフォルトの名無しさん
2011/07/31(日) 12:46:08.93できました。ありがとうございます。
0338デフォルトの名無しさん
2011/07/31(日) 16:51:03.48Windows の SEH と C++ 例外がごっちゃになってるようなのも怪しいな。
0339デフォルトの名無しさん
2011/07/31(日) 17:07:33.39C++ Exception Handling and Performance
http://lazarenko.me/tips-and-tricks/c-exception-handling-and-performance
↓日本語訳
C++ の例外ハンドリングとパフォーマンス
http://zakkas783.tumblr.com/post/3870295160/c
0340デフォルトの名無しさん
2011/07/31(日) 17:36:54.350341デフォルトの名無しさん
2011/07/31(日) 19:11:43.19ちょっと探した感じだと今のところは今年の予定みたいなんだけど。
禿情報
http://www2.research.att.com/~bs/C++0xFAQ.html#when-standard
髭情報
http://herbsutter.com/2011/03/25/we-have-fdis-trip-report-march-2011-c-standards-meeting/
0342デフォルトの名無しさん
2011/07/31(日) 20:17:15.45まあiso.orgには来年2月とかあるからそっちの話かもしれないけど
0343デフォルトの名無しさん
2011/07/31(日) 22:11:47.56it=array|find_name<A*>("test");を
array|find_name("test");にする上手い方法無い?
std::vectorを継承しろは禁止で。
一回作っちまえばvectorを継承するより使いやすそうなので
http://codepad.org/w2fsi44V
0344デフォルトの名無しさん
2011/07/31(日) 23:18:30.70ttp://ideone.com/pCkID
0345デフォルトの名無しさん
2011/08/01(月) 00:05:46.86これでいい
vector以外にも使える
0346デフォルトの名無しさん
2011/08/01(月) 01:25:43.62こういう初期化の仕方するとエラーになるので
int x,y;x=0;y=0;こういった書き方しているんですが
まとめて変数を初期化するやり方教えてください
0347デフォルトの名無しさん
2011/08/01(月) 01:35:01.660348デフォルトの名無しさん
2011/08/01(月) 02:00:55.410349デフォルトの名無しさん
2011/08/01(月) 02:15:08.030350343
2011/08/01(月) 03:26:43.28もうだみだ。よくわからねーーーーー
コンパイル通らないorz
テンプレート死ね
テンプレートの特殊化とかADLとかわけわからん
この場合特殊化でいけると思っていろいろやったがいまいち書き方がよくわからん
0351デフォルトの名無しさん
2011/08/01(月) 07:18:16.480352デフォルトの名無しさん
2011/08/01(月) 07:49:26.45日本語は下手じゃないけど礼の概念が存在しない民族が、よく分からないのに改造するからだろwww
0353デフォルトの名無しさん
2011/08/01(月) 16:39:56.17ttp://codepad.org/ikWh8Kd0
ただのサブルーチンで事足りるのに、わざわざ分かりにくくしているって感じ
0354デフォルトの名無しさん
2011/08/01(月) 18:31:19.00まさしくそれだ。ありがとうございます。
result_ofにこだわりすぎて、混乱してた。
ちなみにC++テンプレートテクニックという本を参考にしてました。
>>352
いやすみません。言い訳させてもらうといろいろ書いてたの消して
眠かったんです。
今さらですが>>344-345レスサンクスです。
0355デフォルトの名無しさん
2011/08/01(月) 18:34:50.96拡張メンバ関数の利点
・一回作れば、再利用しやすいと思う
・何となく見た目がいい。関数に突っ込むよりもメンバー関数として持ちたい。
・タイプが少ない、find_ifとかstd::for_eachとかめんどい
・myvectorをprotected継承やhas std::vectorの設計で作った場合、myvector is not std::vectorなので func(std::vecor) みたいな関数に放り込めないので再利用しにくい
・通常の継承にした場合、使い方次第では解放漏れの恐れがある
std::vectorのデストラクタにvirtual着いてないから
0356デフォルトの名無しさん
2011/08/01(月) 20:27:24.03> ・何となく見た目がいい。関数に突っ込むよりもメンバー関数として持ちたい。
へルパー関数(find_name(array,"test")とか)と比較したときの利点はこれだけだな。
それも
・演算子のどれかを標準的な意味とは異なる意味でオーバーロードするのでぱっと見で誤解と混乱を招く。
という欠点とのトレードオフだ。
0357デフォルトの名無しさん
2011/08/02(火) 01:17:45.79dynamic_castが使えない型にはstatic_castを実行したいのですが、
判別方法が分からず困っています。
やりたい事は↓みたいな事です。
template <bool> void* foo() { return dynamic_cast<void*>(p); }
template <> void* foo<false>() { return static_cast<void*>(p); }
template <typename T>
void* bar(T* p)
{
return foo<IsPolymorphic::RESULT>(p);
}
0358デフォルトの名無しさん
2011/08/02(火) 01:35:20.230359デフォルトの名無しさん
2011/08/02(火) 01:46:41.95Boostか0xのis_polymorphic
0360デフォルトの名無しさん
2011/08/02(火) 02:04:47.56そのものずばりなクラスがあったのですね。
全く気がつきませんでした。ありがとうございました。
0361デフォルトの名無しさん
2011/08/03(水) 10:42:00.010362デフォルトの名無しさん
2011/08/03(水) 11:04:58.860363デフォルトの名無しさん
2011/08/03(水) 11:41:41.20自分でやれば節約になる。
0364デフォルトの名無しさん
2011/08/03(水) 12:40:03.620365デフォルトの名無しさん
2011/08/03(水) 12:49:20.830366デフォルトの名無しさん
2011/08/03(水) 12:56:26.850367デフォルトの名無しさん
2011/08/03(水) 13:09:54.25何もかんでも一から説明するほど行数はないのでな。
0368デフォルトの名無しさん
2011/08/03(水) 13:16:15.730369デフォルトの名無しさん
2011/08/03(水) 13:19:30.70いや……そもそも>>363を語りだしたのはなんでだ?w
0370デフォルトの名無しさん
2011/08/03(水) 13:21:49.420371デフォルトの名無しさん
2011/08/03(水) 16:25:45.77まあ一生そういった書物には縁の無い人たちでしょうが・・・(笑
0372デフォルトの名無しさん
2011/08/03(水) 20:28:51.150373デフォルトの名無しさん
2011/08/04(木) 00:54:02.60誤爆かどうかは別にしても、意味が分からんのだが。
メモリー管理を自分でやることによって節約になるっていうのは、どういう状況なの?
何が節約できるの?
0374デフォルトの名無しさん
2011/08/04(木) 02:30:31.62>>363はたまにC++関連スレに出てくるアンチRAIIの人じゃないかと思える
リソース管理クラスに任せっきりだと不要になったリソースをブロックを抜けるまで無駄に保持し続けるけど
自分で不要になった時点ですぐ解放するように管理すればそういう無駄が出ないってことじゃないだろうか
0375デフォルトの名無しさん
2011/08/04(木) 02:34:42.26A1. >>365:メモリーの盗用と借用の違いだよ。
Q2. >>369:いや……そもそも>>363を語りだしたのはなんでだ?w
A2.
0376デフォルトの名無しさん
2011/08/04(木) 10:15:20.25RAIIは解放忘れに対しては安全かもしれないけど自由度が低いのが問題
いつも同じ解放の仕方をしたいとは限らないからクラスに解放処理を埋め込むのは良くない
0377デフォルトの名無しさん
2011/08/04(木) 10:22:54.530378デフォルトの名無しさん
2011/08/04(木) 10:26:26.11普通に作業してりゃ例を挙げるまでもなく随所で見ることができる問題だろ
むしろRAIIで全て完全に無駄なコストなくスマートに解決できたプロジェクトなんてものがあるなら教えてくれ
0379デフォルトの名無しさん
2011/08/04(木) 10:29:00.81それで問題が出たことなんてないんだけど
問題出ないようにそうしてるんだし
0380デフォルトの名無しさん
2011/08/04(木) 10:35:31.68これらをオブジェクト単位、あるいは文脈ごとに
切り替えたいまたは新しい処理を追加したい
って要求はどうやって解決してんの?
0381デフォルトの名無しさん
2011/08/04(木) 10:36:06.20ごめんわかんない。
とりあえず一個でもいいから、例を見せて。
0382デフォルトの名無しさん
2011/08/04(木) 11:03:25.71アメリカ人の無能さを前提に考えているからであって手先の器用な日本人にはあわない。
日本の狭い道路をでアメ車に乗って走るようなもの。
翻訳本にばっか頼ってるからこういう間違った考え方がひろがるんだよ。
0383デフォルトの名無しさん
2011/08/04(木) 11:06:04.740384デフォルトの名無しさん
2011/08/04(木) 11:17:00.010385デフォルトの名無しさん
2011/08/04(木) 11:26:10.21ぱねぇwwwwwwww
0386デフォルトの名無しさん
2011/08/04(木) 11:26:23.030387デフォルトの名無しさん
2011/08/04(木) 11:38:49.700388デフォルトの名無しさん
2011/08/04(木) 11:44:08.38大雑把で適当なアメリカ人にはどうしても必要なものであるが
繊細で見えない所まで拘りを持つ日本人には逆に厄介なものになる。
0389デフォルトの名無しさん
2011/08/04(木) 11:48:12.220390デフォルトの名無しさん
2011/08/04(木) 11:49:09.880391デフォルトの名無しさん
2011/08/04(木) 11:49:44.230392デフォルトの名無しさん
2011/08/04(木) 11:51:13.570393デフォルトの名無しさん
2011/08/04(木) 11:52:57.87オブジェクト指向は不必要と入ってないよ。
オブジェクト指向に踊らされるのはよくないといってるの。
0394デフォルトの名無しさん
2011/08/04(木) 11:57:03.39揉み潰すのは苦肉の策って感じでスマートじゃないし
放置なんてしたら即解雇、リトライループにはまったらユーザーを怒らせるだけ
RAIIは永遠にこの問題を解決することができない
だからリソースは安全なポイントでまとめて手動で返すのが常道
0395デフォルトの名無しさん
2011/08/04(木) 11:59:06.520396デフォルトの名無しさん
2011/08/04(木) 12:00:33.740397デフォルトの名無しさん
2011/08/04(木) 12:00:55.53失敗しないならデストラクタで解放する
これだけのことじゃないのか
0398デフォルトの名無しさん
2011/08/04(木) 12:02:14.50オブジェクトごとにRAIIobj持たせようとしたらテンプレートか動的削除子になるが
いつも要るわけじゃない機能にコストを払うぐらいならマネージャで管理させたほうがいい
0399デフォルトの名無しさん
2011/08/04(木) 12:04:59.80破棄処理でエラーの出る困ったリソースについては、デストラクタじゃなくて
明示的な破棄処理を提供すればいい。
そういうケースがあるとしても、それとは別に RAII が問題なく適用できる場面が
多くあるのだから、全部ひっくるめて「間違っている」とか「良くない」とかいう話に
するのはおかしい。
0400デフォルトの名無しさん
2011/08/04(木) 12:10:04.18特殊な用途を持ち出しても RAII 一般を批判する根拠にはならないよ。
0401デフォルトの名無しさん
2011/08/04(木) 12:13:39.31日本人でA型で長男にはRAIIは必要ない。
日本人でB型で次男には特に必要。
0402デフォルトの名無しさん
2011/08/04(木) 12:14:59.40お前はもういいよ
0403デフォルトの名無しさん
2011/08/04(木) 12:18:13.02使うべきところで使って使うべきでないところでは使わない以上の議論は無駄
そういう意味でRAII全否定とか99%RAIIですがなにか(キリッ)みたいな偏った人はちょっと頭固すぎだなと思う
0404デフォルトの名無しさん
2011/08/04(木) 12:18:38.530405デフォルトの名無しさん
2011/08/04(木) 12:19:28.570406デフォルトの名無しさん
2011/08/04(木) 12:19:48.56それはRAIIの問題ではなくリソースの性質から来る問題なので
RAIIを使わなくても問題になるしRAIIを使わなければ自動的に解決されるわけでもない。
0407デフォルトの名無しさん
2011/08/04(木) 12:24:31.72テクニックなんだから向かない場面で使わないのは当たり前
0408デフォルトの名無しさん
2011/08/04(木) 12:25:07.65もう言っても仕方ないことだけど
0409デフォルトの名無しさん
2011/08/04(木) 12:25:34.700410デフォルトの名無しさん
2011/08/04(木) 12:29:29.21リソースを取得するメンバ関数を追加するのはダメだけどな。少なくともRAIIではなくなる
0411デフォルトの名無しさん
2011/08/04(木) 12:30:47.15>>398
0412デフォルトの名無しさん
2011/08/04(木) 12:35:58.34>>400
0413デフォルトの名無しさん
2011/08/04(木) 12:40:38.60ただのシーケンスでしかないのに。
無理なもんはどう書こうが無理なのに。
0414デフォルトの名無しさん
2011/08/04(木) 12:41:07.290415デフォルトの名無しさん
2011/08/04(木) 12:46:19.17ループ中はもうそのクラス使えないなwww使ったら遅すぎて苦情が来るぞ
0416デフォルトの名無しさん
2011/08/04(木) 12:47:41.600417デフォルトの名無しさん
2011/08/04(木) 12:48:34.750418デフォルトの名無しさん
2011/08/04(木) 12:49:19.51そんなことを言う奴は、デストラクタが例外を投げる型に対応した
uninitialized_copy() を設計・実装するの刑に処す。
0419デフォルトの名無しさん
2011/08/04(木) 13:02:48.44windowsでmutexの取得/解放に使ったことがある
>>415
ループの中で構築する必要があるならRAIIを使うか使わないかに関わらず構築コストはかかるでしょ
ループの中で構築する必要がないならRAIIの使用に関わらずループの外で構築すればいい。構築済のオブジェクトを使う分にはどちらも変わらないよ
0420デフォルトの名無しさん
2011/08/04(木) 13:07:03.05特定の処理前にどれだけのオブジェクトが必要かわかるならいいけどね
処理中に必要な数計算して動的に生成しなきゃだめなケースとか日常茶飯事だろ
それともそういうケースが絶対に存在しないものとして無視したクラス設計にするわけ?
0421デフォルトの名無しさん
2011/08/04(木) 13:08:33.890422デフォルトの名無しさん
2011/08/04(木) 13:15:09.61つまり前者ね
0423デフォルトの名無しさん
2011/08/04(木) 13:16:04.880424デフォルトの名無しさん
2011/08/04(木) 13:24:22.42RAII を使うと「処理中に必要な数計算して動的に生成しなきゃだめなケース」で困るってこと?
さっぱり状況が見えてこないんだが。
0425デフォルトの名無しさん
2011/08/04(木) 13:35:49.38まともなことひとつも言ってないし
0426デフォルトの名無しさん
2011/08/04(木) 15:58:08.80バカのための安全装置としてはシンプルで効果も見込める点で優秀
0427デフォルトの名無しさん
2011/08/04(木) 16:07:03.860428デフォルトの名無しさん
2011/08/04(木) 16:08:18.040429デフォルトの名無しさん
2011/08/04(木) 16:14:37.30返り値も無いし例外も投げれないから、グローバルなエラーログみたいなスマートじゃない方法で調べなければならない
0430デフォルトの名無しさん
2011/08/04(木) 16:30:30.66勉強になりました
0431デフォルトの名無しさん
2011/08/04(木) 19:22:12.290432デフォルトの名無しさん
2011/08/04(木) 19:27:04.08スマートな = 1行で
ってこと?
0433デフォルトの名無しさん
2011/08/04(木) 19:27:45.300434デフォルトの名無しさん
2011/08/04(木) 19:31:22.08>>432
1行でなくても全然OK です
algorithm や for_each とかcopy を使った方法を教えてください
兎に角for やwhile を使わない方法であればcool です
0435デフォルトの名無しさん
2011/08/04(木) 19:38:23.37関数オブジェクトでやる方法が知りたいです
0436デフォルトの名無しさん
2011/08/04(木) 19:59:02.90各要素のfirstはどうするの?
0437デフォルトの名無しさん
2011/08/04(木) 20:03:28.341行でcoolに出来てるだろ
0438デフォルトの名無しさん
2011/08/04(木) 20:17:32.75それってboost ですよね?boostは別にかまわないんですけど、関数オブジェクト勉強したくて
聞きたかったんです。
>>436そのとおりです
あらかじめmapコンテナにデータは入っていて、secondのデータを入れ替えたいのです
0439デフォルトの名無しさん
2011/08/04(木) 21:35:18.78boostを使うということは>>434の理に適うと思うのだけど
STLでなければならないなら始めからそう言えばいいのに
0440デフォルトの名無しさん
2011/08/04(木) 21:50:48.34すんません
0441デフォルトの名無しさん
2011/08/04(木) 21:58:17.33使うところだけを見ればきっとcoolだよ
0442デフォルトの名無しさん
2011/08/05(金) 01:33:23.030443デフォルトの名無しさん
2011/08/05(金) 01:40:04.64unsigned short b:2;
で、これはただ単に2ビットだけの数値として扱っていることは理解したのですが、
この2ビットだけの数値で配列を作ることは可能でしょうか?
0444デフォルトの名無しさん
2011/08/05(金) 01:44:52.610445デフォルトの名無しさん
2011/08/05(金) 02:02:28.250446デフォルトの名無しさん
2011/08/05(金) 03:15:51.77できた。
struct _2bits { unsigned int b:2; };
_2bits array[10];
0447デフォルトの名無しさん
2011/08/05(金) 07:15:26.300448デフォルトの名無しさん
2011/08/05(金) 20:32:13.96コンストラクタ内でデストラクタを呼び出してインスタンスを破棄する、ってアリ?
0449デフォルトの名無しさん
2011/08/05(金) 20:33:23.13例外出せよ
0450デフォルトの名無しさん
2011/08/06(土) 02:33:33.29Foo::Foo( int arg ) { // コンストラクタ
int* p = new int [100]; // ← もし直接newで確保した場合、これは片付ける必要がある
if (arg == invalid) {
delete [] p; // 解放してから
throw std::invalid_argument("blah blah"); // 例外を投げる
}
...
}
生newではなくてコンテナやスマポを使えば例外スタック巻き戻しで解放してくれる
0451デフォルトの名無しさん
2011/08/06(土) 02:40:12.46More C++ Idioms/生成の追跡(Construction Tracker)
http://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E7%94%9F%E6%88%90%E3%81%AE%E8%BF%BD%E8%B7%A1(Construction_Tracker)
0452デフォルトの名無しさん
2011/08/06(土) 02:41:59.44キーモーイ
生ポが許されるのは小学生までだよね
きゃははは
Foo::Foo(int arg)
try : p() {
this->p = new int[arg];
}
catch(...) {
delete this->p; // 漢ならfunction try-catchで後始末だぜ
}
0453デフォルトの名無しさん
2011/08/06(土) 02:51:47.82Foo::Foo(int arg, int *dummy=NULL)
try : p() {
dummy = new int[arg];
this->p = dummy;
}
catch(...) {
delete dummy;
}
0454デフォルトの名無しさん
2011/08/06(土) 03:26:32.3115.3 p10
"Referring to any non-static member or base class of an object in the handler for a
function-try-block of a constructor or destructor for that object results in undefined behavior."
0455デフォルトの名無しさん
2011/08/06(土) 07:33:50.430456デフォルトの名無しさん
2011/08/06(土) 11:26:43.690457デフォルトの名無しさん
2011/08/06(土) 11:28:49.36動的配列を戻り値で返したい場合はどうしますか?
0458デフォルトの名無しさん
2011/08/06(土) 14:27:43.690459デフォルトの名無しさん
2011/08/06(土) 15:50:57.860460デフォルトの名無しさん
2011/08/06(土) 18:44:06.44あるじゃないですか。1998年規格にauto_ptrがあってそれの配列版が
無いというのは、どういう設計なんだろと思いまして。
0461デフォルトの名無しさん
2011/08/06(土) 18:48:53.46おおぅ
ダメか・・・
0462デフォルトの名無しさん
2011/08/06(土) 18:51:11.930463デフォルトの名無しさん
2011/08/06(土) 19:06:43.89ttp://ideone.com/heeR5
0464デフォルトの名無しさん
2011/08/06(土) 19:11:31.050465デフォルトの名無しさん
2011/08/06(土) 19:13:03.940466デフォルトの名無しさん
2011/08/06(土) 19:13:31.640467デフォルトの名無しさん
2011/08/06(土) 19:13:45.95newしたメモリは解放されます
0468デフォルトの名無しさん
2011/08/06(土) 19:13:53.61しないよ
0469デフォルトの名無しさん
2011/08/06(土) 19:30:18.78なるほど、ややこしいな。
ありがとう
0470デフォルトの名無しさん
2011/08/06(土) 19:50:51.82関数の引数を参照にして値をいれるオブジェクトを渡せばいい。
Cのころから(そのころはポインタやポインタへのポインタを引数にしてたけど)あるデザインだ。
(あくまでも返却値で返さなければならないならそれこそどういう設計なんだろ、だ)
0471デフォルトの名無しさん
2011/08/06(土) 21:27:47.51>返却値で返さなければならないならそれこそどういう設計なんだ
なんかの一覧を作成して返すってのは、普通じゃないの。
vectorの入れ物だけ渡してそこに値が詰められるって方がcrazyだとおもうけど
0472デフォルトの名無しさん
2011/08/06(土) 21:43:42.630473デフォルトの名無しさん
2011/08/06(土) 21:43:54.060474デフォルトの名無しさん
2011/08/06(土) 21:54:02.68メイン関数を抜けた時点でdeleteが呼ばれるんですよね?
なのにデストラクタは呼ばれないのですか?
0475デフォルトの名無しさん
2011/08/06(土) 21:55:08.52C の流儀から抜けたから何だっつの
0476デフォルトの名無しさん
2011/08/06(土) 23:28:44.91> >>470 がCの流儀から抜けられないだけだろ。
iteratorを受け取る関数にiteratorかinserterを渡してコンテナに値を詰めてもらえ。
こういうiteratorを受けてその参照先に代入していく関数はC++でよくあるデザインだが
これはCのmemsetやmemcpy等のデザインと本質的に同じものだ。
0477デフォルトの名無しさん
2011/08/06(土) 23:32:04.830478デフォルトの名無しさん
2011/08/07(日) 00:03:38.65ならオマエは文字値取得も↓こうやってるんだな?
void get_config(const string &key, back_insert_iterator<string> &item);
//設定値取得
string s;
get_config("item1", back_inserter(s));
s.clear();
get_config("item2", back_inserter(s));
0479デフォルトの名無しさん
2011/08/07(日) 00:10:04.56>これはCのmemsetやmemcpy等のデザインと本質的に同じものだ。
auto_ptrの所有の概念でそのCから脱却したのに、
配列だけどうして標準クラスで簡単にできないのかという質問だろ。
参照を渡せとかinserter使えとかmove用作れとかは答えになってない。
標準委員会がお疲れだったんじゃね
0480デフォルトの名無しさん
2011/08/07(日) 00:10:40.510481デフォルトの名無しさん
2011/08/07(日) 00:17:34.63vectorじゃauto_ptrの代わりにならないのに
0482デフォルトの名無しさん
2011/08/07(日) 00:18:46.190483デフォルトの名無しさん
2011/08/07(日) 00:31:22.560484デフォルトの名無しさん
2011/08/07(日) 00:32:46.750485デフォルトの名無しさん
2011/08/07(日) 00:46:00.30流れ読まないで噛み付いてるから意味の通らない突っ込みになってないか。
その例で順序いらない・重複したら新しい設定で上書きならコンテナ決め打ちで
void get_config(map<string,string>& config, string const & rawtext);
でいいだろ。
順序いる・重複許可なら
template<class T> void get_config(T iter, string const & rawtext);
vector< pair<string,string> > v;
get_config(back_inserter(v), raw);
とかな。
0486デフォルトの名無しさん
2011/08/07(日) 01:09:47.67mapは関係ないんじゃ。一件の文字列値取得でしょ。Cでいう get_config(const char key[], char buf[], size_t buf_size); に対応するものが
>>476説では get_config(const string &key, back_insert_iterator<string> &buf) になるんだよね。
>>478はstringを例に配列も値として返したいと言っているんだろ。僕だったら string get_confg(strint const &key) にするね。
0487デフォルトの名無しさん
2011/08/07(日) 01:16:10.56解雇
0488デフォルトの名無しさん
2011/08/07(日) 01:23:13.15mjdsk!? じゃあ関数の戻り値に使えないね(´・ω・`)
0489デフォルトの名無しさん
2011/08/07(日) 01:38:54.60> 関数の引数を参照にして値をいれるオブジェクトを渡せばいい。
に対する>>471,472の突っ込みに対する反論だろ。
その流れを>>478が理解せず>>476がオブジェクト本体の参照を渡すことはするなって言ってると思って突っ込んだのがずれてる。
0490デフォルトの名無しさん
2011/08/07(日) 01:52:18.52pairにでも一緒に突っ込めよ
0491478
2011/08/07(日) 03:48:27.28理解してないのはアンタじゃないの?
>>460 配列データを戻り値として返したい
>>470 戻り値は設計ミス。ポインタのポインタ(orポインタの参照)を使え。
>>471 データ取得なのだから戻り値で欲しい。受け取りvector(の参照)を渡すのは嫌だ
>>476 入れ物のinserterを渡せ
>>478 では、char配列の文字列が欲しい時も、受け取るためのinserterを渡すんだな
>>478(=俺)は「受け取りのための変数を渡すのが汚い」と言ってる。
vector本体の参照でもinserterでも同じこと。
ちなみに>>470は 用意したメモリに書き込むことを目的としたmemcpy/memsetの例を、
データを戻り値として欲しいという>>460の話に持ってくるのは変だと思う。
0492デフォルトの名無しさん
2011/08/07(日) 03:57:55.62汚いな。
0xのmove使わなきゃ簡単にできないんだね(´・ω・`)
0493デフォルトの名無しさん
2011/08/07(日) 04:23:10.62>頻繁に動的にクラスインスタンスが生成破棄される
という場合、生成用の関数を用意してshared_ptrで管理するのか、
それとも管理用のインスタンスpoolを作って、そいつに管理させてIdで間接的に管理するのか、
どっちが良いのか迷ってます。
ケースバイケースかと思うのですが、
判断の基準になるようなものってありますか?
0494デフォルトの名無しさん
2011/08/07(日) 10:02:43.29いちおう判断基準になりそうなのはこのくらいかな?
・同時に存在するインスタンスの数:多い-まとめて管理、少ない-個別に管理
・時間当たりに生成・破棄されるインスタンスの数:多い-まとめて管理、少ない-個別に管理
・個々のインスタンスの使用範囲:プログラム全体-まとめて管理、生成した関数の内側だけ-個別に管理
・インスタンス群全体に対する操作(条件にあうインスタンスの検索とか):行う-まとめて管理、行わない-個別に管理
0495デフォルトの名無しさん
2011/08/07(日) 13:35:13.80え?
自分で書いてるとおり、個別のインスタンスへの参照を保持したいときは
shared_ptrで、IDで管理したいときはpoolじゃないか。
後から取得するときにshareするものを探したいならpoolが必要でしょ。
shared_ptr管理はshared_ptr所有側がインスタンスを管理する。
あなたの言うpoolはpoolが最終的にメモリを破棄する。好きにすれば
0496デフォルトの名無しさん
2011/08/07(日) 15:41:35.73ボトルネックでshared_ptrは最初から選択肢として無いわこれクソ遅いスマポとして有名だから
だからプールにするか、あるいはアロケータをカスタムする方が柔軟で無駄もなく将来性がある
0497デフォルトの名無しさん
2011/08/07(日) 18:15:36.14まず何を心配しているのか明らかにするべき。
対象が実行時間効率なのか空間効率なのかすらわからないようじゃ話にならない。
そしてターゲットがわかったらとりあえず素直なコードで書いて、対象について実測するべき。
実測もせずになんとなくで pool とか用意するのはよくない。
0498デフォルトの名無しさん
2011/08/08(月) 00:30:13.31>>頻繁に動的にクラスインスタンスが生成破棄される
にたいして、どうして
>という場合、生成用の関数を用意してshared_ptrで管理するのか、
なんだ?
頻繁に生成とshare/poolは関係なかろう
0499493
2011/08/08(月) 01:18:55.20一番気にしているのはコードの可読性で、
規模が大きくなったり、複数人で開発をするときの秩序を求めてます。
linux,android,iphone,windows で利用される可能性があります。
品質が上がるなら、速度はよほどの事が無い限り犠牲にしても構いません。
shared_ptr() を用いる方法(インスタンスを利用コード側で管理する方法)は、
その場しのぎでさっさと解決するには良かったのですが、
長期的に見るとインスタンス生成破棄タイミングが散らばって、
バグを生みやすいかなぁと漠然と感じまして…。
pool形式なら、メモリ再利用もできるなぁなどと、色々思いを馳せておりました。
速度面でもpool方式の方が良さそうですね、こちらの方針で行ってみようと思います。
ありがとうございました!
0500デフォルトの名無しさん
2011/08/08(月) 01:19:51.270502デフォルトの名無しさん
2011/08/08(月) 01:59:27.370503デフォルトの名無しさん
2011/08/08(月) 07:25:45.74>一番気にしているのはコードの可読性で
んなこたー>>497以外わかってる
0504デフォルトの名無しさん
2011/08/09(火) 11:03:02.20virtual ~Hoge() {}
2. 純粋仮想デストラクタ
virtual ~Hoge() = NULL;
...
Hoge::~Hoge() {}
この2つの違いって何?
メリットとデメリットを教えて欲しい
0505デフォルトの名無しさん
2011/08/09(火) 11:11:06.24まず、純粋仮想関数の定義に NULL が使えるとは限らない。ふつうに 0 が正しい。
わざわざ記述量の多い後者を使ってこんな間違いを仕込むぐらいなら前者のほうがいい。
実質違わないと思うけど、後者だと派生クラスで明示的なデストラクタを書かないと
いけないと思う人が増えそう。
0506デフォルトの名無しさん
2011/08/09(火) 11:17:59.471が「行き先はあるけど(一度コールするけど)何もしないで戻る」で、
2が「そもそも行き先が無い」 じゃね?
&(Foo::Hoge) で取り出した時、それが null かそうでないか
0507デフォルトの名無しさん
2011/08/09(火) 12:04:58.111だと,Hogeに他に純粋仮想関数が無い場合には具象クラスになる.
0508デフォルトの名無しさん
2011/08/09(火) 12:12:42.74他に純粋仮想関数が存在しない場合に使うことがあると書いてるようですね。
ヘッダから見ると virtual ... = 0; となっているから抽象クラスなのか。
http://www.gotw.ca/gotw/031.htm
0509デフォルトの名無しさん
2011/08/09(火) 12:32:37.80abstract という手段にしがみつくのは本末転倒だろ
そーゆーことを考えるやつの頭の中が何教か、おおかた見当がつく
0510デフォルトの名無しさん
2011/08/09(火) 12:42:29.65あまり良い考え方でない。 理由のバリエーションを想像するべき
0511デフォルトの名無しさん
2011/08/09(火) 13:05:05.69俺がその理由で純粋仮想デストラクタを作るのはデストラクタ以外のメンバが存在しないときだけだな
ほかの全ての実装が提供されてるのにデストラクタだけは派生の実装が必要になるという状況が想像できない
0512デフォルトの名無しさん
2011/08/09(火) 13:08:54.93もう自分の技量よりもネット上で戦う事しか考えてないよね。 頭おかしくなってる
0513デフォルトの名無しさん
2011/08/10(水) 01:59:58.240514デフォルトの名無しさん
2011/08/10(水) 04:11:18.75どう、ねーのか書いてくれよ
0515デフォルトの名無しさん
2011/08/10(水) 04:50:21.54デストラクタへのポインタは取れないし、純粋仮想関数へのポインタがヌルになるわけでも
ねーよ
0516デフォルトの名無しさん
2011/08/10(水) 07:42:21.54>>505
> まず、純粋仮想関数の定義に NULL が使えるとは限らない。ふつうに 0 が正しい。
単純に記述ミスしていた。指摘あり
0517デフォルトの名無しさん
2011/08/10(水) 11:39:18.43513じゃないけど
純粋かそうでないかは単に「派生によってオーバーロードする必要があるかないか」でしかないよ
その理由によってメンバポインタが0になるってことはないし
純粋仮想関数は定義を持つこともできる。もちろん呼び出すこともできる
0518デフォルトの名無しさん
2011/08/10(水) 19:13:52.77その違いは一応把握しているが、それぞれの記述が抽象・具象であることを示すための手段であるのかどうかが気になる
インスタンスを作成させないことが目的であれば、protected コンストラクタを宣言する方法が一般的だし、
それだけの違いであれば、記述が面倒な2番は不要かなと
ん?2番は空処理「{}」にしてあるが、何か処理を入れたらどうなるんだ?どのタイミングで実行されるんだ?
まさか速度やサイズに影響したりしないよな
0519デフォルトの名無しさん
2011/08/10(水) 22:02:53.541>device.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall CString::~CString(void)" (??1CString@@QAE@XZ) が関数 __unwindfunclet$??0CDevice@@QAE@XZ$0 で参照されました。
このエラーはCStringが宣言されていないよ、と言われている解釈していいのでしょうか?
0520デフォルトの名無しさん
2011/08/10(水) 22:06:25.240521デフォルトの名無しさん
2011/08/10(水) 22:07:35.850522デフォルトの名無しさん
2011/08/10(水) 22:11:05.910523519
2011/08/10(水) 22:34:35.82うーん、CStringクラスは標準インクルードにあるはずだから
コンパイルしたものがないか、何か別の要因ということですかね・・・
0524デフォルトの名無しさん
2011/08/10(水) 22:40:46.090525デフォルトの名無しさん
2011/08/10(水) 23:07:24.31>うーん、CStringクラスは標準インクルードにあるはずだから
ちゃんと、ある事を確かめた?
0526デフォルトの名無しさん
2011/08/10(水) 23:32:34.76「はず」と書いてしまいましたが定義を遡るとCStringクラスははいっていました
0527デフォルトの名無しさん
2011/08/10(水) 23:53:52.520528デフォルトの名無しさん
2011/08/11(木) 03:34:17.81未だnewの使いどころわからず
0529デフォルトの名無しさん
2011/08/11(木) 03:46:38.16delete = free()
と思ってほぼ間違いなし。
0530デフォルトの名無しさん
2011/08/11(木) 03:51:11.30デストラクタ 「…」
0531デフォルトの名無しさん
2011/08/11(木) 03:53:02.52newが分からないというより、
メモリの動的割り当てのメリットがわからないってカンジ?
0532デフォルトの名無しさん
2011/08/11(木) 03:56:13.34単純で小さいプログラムを書く必要しか生じてないってことだし
0533デフォルトの名無しさん
2011/08/11(木) 07:18:20.34純粋仮想はオーバーライドさせるための手段でしかない
純粋仮想デストラクタは純粋じゃない仮想デストラクタが実行されるのと同じように実行されるよ
だから純粋仮想であっても定義は必要
0534デフォルトの名無しさん
2011/08/11(木) 09:31:33.74コンストラクタをprotectedにしてもインスタンスを作れなくなるわけじゃない.
単に作れる相手を制限するだけ.
例えば,純粋仮想関数f()を持つクラスを作ったけど
あとからf()を純粋仮想じゃなくする変更をしたときにそのクラスがうっかり
具象クラスになってしまった なんてことが起きると嫌だから
個人的には抽象クラスなら必ず2で書く.
デストラクタに=0を付けることで
「僕はこのクラスは絶対に抽象クラスにしたいんだー」という強い意志を表明する.
0535デフォルトの名無しさん
2011/08/12(金) 00:48:38.33これって可能ですか?
0536デフォルトの名無しさん
2011/08/12(金) 01:03:39.20ttp://codepad.org/qZwyTv6o
0537デフォルトの名無しさん
2011/08/12(金) 01:09:05.21代入と初期化をごっちゃにしてるといつか酷い目に遭いますぞ。
0538デフォルトの名無しさん
2011/08/12(金) 07:25:16.78抽象クラスは純粋仮想デストラクタを宣言定義すべきなんだな
そして、必要であればそのデストラクタにメンバ変数の始末処理を書く、と
勉強になった
0539デフォルトの名無しさん
2011/08/12(金) 10:10:48.13C++0x では
unordered_set
unordered_multiset
unordered_map
unordered_multimap
これらのハッシュコンテナが追加されましたが、<key, value>
value を基準にソートでききるような使い方ができる、コンテナがあれば教えてください。
0540デフォルトの名無しさん
2011/08/12(金) 11:12:58.48↑の問題を今やっているんですけど入力の終わりってどうやって判断するんですか?
0541デフォルトの名無しさん
2011/08/12(金) 11:59:13.84std::set<value>
とか
std::map<value,key>
とか
std::vector<value>
とか
std::list<value>
とかじゃね?w
0542デフォルトの名無しさん
2011/08/12(金) 12:15:39.86std::map<value,key> これって、key とvalue を入れ替えて使ってことですね
0543デフォルトの名無しさん
2011/08/12(金) 12:17:31.94#include <iostream>
int main()
{
int a, b;
while (std::cin >> a >> b) {
// 何か処理
}
}
0544デフォルトの名無しさん
2011/08/12(金) 13:47:04.87言いたいことはもっと厳密に定義しろ
0545デフォルトの名無しさん
2011/08/12(金) 15:43:16.141.ワイド文字やマルチバイト文字の具体的なエンコードの指定はどうするのか
2. ソースコード自体の文字コードは何か関係あるのか
3.vc++の文字セットをunicodeにしているのにchar配列に日本語をいれておいても文字化けせずに表示できるのはなぜか
根本的な理解がないのかもしれません。誰か教えてください。
0546デフォルトの名無しさん
2011/08/12(金) 18:06:33.38でもプログラムを進めるとしてsize自体は変わらないのでしょうか?
forでsize分回したとしても普通に問題はないのでしょうか?
気になったので教えてください。
0547デフォルトの名無しさん
2011/08/12(金) 18:13:09.42とりあえず一般的な基本。
プログラム作成過程ではそれぞれ異なるかもしれない
・ソースファイルの記述に使う文字集合・符号化方式(各ソースごとでも異なるかもしれない)
・コンパイラが内部で使う文字集合・符号化方式
・実行ファイルで使う文字集合・符号化方式(一つの実行ファイル内でも複数が使われるかもしれない)
が使われていてそれらを問題なく扱うには
・全ての文字集合・符号化方式を統一しておくか
・必要に応じて適切(かつその環境で実際に変換可能)な変換を行う・変換を行うように指定する
必要がある。
0548デフォルトの名無しさん
2011/08/12(金) 18:16:39.58> 1.ワイド文字やマルチバイト文字の具体的なエンコードの指定はどうするのか
どの段階・どういう意味でのエンコード指定かわからないが環境や段階に応じて
・事前に適切にエンコードしたものを用意
・コンパイルオプションで指定
・ソースの記述で指定
> 2. ソースコード自体の文字コードは何か関係あるのか
X->Yのただ一つの変換しか出来ないのに頼むならともかく
B->Aの変換もC->Aの変換もB->Cの変換もできるのに頼むなら、これはBですB->Aの変換をしてください、と頼まないと正しく変換できないだろ。
つまり状況によっては関係ある。
0549デフォルトの名無しさん
2011/08/12(金) 19:12:40.671.VCはwchar_tがUTF-16固定。マルチバイトはSJIS固定
2.無い。VCはSJISで書こうがUTF-8で書こうが同じバイナリーになる
3.VCはprintfがロケールに従いUTF-16をSJISに変換する
0550デフォルトの名無しさん
2011/08/12(金) 19:15:17.49それはUnixの話。VCは違う。「一般的」なんて嘘つくな
0551デフォルトの名無しさん
2011/08/12(金) 19:53:43.13は?
0552デフォルトの名無しさん
2011/08/12(金) 20:19:03.930553デフォルトの名無しさん
2011/08/12(金) 20:41:06.30「は?」じゃねえよ。意味の無い書き込みしやがって。
ソースの文字コードが何であろうとコンパイラがUTF-16に変換するんだから
ソースも統一しろなんてデマ流すな
0554デフォルトの名無しさん
2011/08/12(金) 21:01:43.68ありがとう
0555デフォルトの名無しさん
2011/08/12(金) 21:41:41.11ありがとう
0556デフォルトの名無しさん
2011/08/12(金) 21:42:22.350557デフォルトの名無しさん
2011/08/12(金) 21:47:42.62win/xbox360の開発なら困らないけど
macやlinux、スマフォ、ゲーム機、組み込み機 etcだと困るからそっちの挙動を一般的っつってんじゃないの
0558デフォルトの名無しさん
2011/08/12(金) 21:52:03.970559デフォルトの名無しさん
2011/08/13(土) 00:32:19.420560デフォルトの名無しさん
2011/08/13(土) 00:36:30.85Mac,Linuxを考えたら「UTF-8に統一しろ」ってアドバイスするのが適切だろ。
今時20世紀のようなJIS/EUC/SJIS混在の頭でいるジジイは引退した方がいい
0561デフォルトの名無しさん
2011/08/13(土) 00:55:25.52>if an exception is thrown by an insert() function while inserting a single element, that function has no effects.
>if an exception is thrown by a push_back() or push_front() function, that function has no effects.
0562デフォルトの名無しさん
2011/08/13(土) 05:05:12.54UTF-8BOM統一の方がいいだろgccも新しいのは通る
0563デフォルトの名無しさん
2011/08/13(土) 14:14:34.13どうもありがとうございます。
基底から派生へってやるとエラーなんですよね、自分なりに工夫してみます。
簡単な方法があるなら教えてもらいたいですがw
>>537
アドレス確定してからすぐに初期化して、その後アドレス変更せずに継続的に行う処理だったので代入と勘違いしてました。
知識と経験が不足してるので精進したいと思います。
0564デフォルトの名無しさん
2011/08/13(土) 14:35:21.46BOM付って非標準じゃなかった?バイト順入れ替わることないし
たまにトラブルからBOM無しに統一した方がいいだろ
と思ったけどよく考えたらBOM無しでトラブったこともあるな orz どうすりゃいいんだ
0565デフォルトの名無しさん
2011/08/13(土) 17:10:34.54BOM付けると、ASCII文字だけからなるUTF-8ファイルをasciiエンコーディングと見なせないから
今後BOMは撲滅されると勝手に予測
0566デフォルトの名無しさん
2011/08/13(土) 18:37:27.06BOMはUnicode規格およびISO/IEC 10646で規定されている。
つまりBOMを扱えないソフトは「UTF-8対応」とは言えない。
0567デフォルトの名無しさん
2011/08/13(土) 19:00:38.85UTF-8の規格はBOM有り無しどっちでもいいのか
じゃぁ問題がなければBOM付きで統一した方が日本では便利そうだな
0568デフォルトの名無しさん
2011/08/13(土) 19:11:43.53GCCはシバソ問題があるから
今まで対応しなかったんだろ。
安易につけた方が良いとは言えないだろう。
0569デフォルトの名無しさん
2011/08/13(土) 19:25:11.85シバソ問題ってなに?
0570デフォルトの名無しさん
2011/08/14(日) 00:07:54.26読んで動作を決めてたから、先頭の#の前にU+FEFFが入ると困る。
という問題だと思う
0571デフォルトの名無しさん
2011/08/14(日) 00:44:17.560572デフォルトの名無しさん
2011/08/14(日) 01:36:15.90ソースファイルはコンパイラに対しての入力データファイルだから、
シバンで問題が起きるはずない。
単にアンチマイクロソフトが多かっただけでは?
0573デフォルトの名無しさん
2011/08/14(日) 05:40:32.80.NET Frameworkが入っていないPCでも実行できるexeファイルを作成したいです。
試しにhello.cppに
#include <iostream>
using namespace std;
int main(int argc, char const* argv[]) {
cout << "Hello C++!!" << endl;
}
と書いてから
vcvars32.batを実行して
cl /EHsc hello.cpp
を実行すると、hello.objとhello.exeができました。正常に実行できました。
0574573
2011/08/14(日) 05:41:38.49すると
---
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file hello.exe
File Type: EXECUTABLE IMAGE
Image has the following dependencies:
KERNEL32.dll
Summary
4000 .data
5000 .rdata
2000 .reloc
11000 .text
---
と出力されました(空行は抜きました)。
KERNEL32.dllにしか依存していないので、.NET Frameworkが入ってないPCでも動作すると思っているのですが
その認識で合っていますか?
あと、exeのファイルサイズが100KBほどあるのですがそんなもんなんですか?
大したプログラムではないので、もっと小さくなってほしいのですが...。
0575デフォルトの名無しさん
2011/08/14(日) 05:53:50.66.NET関係ないから、その認識で合ってる
関係あるのは、C#やVB.NET、あとC++のフリした別物の、C++/CLI の時だけ
0576デフォルトの名無しさん
2011/08/14(日) 05:55:24.47別に .NET関係ないぞ
0577573
2011/08/14(日) 06:50:58.95ありがとうございます。
VC++を使わないのは半分趣味みたいなものです。
あまり大きなのを作るつもりではないので、
いちいちVC++を起動するのがめんどくさいなあと思って。
0578デフォルトの名無しさん
2011/08/14(日) 12:34:08.370579デフォルトの名無しさん
2011/08/14(日) 13:24:11.66複数の自作ツールを導入する時に、共通dllみたいに括り出せないんだっけ?
0580デフォルトの名無しさん
2011/08/14(日) 13:32:08.25間違っちゃいないけど、Cライブラリの話と勘違いしてないか?
.NET Frameworkが必要か確認するなら、SDK付属のIL Disassemblerで開けるかどうか。
dumpbinはどちらかというとCライブラリが動的リンクか静的リンクかの確認に使う。
0581デフォルトの名無しさん
2011/08/15(月) 23:14:01.05落ちてるし国会はすでに中共の指導下にあるから、
日本原住民は主権を完全に失っている。
日本国憲法下、当然民主主義が守られ、主権は
日本国民にあると思い込んでいる。あるいは
ちょっと気づいているけど、見ない振りしてる
お馬鹿な民族。そんなお馬鹿は滅びさるのみである。
新聞、テレビが民主党政権を支えているから民主党は
安泰。新聞テレビに叩かれるか、無視されるかしかない
自民党や右派政党が政権をとることは永遠にありえない。
主権がない国民はどんな政権を立てようとも無意味
政府をいくら批判しても無駄、選挙なんて民主主義の
ごっこ遊びに過ぎない・・・主権がないんだから
0582デフォルトの名無しさん
2011/08/16(火) 00:04:39.24右派政党・自民党は、愛国心をあおりながら、実は合衆国に尻尾をふっている、別の意味での売国奴であることを理解していないとは。
これが「ゆとり脳」ですか。
0583デフォルトの名無しさん
2011/08/16(火) 02:15:30.250584デフォルトの名無しさん
2011/08/16(火) 07:04:02.040585デフォルトの名無しさん
2011/08/16(火) 07:44:25.87http://www.sgi.com/tech/stl/basic_string.html
> Note that the C++ standard does not specify the complexity of basic_string operations.
実際に規格書見ても sequence の要件を満たすくらいしか書いてないように見えますが
処理系依存・・ですかねえ
0586デフォルトの名無しさん
2011/08/16(火) 19:09:12.16while(1){
int *p=new int[10];
}
newはループごとに作られるのですか
それともループの2回目以降無視されるんですか
ちなみに
while(1){
int *p=new int[10];
delete p[];
}
これだと毎回newしますよね?
0587デフォルトの名無しさん
2011/08/16(火) 19:15:32.340588デフォルトの名無しさん
2011/08/16(火) 22:40:41.45毎回 new される。そして
while(1){
int *p=new int[10];
}
ならば前の p の内容も失われてしまい、delete もできず、アプリが終了するまで、放置された存在になってしまう。
058931
2011/08/17(水) 00:21:16.83int r = rand();
}
rand() が二回目以無視されるはずがねぇだろォォォ!
059031
2011/08/17(水) 00:22:21.08まぁいいか
0591デフォルトの名無しさん
2011/08/17(水) 01:04:50.77まず服を脱いでください
0592デフォルトの名無しさん
2011/08/17(水) 01:12:12.44乱数が欲しくなったときにそのスレッドの乱数の値を得れば完全ランダムじゃね?
0593デフォルトの名無しさん
2011/08/17(水) 01:26:22.87CPU食うぞ
0594デフォルトの名無しさん
2011/08/17(水) 01:39:41.09ばーかばーか
0595デフォルトの名無しさん
2011/08/17(水) 02:01:17.09↓ダメ
void hoge(hogehoge& a, ...)
{
va_alist ap;
va_start(ap, a);
}
参照でなくポインタなら動作します。
↓おk
void hoge(hogehoge* a, ...)
{
va_alist ap;
va_start(ap, a);
}
参照で記述したいのですが、どうすれば良いのでしょうか?
なお、関係ないとは思いますが、hogeはメンバ関数ではありません。
0596デフォルトの名無しさん
2011/08/17(水) 02:19:03.12これからの乱数発生器の姿ではないかな
ハードウエア乱数発生器からソルトを加えつつアプリに返し
バックグラウンドで統計評価しながらスコアをボットで集めて
次世代への課題を提起するという「宇宙乱数」をここに提唱する
0597デフォルトの名無しさん
2011/08/17(水) 03:51:07.24その動作は未定義だから参照使うな
どうしても参照使いたいなら
void hoge(hogehoge& a, int i,...) とか間になにか挟め
0598デフォルトの名無しさん
2011/08/17(水) 09:56:45.25呼び出し側で値渡しされてしまったものを後で参照ともし言えても
値渡しへの参照じゃ呼び出し側から見て左辺値に見える動きが作れないぞ
禿がちゃんとヒントくれてるんだが...
0599デフォルトの名無しさん
2011/08/17(水) 14:53:17.830600デフォルトの名無しさん
2011/08/17(水) 14:56:36.74量子力学
0601デフォルトの名無しさん
2011/08/17(水) 17:01:40.710602デフォルトの名無しさん
2011/08/17(水) 21:32:43.56因果律的なものと関係ある?
0603デフォルトの名無しさん
2011/08/17(水) 21:38:13.63[first1, last1) からサブシーケンス[first2, last2) を探す場合、STLだとどう実装できるのでしょうか?
0604デフォルトの名無しさん
2011/08/17(水) 21:46:56.880605デフォルトの名無しさん
2011/08/17(水) 22:02:39.58ひょっとして、サブシーケンスを検索するだけでなく、サブシーケンスを置換するアルゴリズムもあったりしますか?
0606デフォルトの名無しさん
2011/08/17(水) 22:55:32.76find() 配列を走査して値が最初に一致した要素の位置を返す
find_first_of() 配列1の一部と配列2が部分一致したら、その最初の位置を返す
find_if() 配列を走査し、最初に条件に一致した位置を返す
for_each() すべての要素に対して、指定された振る舞いを実行する
search() 配列1の一部と配列2が部分一致したら、その最初の要素の位置を返す
search_n() 連続した個数の要素を見つけ、その位置を返す
何が無いって?
0607デフォルトの名無しさん
2011/08/17(水) 23:59:23.930608デフォルトの名無しさん
2011/08/18(木) 01:19:26.52部分置換はコンテナの範囲eraseと範囲insertを使うのが基本で要素数が変わらないならアルゴリズムのcopyで上書きかな。
0609デフォルトの名無しさん
2011/08/18(木) 10:45:30.39そうですか。しょうがないのでポインタで我慢します。
でも、言語仕様に...組み込んでるんだから、va_start(ap)だけで充分だと思った。
これなら、func(...)も記述出来るし。
0610デフォルトの名無しさん
2011/08/18(木) 12:04:27.58つーか、コンパイラを作る立場で考えたら先行パラメータがないと面倒なことが判ると思うよ。
それが理由で古いコンパイラでは先行パラメータが必須だったから仕様はそれを追認した形だね。
0611デフォルトの名無しさん
2011/08/18(木) 12:16:24.35もとめるという、コンパイラに手を入れずに可変個引数を実装するvarargsの手法を
そのまま使っていますが、
..を導入してコンパイラに手を入れたのに、古い手法をそのまま使ってるのは頭悪い
と思いました。
コンパイラは可変個引数がスタック上のどこに置かれているか知っているので、すん
なり実装できると思いますよ。
0612デフォルトの名無しさん
2011/08/18(木) 18:53:36.97main(argc)
{
extern prntf(), exit(); /* すべての関数が 0 個以上の可変引数だった */
printf("%s", **(char***)(&argc + 1));
exit(0, argc, 2, 3, 4, 5);
}
0613デフォルトの名無しさん
2011/08/18(木) 22:20:56.27難しい本は絶対に無理なので簡単な本(入門者向け)でお願いします。
0614デフォルトの名無しさん
2011/08/18(木) 22:27:39.31使用するコンパイラぐらい書いとけ
0615デフォルトの名無しさん
2011/08/18(木) 22:39:23.640616デフォルトの名無しさん
2011/08/18(木) 22:43:12.45CUIでwindowsと言えばよろしいでしょうか?
0617デフォルトの名無しさん
2011/08/18(木) 22:43:18.93簡単な本しか読む気が無い場合、C++を選択する時点で間違っていると思う。
C#とかの方が良いよ。
0618デフォルトの名無しさん
2011/08/18(木) 22:44:01.580619デフォルトの名無しさん
2011/08/18(木) 22:46:35.91それは有能という証明になりませんか?
入門者はまずは基本から学ぶべきだと思いますがね。
難しい本は後の話ですよ。
0620デフォルトの名無しさん
2011/08/18(木) 22:55:06.850621デフォルトの名無しさん
2011/08/18(木) 22:55:42.10>それは有能という証明になりませんか?
材料にはなり える かもしれないが、
証明にはならない。 何故なら内容次第、場面次第だから
0622デフォルトの名無しさん
2011/08/18(木) 23:02:50.37また質問にきてやるよ。
0623デフォルトの名無しさん
2011/08/19(金) 10:04:39.592100ってなんだよwww
ExpressだとWindows GUIやるのに大変だと思うよ
0624デフォルトの名無しさん
2011/08/19(金) 13:11:10.21>入門者はまずは基本から学ぶべきだと思いますがね。
そう言うならアセンブラからやれよ。
0625デフォルトの名無しさん
2011/08/19(金) 14:02:32.96{
if(0xffff == 0xffffffff)
{
// ここにくる?
}
}
0626デフォルトの名無しさん
2011/08/19(金) 14:18:54.02{
if(0xffff == 0xffffffff)
{
// 絶対にこない。最適化でコードさえ生成されないかもしれない。
}
}
0627デフォルトの名無しさん
2011/08/19(金) 14:27:00.480628デフォルトの名無しさん
2011/08/19(金) 14:37:10.230629デフォルトの名無しさん
2011/08/19(金) 14:48:50.41{
if(0xff == 0xffffffff)
{
// ここにくる?
}
}
0630デフォルトの名無しさん
2011/08/19(金) 14:51:28.34ばーか
0631デフォルトの名無しさん
2011/08/19(金) 15:43:14.650632デフォルトの名無しさん
2011/08/19(金) 16:07:18.44間抜け
0633デフォルトの名無しさん
2011/08/19(金) 16:20:30.490634デフォルトの名無しさん
2011/08/19(金) 16:54:25.850635デフォルトの名無しさん
2011/08/19(金) 17:18:11.18整数拡張した結果が0xffffffffになることはない
0636デフォルトの名無しさん
2011/08/19(金) 17:25:28.850637デフォルトの名無しさん
2011/08/19(金) 17:26:00.030638デフォルトの名無しさん
2011/08/19(金) 17:47:41.28http://hibari.2ch.net/test/read.cgi/tech/1179424842/
0639デフォルトの名無しさん
2011/08/19(金) 19:15:56.00そんな処理系なら整数拡張もないんじゃね?
拡張どころか警告つきで切り詰められるだろこの例だと
0640デフォルトの名無しさん
2011/08/19(金) 22:36:30.000641デフォルトの名無しさん
2011/08/19(金) 22:43:30.900642デフォルトの名無しさん
2011/08/19(金) 23:12:15.220643デフォルトの名無しさん
2011/08/20(土) 02:04:19.63long l = -1;
if(s == l) // これはどうなの
0644デフォルトの名無しさん
2011/08/20(土) 02:07:45.38(たとえ8進や16進表記でも)(例えば-1234という表記は負符号演算子-と整数リテラル1234)
だから0xffffffffはunsigned int型の4294967295になる(intが32ビットの環境なら)。
それをint型にキャストすれば多くの処理系ではint型の-1になるってだけ(実装依存で-1にならない実装も仕様上はありえる)。
0645!mokuton
2011/08/20(土) 04:01:29.440646デフォルトの名無しさん
2011/08/20(土) 13:26:17.63↑
これポインタ
クリックすると10の中身見れるよね
0647デフォルトの名無しさん
2011/08/20(土) 15:41:22.85�@『フジテレビ抗議デモ』
日程 8月21日(日)
時間 13:30〜
場所 お台場 青海北ふ頭公園 (船の科学館 となり)
�A『国を売るメディア(フジテレビ)を糾弾する緊急国民行動』
日程 8月21日(日)
時間 15:00集合 16:00出発
場所 お台場シンボルプロムナード公園「滝の広場」
(ゆりかもめ「テレコムセンター」駅前)
注意事項:デモで使用可能な物は「日本国旗関連のみ」です。
それ以外での抗議は禁止です!マナー違反は注意を促してください。
ケガ人が出ないよう気持ちの良いデモを行いましょう。
0648デフォルトの名無しさん
2011/08/20(土) 16:46:53.53まず、その下らないスレ違いの抗議参加者を募集する愚行に抗議する
0649デフォルトの名無しさん
2011/08/20(土) 22:16:25.750650デフォルトの名無しさん
2011/08/21(日) 06:30:03.48変数受け取りを強制する事はできますか?
test_class(); //直後にデストラクタが呼ばれるのでエラーとしたい
test_class o(); //OK
0651デフォルトの名無しさん
2011/08/21(日) 08:00:17.87こんな感じか?
struct Hoge {};
#define Hoge() YouSuck()YouAreFired
int main() {
Hoge g(); // OK
Hoge(); // エラー
}
-- gcc
Hoge.cpp: In function 'int main()':
Hoge.cpp:5:3: error: 'YouSuck' was not declared in this scope
Hoge.cpp:5:3: error: expected ';' before 'YouAreFired'
-- vc
1>Hoge.cpp(5): error C2146: syntax error : missing ';' before identifier 'YouAreFired'
1>Hoge.cpp(5): error C3861: 'YouSuck': identifier not found
1>Hoge.cpp(5): error C2065: 'YouAreFired' : undeclared identifier
0653デフォルトの名無しさん
2011/08/21(日) 23:27:35.83hoge() // 1
piyo() // 2
// どちらの呼び出しもエラー・例外の確認を行わない
}
bool hoge() {
if (条件式) {
return true;
else {
return false;
}
}
void piyo() {
if (!条件式) {
throw ex;
}
}
�@と�Aのどっちかが呼び出しの速かったり遅かったりする?
0654デフォルトの名無しさん
2011/08/22(月) 00:19:42.64処理系の実装による。
ただ普通は例外が実際にスローされなければオーバーヘッドは小さい
0655デフォルトの名無しさん
2011/08/22(月) 08:59:22.890656デフォルトの名無しさん
2011/08/22(月) 17:07:06.22someNameSpace::func()みたいな
::の左側に何もない場合はどういう意味ですか?
0657デフォルトの名無しさん
2011/08/22(月) 17:07:55.420658デフォルトの名無しさん
2011/08/22(月) 17:12:31.39心に停めてコード眺めてみます。どうも
066071
2011/08/22(月) 18:21:33.69まぁいいか
0661デフォルトの名無しさん
2011/08/22(月) 18:48:49.02(lib*.a とか lib*.so とか *.dll)のフォーマットや作り方、
リンカの動作や解析の仕方について、何かよい解説書や Web ページを探しています
ご存知の方いらっしゃれば、ご教示下さい
0663デフォルトの名無しさん
2011/08/22(月) 19:58:09.30http://msdn.microsoft.com/ja-jp/windows/hardware/gg463119
0664デフォルトの名無しさん
2011/08/22(月) 20:39:35.22俺は、リスナーのポインター登録用とか、値の登録済みかの確認用ぐらい。
B木とかに使えるかと思ったけど、ランダムアクセス
イテレーター使えないから結局std::vector使う事になった。
なんか、もっと活用できる用途はないのかアレ?
0665デフォルトの名無しさん
2011/08/22(月) 21:00:16.75引っ込んでろ。カス。全然ダメじゃねーか。
http://www.oversea-pub.com/books/gnudevjp/gnudevjp_index_1st.pdf
0666デフォルトの名無しさん
2011/08/22(月) 22:41:26.22・uniqueするのが面倒なとき
・ユニークな要素が一定個数貯まったら処理をするというロジックを実装したとき
・優先順位付き待ち行列風にデータを扱うとき
0667デフォルトの名無しさん
2011/08/23(火) 08:23:51.72sequence containerに対するuniqueはコピーを伴うので、要素のコピーが重かったり、
イテレータや参照の無効化が困る場合はsetの方が有用。
また引数や戻り値のようなインタフェースとして中身に同じ値が入っていない事を
言外に保証したい時に使うこともある。
0668デフォルトの名無しさん
2011/08/23(火) 10:48:07.53やり方忘れました。教えてください。
0669デフォルトの名無しさん
2011/08/23(火) 10:52:04.41それか、コピーと言うより初期化の話なら Foo foo = {値、値…} では
0670デフォルトの名無しさん
2011/08/23(火) 10:53:00.30struct Foo {
...;
};
Foo a, b = {...};
a = b; // ←これで一度にコピーできるよ。メンバにポインタを持つなら代入オペレータをオーバライドしてね
0671デフォルトの名無しさん
2011/08/23(火) 10:53:31.17memcpy()って、あんた馬鹿?
0672デフォルトの名無しさん
2011/08/23(火) 10:55:02.16配列から一瞬で構造体にヘッダーだけコピーするようなほうほうです。
0673デフォルトの名無しさん
2011/08/23(火) 10:59:44.43POD限定ならありだろw
0674デフォルトの名無しさん
2011/08/23(火) 11:11:43.40だから、代入で済むことをmemcpy()する理由がないだろ。
まさかと思うが、ansi以前のレガシーCのように構造体の代入ができないと思っているわけではなかろ?
>>672
その配列と言うのは、例えばファイルのバイナリイメージがchar配列に入っていると言うことか?
だとしたら、こんな感じ。
char buffer[AnySize];
struct Foo foo = * static_cast<Foo *>(buffer);
0675デフォルトの名無しさん
2011/08/23(火) 11:13:46.75はみ出てもいいんですか?
有難うございます。
0676デフォルトの名無しさん
2011/08/23(火) 11:15:31.40はみ出るって言うか、>674の例だとsizeof(Foo) <= AnySizeでないとダメ。
0677デフォルトの名無しさん
2011/08/23(火) 11:17:13.32あとはWindows含めるなら
http://www.amazon.co.jp/Linkers-Loaders-John-R-Levine/dp/4274064379
だけど、訳書版は評判悪いね…
0678デフォルトの名無しさん
2011/08/23(火) 11:22:44.38いや、一つ二つならそうだけど、POD型構造体配列のコピーとかもちょっと意識してただけ
0679デフォルトの名無しさん
2011/08/23(火) 11:29:24.90構造体配列のコピーと言うことなら納得。取り敢えず、std::copy()を使うけど。
>>674
アライメントの問題があるから、このケースこそmemcpy()の方が安全かもしれない。
逆に、アライメントの問題があるからこそバッファ自体をアライメント境界に置くようにするけど。
アライメントの問題がなくて、参照したいだけならポインタで持っててもいいかと。
struct Foo const * foo = reinterpret_cast<Foo *>(buffer);
0680デフォルトの名無しさん
2011/08/23(火) 13:35:11.26元の構造体データ -> (シリアライズ) -> 汎用データ -> (デシリアライズ) -> 復元された構造体データ
をやりたいときはもとの構造体データの内部表現とシリアライズ方法がわからなければ正しく復元できない
0681デフォルトの名無しさん
2011/08/23(火) 13:46:19.79終わりだ。
0683デフォルトの名無しさん
2011/08/23(火) 20:17:34.61お前ん中ではな
0684デフォルトの名無しさん
2011/08/23(火) 20:42:21.33これは正しい実装方法なのでしょうか?
0685デフォルトの名無しさん
2011/08/23(火) 20:47:32.49クラス定数を基本クラス、の意味がよくわからない
どういうこと?
0686デフォルトの名無しさん
2011/08/23(火) 20:51:26.07class ConstXXX {
public:
static const int aaa;
...
};
class XXXXX : public ConstXXX {
....
};
こんな感じです。
0687デフォルトの名無しさん
2011/08/23(火) 20:57:41.30あまりそういう実装が良いとは聞いたことがないし、
わざわざ継承する理由も見つからない。
javaで定数インターフェースという使い方はあるが、
悪い使い方と言われている。
0688デフォルトの名無しさん
2011/08/23(火) 21:01:48.35やはり良くない使われ方ですよね。
どうもありがとうございました。すっきりしました。
0689デフォルトの名無しさん
2011/08/23(火) 21:20:17.47class Class : public Base<Class> {
enum { A = n };
みたいな。AはBaseの方で使われる
0690デフォルトの名無しさん
2011/08/23(火) 21:24:01.04protectedかpublicで捉えてね
0691デフォルトの名無しさん
2011/08/24(水) 10:47:12.32struct is_same { static const bool value = false; };
template<typename A>
struct is_same<A, A> { static const bool value = true; };
template<typename T>
struct IsInteger: is_same<T, int> {};
たぶん別の話だが、こういうメタ関数を作ることはたまにある。
0692デフォルトの名無しさん
2011/08/25(木) 08:35:54.70C++は使いたくない。
classは重そう。
VMコンパイル型じゃないので(+ 1 2)とかするたびにインスタンスが作られてしまう
処理系作成のときにオブジェクト思考の概念はいらない
宗教上の理由。
それに
Scheme内でのオブジェクトの表現用にScm_Numクラス, Scm_Stringクラスとか作って、そいつらはScm_Objectを継承して…とか馬鹿げてる(と思う)。
ていうかNLispでやって懲りた。
型安全じゃないキャスト(void*へのキャスト)を多用したい
0693デフォルトの名無しさん
2011/08/25(木) 08:37:39.940694デフォルトの名無しさん
2011/08/25(木) 08:40:52.760695デフォルトの名無しさん
2011/08/25(木) 08:41:21.03アホがデマばら撒くのやめてほしいわ
0696デフォルトの名無しさん
2011/08/25(木) 08:46:06.750697デフォルトの名無しさん
2011/08/25(木) 08:47:44.850698デフォルトの名無しさん
2011/08/25(木) 09:21:04.95ストリームを使うと一般性が無くなる
このホコタテはどうしたら直りますか?
0700デフォルトの名無しさん
2011/08/25(木) 09:52:22.97他の方よろしく。
0701デフォルトの名無しさん
2011/08/25(木) 09:57:06.290702デフォルトの名無しさん
2011/08/25(木) 09:59:38.41死ねよ。
0703デフォルトの名無しさん
2011/08/25(木) 10:05:03.900704デフォルトの名無しさん
2011/08/25(木) 10:30:05.430705デフォルトの名無しさん
2011/08/25(木) 11:17:08.210706デフォルトの名無しさん
2011/08/25(木) 12:54:07.49イテレータとストリームの関係のどこに矛盾があるのか?
0707デフォルトの名無しさん
2011/08/25(木) 13:08:50.83質問レベルも煽り耐性も
0708デフォルトの名無しさん
2011/08/25(木) 14:48:24.160709デフォルトの名無しさん
2011/08/25(木) 14:57:44.800710デフォルトの名無しさん
2011/08/25(木) 15:01:14.990711デフォルトの名無しさん
2011/08/25(木) 20:38:20.660712デフォルトの名無しさん
2011/08/25(木) 21:17:54.23何と比べてどんな状況で?
0713デフォルトの名無しさん
2011/08/25(木) 21:22:29.1536行目,hoge.doSomthing(5) を呼び出したいのですが
35行目で
Line 35: error: invalid initialization of reference of type 'CHoge&' from expression of type 'const CHoge'
となってしまいます.どうやればよいでしょうか?
0714デフォルトの名無しさん
2011/08/25(木) 21:34:18.51分からずに使ってたのか?
0715デフォルトの名無しさん
2011/08/25(木) 21:40:18.19CHoge const &hoge = *itr;
0716デフォルトの名無しさん
2011/08/25(木) 22:16:09.82doSomthing は const 修飾してないから、
それじゃ 36 行目でエラーになるだけ
>>714
素直に CHoge をコピーして
CHoge hoge = *itr;
とするか、クラス設計として妥当と判断できるなら
CHoge::x を mutable にする
@@ -7 +7 @@ class CHoge
- int x;
+ mutable int x;
@@ -15 +15 @@ class CHoge
- void doSomthing(int n)
+ void doSomthing(int n) const
0717デフォルトの名無しさん
2011/08/25(木) 22:21:56.19@@ -35 +35 @@ int main(void)
- CHoge& hoge = *itr; //
+ const CHoge& hoge = *itr; //
0718デフォルトの名無しさん
2011/08/25(木) 22:45:53.08>>713みたいな状況では不合理さもでてくるけど整列条件に関わる部分を変更させないために
set内の要素は参照しかさせず直接変更はできない
0719デフォルトの名無しさん
2011/08/25(木) 23:16:20.42setは大小比較の結果が変わると破綻するので、変更が許されていない。
変更しないならdoSomethingをconstにする。
変更するけど大小比較に影響しないなら
for ( auto itr = c.begin(); itr != c.end(); ++itr )
x &i = const_cast<x&>(*&*itr);
0720713
2011/08/26(金) 04:03:43.70>>715-719 回答ありがとうございます.
↓こんなやり方も考えましたが…,
http://codepad.org/oOAfxed8
今回は古いコードの保守なので class にあまり変更を加えたくなく, const_cast で対応したいと思います.
ありがとうございました.
0721デフォルトの名無しさん
2011/08/26(金) 11:18:31.71char *aargv[];
void p(char *c[]) {
}
int main (int argc, char *argv[]) {
p(aargv);
return 0;
}
と書くとリンク時に
error LNK2001: 外部シンボル ""char * * aargv" (?aargv@@3PAPADA)" は未解決です
といわれます。
どう書けばいいでしょうか?
0722デフォルトの名無しさん
2011/08/26(金) 11:24:57.210723デフォルトの名無しさん
2011/08/26(金) 11:29:45.900724デフォルトの名無しさん
2011/08/26(金) 12:01:09.47aargvは宣言しかされてないだろ。
0725デフォルトの名無しさん
2011/08/26(金) 12:04:57.760726デフォルトの名無しさん
2011/08/26(金) 13:22:06.47> char *aargv[];
これは配列の要素数が不明なので不完全型であって(ここでは)aargvは定義されない。
0727デフォルトの名無しさん
2011/08/26(金) 14:02:25.17C++ではスタック領域をメインとして使うのがいいのでしょうか?
C#だとほとんどのクラスのインスタンスはヒープにおくようになっていたと思います。
0728デフォルトの名無しさん
2011/08/26(金) 14:05:07.34くだらない質問だったみたいですが、答えてくださってありがとうございます。
0729デフォルトの名無しさん
2011/08/26(金) 14:17:25.08ヒープでなければならない理由がなければスタック
0730デフォルトの名無しさん
2011/08/26(金) 14:28:01.35void convArgv(wchar_t *argv[], char *dst[], int argc) {
std::wstring src;
std::string tmp;
dst = (char**)malloc(sizeof(char*) * argc);
for (int i = 0; i < argc; i++) {
src = argv[i];
narrow(src, &tmp); //wstring→string
if((dst[i] = (char*)malloc(sizeof(char) * (tmp.length() + 1))) == NULL)
std::cout << "メモリ確保に失敗した。" << std::endl;
strcpy_s(dst[i], tmp.length() + 1, tmp.c_str());
}
}
int _tmain(int argc, _TCHAR* argv[]) {
convArgv(argv, aargv, argc);
if (argc > 1)
free(*(aargv + 1));
return 0;
}
と書いて実行すると、下から3行目のfreeで思いっきり落ちるけれども
同じ理由でしょうか?
0731デフォルトの名無しさん
2011/08/26(金) 14:36:11.73ってやれば落ちないよ
0732デフォルトの名無しさん
2011/08/26(金) 15:00:43.790733デフォルトの名無しさん
2011/08/26(金) 16:39:42.00std::wstring src;
std::string tmp;
char* p;
char** aap;
dst = (char**)malloc(sizeof(char*) * argc)
for (int i = 0; i < argc; i++) {
src = argv[i];
narrow(src, &tmp); //wstring→string
if((p = (char*)malloc(sizeof(char) * (tmp.length() + 1))) == NULL)
std::cout << "メモリ確保に失敗した。" << std::endl;
strcpy_s(p, tmp.length() + 1, tmp.c_str());
aap = dst + i;
*aap = p;
}
}
できました。こんなかんじです
ありがとうございます
0734デフォルトの名無しさん
2011/08/26(金) 18:41:16.200735デフォルトの名無しさん
2011/08/26(金) 20:04:21.66次からはJavaでやろうぜ。
つーかfriend制限とかの規約作ってなかったんかい…。
friendも実装の移譲程度の使い方しかしないんなら便利だと思うけどな。
Javaだとfriendもpartial classも無いからswingとか使うと1ファイルの中がごちゃごちゃしてたまらん…。
0736デフォルトの名無しさん
2011/08/26(金) 21:55:54.97goto 君だって throw になって名誉回復したし
禿の大嫌いな define だってバリバリ現役
0737デフォルトの名無しさん
2011/08/26(金) 22:01:46.71gotoとthrowが同じに見えるなんてかわいそうだな。
throwは呼び出し元に飛ぶもので、コード書いた時点では飛び先が決まってないんだぞ。
>禿の大嫌いな define だってバリバリ現役
テンプレートとconstとインライン関数があるのに、バリバリ現役はまずいだろう。
0738デフォルトの名無しさん
2011/08/26(金) 22:56:58.32その意味では計算型 GOTO (FORTRAN ではなく BASIC の)なみのワルだよな
コード書いた時点で飛び先が決まってないのは関数ポインタや longjmp でも同じだし
C++ では template 内で多重定義解決させるときも飛び先は知るわけないよな
goto と throw が構造化定理における何者かという本質が見えてないおまえさんこそご愁傷様だよ
assert の代わりに dynamic_cast でも使っているのか?
0739デフォルトの名無しさん
2011/08/26(金) 23:32:51.010740デフォルトの名無しさん
2011/08/27(土) 01:00:00.84構造化に反しない。
>>738はバカなの?死ぬの?
0741デフォルトの名無しさん
2011/08/27(土) 01:32:21.20おまえが死ねよ
カタカナ表記したからって構造化との関係は変わらないぞ
0742デフォルトの名無しさん
2011/08/27(土) 01:51:10.620743デフォルトの名無しさん
2011/08/27(土) 01:51:46.040744デフォルトの名無しさん
2011/08/27(土) 02:15:50.860745デフォルトの名無しさん
2011/08/27(土) 03:31:07.36char a[];
の違いってなに?
同じだよね
0746デフォルトの名無しさん
2011/08/27(土) 05:09:04.83下は宣言
全く違う
0747デフォルトの名無しさん
2011/08/27(土) 18:35:07.47上はcharへのポインター(アドレス)を格納する変数の宣言および定義。
下はcharを複数格納する配列の宣言。要素数は決まっていない。
0748デフォルトの名無しさん
2011/08/27(土) 23:49:33.89Nを自然数としてN次元配列を扱いたいとして、
二次元や三次元などNが事前に決まっている場合は
問題ないのですが、このN自体を変数として実行時に
N次元配列が二次元だったり三次元だったりするような
コーディングは可能でしょうか?
かなりテクニカルな実装になっても構わないので
もし可能でしたら教えてください。
よろしくお願いします。
0749デフォルトの名無しさん
2011/08/27(土) 23:54:54.950750デフォルトの名無しさん
2011/08/28(日) 00:01:29.32float* array;
array = new float[3 * 4];
delete[] array;
もしくは、
std::vector<float> array;
array.reserve(3 * 4);
で、いいんじゃね?
0751デフォルトの名無しさん
2011/08/28(日) 00:31:31.36確かにそれも一つの解決ではあるのですが、
あくまでも目的は多次元配列として扱うということになります。
理由の一つとしては、多次元配列の構造を持っている1次元配列の
演算の手間があります。実際 M_1*M_2*... M_N というN次元配列を
1次元化する場合、インデックスの変換は
(m_1, m_2, ..., m_N) -> sum[n=1 to N] m_n product[k=n+1 to N] M_k
となりますが、こうやって作成した1次元配列の演算が非常に面倒になるため
各種演算の手間を軽減するために多次元のまま扱いたいのです。
0752デフォルトの名無しさん
2011/08/28(日) 00:34:54.440753デフォルトの名無しさん
2011/08/28(日) 00:41:44.79もしかしたら高次元の場合でも
そんなに手間でもないような気もしてきました…
もう一度考え直してみます。
(ずっとageてしまってました。すみません)
>>752
それは配列要素を持つクラスを作成して、そのクラスに
利用したいオペレータを追加する、ということでしょうか?
これも検討してみます。
0754デフォルトの名無しさん
2011/08/28(日) 00:45:16.860755デフォルトの名無しさん
2011/08/28(日) 00:48:12.09仮にちゃんと多次元配列作っても、大抵の処理系じゃ内部の
アドレス計算は一次元配列と同じになるのでは?
0756デフォルトの名無しさん
2011/08/28(日) 05:39:15.65> こうやって作成した1次元配列の演算が非常に面倒になるため
どこがどう「非常に面倒」なんだ?
0757デフォルトの名無しさん
2011/08/28(日) 07:35:00.12template <typename T>
class Node {
public:
virtual Node & GetChildNodeByIndex(size_t index) = 0;
virtual T & GetValue() = 0;
};
template <typename T>
class ValueNode {
public:
virtual Node & GetChildNodeByIndex(size_t index) { throw x; }
virtual T & GetValue() { return this->value; }
private:
T value;
};
template <typename T>
class ContainerNode {
public:
virtual Node & GetChildNodeByIndex(size_t index) { return this->childNodes[index]; }
virtual T & GetValue() { throw x; }
private:
boost::ptr_vector<Node> childNodes;
};
0758デフォルトの名無しさん
2011/08/28(日) 07:36:12.290759デフォルトの名無しさん
2011/08/28(日) 09:33:46.15OUTPUT ITERATORはITERATOR同士を比べて終端を調べられないから下位換性無いですよね
イテレーターって互換性みたいなのは無いと考えるべきかOUTPUT ITERATORを例外とするのか
どう考えればいいですか?
0760デフォルトの名無しさん
2011/08/28(日) 11:23:27.240761デフォルトの名無しさん
2011/08/28(日) 12:02:44.86超手抜きのn分木でやってみた
ttp://ideone.com/e0ZQq
0762デフォルトの名無しさん
2011/08/28(日) 23:35:17.43図にするとこんな感じ。OutputとInputがそれぞれ基底にあって、一本道の関係ではない。
┌→Input Iterator
├→Output Iterator
Forward Iterator
↑
Bidirectional Iterator
↑
Random Access Iterator
だから、Input Iteratorであればよいという状況ではOutput Iteratorがのけ者に感じるだろうけど、
逆にOutput Iteratorであればよいという状況であれば今度はInput Iteraotrがのけ者に感じる、ということだって起こる。
0763デフォルトの名無しさん
2011/08/29(月) 00:44:51.530764デフォルトの名無しさん
2011/08/29(月) 00:50:31.760765デフォルトの名無しさん
2011/08/29(月) 02:37:08.32書いてはみたけど探せばどこかにあるだろ
0766デフォルトの名無しさん
2011/08/29(月) 02:39:48.530767デフォルトの名無しさん
2011/08/29(月) 12:06:22.250768デフォルトの名無しさん
2011/08/29(月) 14:36:28.770769デフォルトの名無しさん
2011/08/29(月) 14:38:39.06イテレータという書き方止めてくれる?
どうしても伸ばしたくないならイテレートルといえば?
0770デフォルトの名無しさん
2011/08/29(月) 14:54:10.490771デフォルトの名無しさん
2011/08/29(月) 14:55:29.780772デフォルトの名無しさん
2011/08/29(月) 15:02:11.84いや止めない。
0773デフォルトの名無しさん
2011/08/29(月) 15:06:54.600774デフォルトの名無しさん
2011/08/29(月) 15:07:40.960775デフォルトの名無しさん
2011/08/29(月) 15:12:45.16三音以上の(カタカナ)英語の語尾に長音をつけないのって、
JISでそう決められてるんじゃなかったっけ
0776デフォルトの名無しさん
2011/08/29(月) 15:15:32.78昔は一文字いくらとか決まってたらしいし。
0777デフォルトの名無しさん
2011/08/29(月) 15:15:40.810778デフォルトの名無しさん
2011/08/29(月) 15:21:12.58インデクサは?
0779デフォルトの名無しさん
2011/08/29(月) 15:28:09.91テンソルでもテンサーでもなくテンサというやつとか
ブチ殺したくなる。
0780デフォルトの名無しさん
2011/08/29(月) 15:37:22.410781デフォルトの名無しさん
2011/08/29(月) 15:44:14.300782デフォルトの名無しさん
2011/08/29(月) 16:21:37.96最初は印刷すると棒だらけになって無駄だったからだったような
http://ja.wikipedia.org/wiki/%E9%95%B7%E9%9F%B3%E7%AC%A6#.E9.95.B7.E9.9F.B3.E7.AC.A6.E3.81.AE.E7.9C.81.E7.95.A5
まあ2chはJIS準拠じゃないけどな
自分が名乗るときはプログラマって言っちゃう。
>>779
沸点低すぎー。ワーニングとかでも怒っちゃう?
C++ってしーぷらぷらで良いの?
0783デフォルトの名無しさん
2011/08/29(月) 16:35:34.40↓
http://hibari.2ch.net/test/read.cgi/prog/1242268027/
0784デフォルトの名無しさん
2011/08/29(月) 16:50:54.780785デフォルトの名無しさん
2011/08/29(月) 18:49:21.550786デフォルトの名無しさん
2011/08/29(月) 18:59:10.100787デフォルトの名無しさん
2011/08/29(月) 19:40:19.79自分のクラス内のクラスメンバポインタを集めたコンテナをstaticで用意したいんだけど・・・
0788デフォルトの名無しさん
2011/08/29(月) 19:41:35.420789デフォルトの名無しさん
2011/08/29(月) 22:29:47.770790デフォルトの名無しさん
2011/08/29(月) 22:32:23.16怪我をしないうちにうちへかえんな
0791デフォルトの名無しさん
2011/08/29(月) 22:40:25.10それが成長へのコツ
0792デフォルトの名無しさん
2011/08/29(月) 22:57:04.620793デフォルトの名無しさん
2011/08/29(月) 23:07:42.48汎用的な通信手続きを定義した抽象クラスAを継承して、
実際の通信を行う具象クラスB、具象クラスCを定義しました。
実際に通信を行う関数Dに
Aのポインタを引き渡して処理をさせようと思うのですが、
この場合、関数Dを呼び出す側が具象クラスBまたはCを知っている必要が
あると思うのですが、こういうものなのでしょうか?
実装の詳細を知りたくないために抽象クラスを使用して処理できるようにしたのに、
具象クラスの内容を呼び出し元が知っている必要がある事に違和感を感じたのですが。
0794デフォルトの名無しさん
2011/08/29(月) 23:11:03.53いいえ
0795デフォルトの名無しさん
2011/08/29(月) 23:15:50.06{
private:
int x, y;
bool flag;
class Statics
{
public:
Statics()
{
this->members.push_back(&Hoge::x);
this->members.push_back(&Hoge::y);
this->members.push_back(&Hoge::flag);
}
std::vector<void Hoge::*> members; // 'void' 型が不適切に使用されています。
} static statics;
};
できません><教えてください><
0796デフォルトの名無しさん
2011/08/29(月) 23:26:05.71むちゃくちゃなコード書きやがるなwwwwww
Hogeクラスのメンバをstaticメンバに保存しておきたいってこと?
0797デフォルトの名無しさん
2011/08/29(月) 23:26:14.24抽象化に失敗しています
設計からやり直しましょう
0798デフォルトの名無しさん
2011/08/29(月) 23:27:12.57ファクトリ関数Eがあるなら呼び出し側はA、D、Eだけ知ってればいんじゃない
0799デフォルトの名無しさん
2011/08/29(月) 23:42:11.20そうそう、staticなコンテナ(>>795ではHoge::staics::members)に追加するのは何時でもいいんだけどね
0800793
2011/08/29(月) 23:44:47.50下記のようなコードに対してどんな形で対応すればよいのでしょう。
というか、そもそも具象クラスの情報はどこが持つのが
良い設計なのかわからなくなってきました。
class A {
A();
virtual ~A();
};
class B : public A {
B();
virtual ~B();
};
class C : public A {
C();
virtual ~C();
};
void D(class A *p) {
}
int main() {
// Dを呼び出す際にはB or Cの型情報が必要?
D(new B());
return 0;
}
0801デフォルトの名無しさん
2011/08/29(月) 23:53:12.12DからみてB,Cは抽象化されてるからそれでいいよ
どこまで抽象化したいかは場合による
必ずどこかで具体的なクラスを生成しないといけない
0802デフォルトの名無しさん
2011/08/29(月) 23:58:47.18例えばの話、BとCの抽象クラスAが存在しなかったのなら、関数Dは
void D1(B * p)
void D2(C * p)
の2つ必要になる
処理内容がほぼ同じ関数を2つ記述しなければいけない
0803デフォルトの名無しさん
2011/08/30(火) 00:00:13.54保存しておきたいのはインスタンスのポインタ?値?
保存しておいていつそれらは削除するのか?
クラスがコピーされたときの挙動は?(コピーコンストラクタと代入)
このあたりで実装の仕方がかわるから、そこんとこkwsk
0804デフォルトの名無しさん
2011/08/30(火) 00:05:49.52クラスメンバであるインスタンスを指すポインタを保存したいのではなく、
クラスメンバであるインスタンスを保存したいのではなく、
クラスメンバへのポインタを保存したい
クラスstatic変数であるコンテナクラス(vectorなりlistなり)に保存しておき、削除は行わない
static変数に保存するので、コピー操作には関わらないはず
0805793
2011/08/30(火) 00:07:16.51>>802
ありがとうございます。
抽象化のやり方としては間違っていないのですね。
関数DにとってはAという抽象的なクラスで操作できるので抽象化できている、と。
となると、後の悩みはどこで具体的なクラスを生成するかのようです。
作ってるアプリケーションによってもやり方は違うようなので、
オープンソースのアプリでも見ながらちょっと考えてみます。
ありがとうございました。
0806デフォルトの名無しさん
2011/08/30(火) 00:27:24.18一度インスタンス化したオブジェクトが破棄されると
staticに無効なポインタが保持されたままになるが大丈夫か?
またメンバ関数へのポインタは、
クラスのポインタがあれば取得できるから、保存するならクラスのポインタかな
0807デフォルトの名無しさん
2011/08/30(火) 00:28:22.22#include <stddef.h>
class Hoge
{
private:
int x, y;
bool flag;
class Statics
{
public:
Statics()
{
this->members.push_back(offsetof(Hoge,x));
this->members.push_back(offsetof(Hoge,y));
this->members.push_back(offsetof(Hoge,flag));
}
void* MenberToPointer(Hoge* p, size_t idx) {
return void*(char*(p) + menbers[idx]);
}
std::vector<size_t> members;
} static statics;
};
0808デフォルトの名無しさん
2011/08/30(火) 00:40:08.82> 一度インスタンス化したオブジェクトが破棄されると
> staticに無効なポインタが保持されたままになるが大丈夫か?
え、そうなる・・・のか?
参照: http://homepage2.nifty.com/well/Pointer.html
>>807
おー、そんな感じ。というか offsetof() なんていう関数知らなかったよ
この関数は Hoge クラスが実装クラスであったり、x や y の型が抽象または実装クラスであっても使える?
0809デフォルトの名無しさん
2011/08/30(火) 00:55:18.94書いただけでコンパイルもしてないからわからんが別にHogeが継承されてても使える気はする
てかこんなコードやめとけ考えなおせ
0810デフォルトの名無しさん
2011/08/30(火) 00:56:44.510811デフォルトの名無しさん
2011/08/30(火) 01:07:24.78だが・・・メンバ変数に・・・C#でいうところの"属性"を持たせたいッ・・・!
属性の1つとして"プロパティ名"を持たせて、ハッシュに保存したいんだ・・・ッ!
というか、これができると繰り返し記述しなければいけない部分が減って俺得になる
>>810
なるほど・・・
クラスメンバ全てにPOD性を強要することはできないから厳しいかな
0812デフォルトの名無しさん
2011/08/30(火) 01:11:59.90配列に入れたい理由をもう一度考えてみるべき
0813デフォルトの名無しさん
2011/08/30(火) 01:32:04.630814デフォルトの名無しさん
2011/08/30(火) 01:32:43.59一旦構造を見直してみるわ
0815デフォルトの名無しさん
2011/08/30(火) 01:37:52.710816デフォルトの名無しさん
2011/08/30(火) 01:55:34.57できた・・・
template<typename T> void push_back_member(T (Hoge::*p)) { members.push_back(reinterpret_cast<char Hoge::*>(p)); }
template<typename T> T (Hoge::*nth_member(int n) const) { return reinterpret_cast<T Hoge::*>(members[n]); }
・・・できたが、 nth_member() の宣言に死相が出ている。
0817816
2011/08/30(火) 01:59:14.85http://codepad.org/LJ5MqwEl
0818デフォルトの名無しさん
2011/08/30(火) 03:26:03.73なるほど、すばらしい
> members.push_back(reinterpret_cast<char Hoge::*>(p));
「pod型名 Hoge::*」にキャストしてまとめればよかったのか
自己流で少し整理&色々追加
インスタンス関数にプロパティ名をつっ込んで、インスタンス変数へのポインタを取得できるようにしてみた
http://codepad.org/O2ZCNV14
0820デフォルトの名無しさん
2011/08/30(火) 03:45:01.48> (p->*get_member_by_name_core<char>(name)
reinterpret_cast で作ったポインタは元の型に reinterpret_cast で戻してからじゃないと使えないよ。
これだと全部のポインタを char Hoge::* として使ってるから、元々 char のメンバ以外に使うと
未定義動作になっちゃう。
0821デフォルトの名無しさん
2011/08/30(火) 03:55:48.07ってことはどの道、どこまでも型名が必要になってくるのか
とりあえず template <typename T> T Hoge::* へのキャストを追加して、さらに参照として取得できるようにしてみた
http://codepad.org/wIBEffNK
0822デフォルトの名無しさん
2011/08/30(火) 10:27:21.45下記のようなコードにおいて、test1 ってなにものになるんですか?
class CTest{
};
int main(int argc,char* argv[])
{
CTest test1();
return 1;
}
0823デフォルトの名無しさん
2011/08/30(火) 10:33:34.190824デフォルトの名無しさん
2011/08/30(火) 10:43:03.40私もそう思ってたんですが、下記のコードはコンパイル通りません。
こんなエラーが出ます:
request for member `func' in `test1()', which is of non-aggregate type `CTest ()()'
以下コード:
#include <stdio.h>
class CTest{
public:
void func(){printf("func.\n");};
};
int main(int argc,char* argv[])
{
CTest test1();
test1.func();
return 1;
}
0825デフォルトの名無しさん
2011/08/30(火) 10:44:45.460826デフォルトの名無しさん
2011/08/30(火) 10:47:52.97?
補足すると、
CTest test1;
と書いた場合はもちろん正常に動作します。
0827デフォルトの名無しさん
2011/08/30(火) 10:57:35.580828デフォルトの名無しさん
2011/08/30(火) 10:58:16.90CTest test1;
のような気がする、なぜなら
CTest test1 = CTest();
だとコピーコンストラクタが動くことになるが、そうならない方法もあったような。
0829デフォルトの名無しさん
2011/08/30(火) 10:58:59.85おおお、そうか、なんか引っかかってたんだそういうことかー!!?!!
ありがとうございますありがとうございます。
0830デフォルトの名無しさん
2011/08/30(火) 13:59:38.16CTest test2(CTest test0);
// test2.func()
// test0.func();
0831デフォルトの名無しさん
2011/08/30(火) 16:53:10.98ユーザー定義型のせいでまどわされないようにCTestをintに置き換えてみよう
int test2(int test0);
0832デフォルトの名無しさん
2011/08/31(水) 10:05:53.810833デフォルトの名無しさん
2011/08/31(水) 16:30:40.03某メディアの人間だが、こんなお話が。
・フジの話は広告業界では大いに話題になっている。フジは火だるま状態。
広告をまともに出せないんじゃないかというレベル。
・韓流問題も大きかったが、あのタイミングでセシウム米問題が出たのが致命的だった。
あれでミキハウスがフジ系列から完全に手を引いた。
他のスポンサーも一気にフジから逃げ始めている。
・セシウム米がなかったらここまで大きな広がりになっていなかったかも。
韓流との合わせ技で、「このメディアはもう終わっているんじゃないか」という認識が広がった。
やはり米という日本人の琴線に触れるところでやらかしたのが厳しかったのでは。
・収拾はつかないかも。落としどころがないから。
それこそ全面謝罪して解社的出直しやるしかない。
0834デフォルトの名無しさん
2011/09/01(木) 00:50:17.87コンストラクタにサイズ渡したらそれで固定,
要素もそこで保持するだけで解体されるまでそのままなコレクションがほしいんだ
とりあえずunique_ptr<T[]>で保持してたんだけど,
どうせならbegin-endのiterationくらい使ってみたい(STL自体とC++11の新要素平行して学習中)
静的なサイズじゃないからスタックには置けない=arrayは使えないけど
可変でなくていいからvectorは十分にしても必要ではない気がする.
丁度必要十分なコンテナって(準標準くらいまでのイメージのライブラリで)存在する?
それとも,サイズ変動なければvectorより速くはほぼならないから要らないってことだろか.
0835デフォルトの名無しさん
2011/09/01(木) 01:20:04.210836デフォルトの名無しさん
2011/09/01(木) 01:35:25.52arrayってその意味合いのつもり.
…std::arrayとboost::arrayってできること変わってないよね?
arrayって生の配列の単なるwrapであって,
コンパイル時点でサイズ決定してなきゃだめだよね.
サイズはTemplate引数だったと思うし.
実行時に大きさ指定できるのであれば確かに理想.やり方知りたい
0837デフォルトの名無しさん
2011/09/01(木) 01:40:57.30まあ素直にvector使えよってかんじだけど
0838デフォルトの名無しさん
2011/09/01(木) 01:45:02.260839デフォルトの名無しさん
2011/09/01(木) 01:51:04.00疑問に思えたのに知らないままにして,変な自己流通してたら勿体無いな,と.
折角だからmake_iterator_range調べてみる,ありがとう
0840デフォルトの名無しさん
2011/09/01(木) 01:54:31.350841デフォルトの名無しさん
2011/09/01(木) 04:54:03.370842デフォルトの名無しさん
2011/09/01(木) 13:13:20.40環境は Linux、GCC です。
0843デフォルトの名無しさん
2011/09/01(木) 13:29:31.110844デフォルトの名無しさん
2011/09/01(木) 13:38:55.050845842
2011/09/01(木) 18:43:00.26>>844
ありがとうございます。
現在Perlで行っている処理を高速化するためにC++で書き換えています。
Perlではネット上から取得したhtmlファイルなどを
直接変数にぶち込む手段(LWP::UserAgent)が用意されています。
C++で、system( "wget URL -P dest-dir") を行った場合
一度ファイルが生成されてしまうため、
ほぼ同じアルゴリズムのC++とPerlのプログラムを比較すると
HDDへのアクセスとメモリへのアクセスの差から
Perlの方がスクリプト言語ながら圧倒的に早い結果が出てしまいます。
何か対策は無いでしょうか。
できればLinux環境が良いですが、VC++で何とかならないか、とも考えています。
0846デフォルトの名無しさん
2011/09/01(木) 18:46:51.93これ以上はスレチ
0847デフォルトの名無しさん
2011/09/01(木) 19:56:00.14Linuxプログラミング 2
http://hibari.2ch.net/test/read.cgi/linux/1266040395/
0848デフォルトの名無しさん
2011/09/01(木) 21:43:10.14curlとかでも使うと楽かもね
ネットワークのプログラムスレにでも行くといいよ
0850デフォルトの名無しさん
2011/09/02(金) 00:05:39.86C++なら、普通に boost::asio が真っ先に出るべき
ついでに、 boost::thread も使いたくなると思うので、合わせて見るべき
ダウンロードだけなら、30行も書かずに望みは叶うとおもうよ
特にスレチでもない
0851デフォルトの名無しさん
2011/09/02(金) 00:06:50.180852デフォルトの名無しさん
2011/09/02(金) 01:45:44.76// 仮想デストラクタを持たない
};
class Derived : public Base {
};
Base * p = new Derived();
delete p;
これは未定義動作のはずだけど、
Derived * p = new Derived();
delete p;
Q. これは許可されていますか?
0853デフォルトの名無しさん
2011/09/02(金) 01:47:51.470854デフォルトの名無しさん
2011/09/02(金) 02:26:04.310855デフォルトの名無しさん
2011/09/02(金) 10:59:42.56何コレwwwwwwwwwwwww死ぬの?
http://ja.wikipedia.org/wiki/%E5%B1%B1%E5%B2%A1%E8%B3%A2%E6%AC%A1
山岡 賢次(やまおか けんじ、旧氏名:藤野 賢二、ふじの けんじ、旧氏名における旧姓:佐藤、金子、1943年4月25日 - )
は、日本の政治家。衆議院議員(5期)。パチンコチェーンストア協会政治分野アドバイザー[1]。健全なネットワークビジネス
を育てる議員連盟顧問。
民主党副代表、民主党広報委員長。民主党国会対策委員長、参議院議員(2期)を歴任。
パチンコチェーンストア協会政治分野アドバイザー
wwwwwwwww
吹いたわwwwwwwwwwwwww
0856デフォルトの名無しさん
2011/09/03(土) 20:36:04.57記述の方法とかはVBやってたんで分かります。
無数にある関数とかそれを使ったプログラムなど
自分でガリガリコーディングする題材になりそうなものないですか?
0857デフォルトの名無しさん
2011/09/03(土) 20:43:15.34演習問題てんこ盛りで「答えはこれ1つ」と押しつけてこない
0858デフォルトの名無しさん
2011/09/03(土) 23:06:01.760859デフォルトの名無しさん
2011/09/03(土) 23:09:40.17という点で理解できない
0860デフォルトの名無しさん
2011/09/03(土) 23:41:53.270861デフォルトの名無しさん
2011/09/04(日) 01:55:36.25CでかいたらC++より高速でサイズが小さい。
ライブラリが貧弱だけど、なんでも自作できるひとがCをつかうから問題ない
0862デフォルトの名無しさん
2011/09/04(日) 02:37:29.09CとC++で同じプログラムについて実行速度やバイナリサイズに差が出るわけないと思うんだけど、
なんかそんな差を生じるような違いってあったっけ?
0863デフォルトの名無しさん
2011/09/04(日) 02:38:00.650864デフォルトの名無しさん
2011/09/04(日) 02:40:28.900865デフォルトの名無しさん
2011/09/04(日) 03:28:12.25実装したいのは作るプログラムの機能であって、C++の機能を実装したいのではない
目的と手段を入れ替えるのよくない
0866デフォルトの名無しさん
2011/09/04(日) 03:39:03.47括弧内が省力されてるだけでしょ
0867デフォルトの名無しさん
2011/09/04(日) 03:39:14.440868デフォルトの名無しさん
2011/09/04(日) 03:45:53.430869デフォルトの名無しさん
2011/09/04(日) 04:08:29.63てかそもそもCコンパイラとか存在意義が不明だし
普通にバイナリエディタでEXEやELFファイル書けばいいし
0870デフォルトの名無しさん
2011/09/04(日) 04:32:12.950871デフォルトの名無しさん
2011/09/04(日) 08:03:28.980872デフォルトの名無しさん
2011/09/04(日) 08:23:04.470873デフォルトの名無しさん
2011/09/04(日) 08:36:55.10ライブラリが貧弱だけど、なんでも自作できるひとがHDLをつかうから問題ない
0874デフォルトの名無しさん
2011/09/04(日) 12:57:46.930875デフォルトの名無しさん
2011/09/04(日) 13:01:56.75お前が環境を変えるんだ!
0876デフォルトの名無しさん
2011/09/04(日) 13:02:05.830877デフォルトの名無しさん
2011/09/04(日) 13:04:18.690878デフォルトの名無しさん
2011/09/04(日) 13:10:00.16C++の言語の継承機能はべつに使わなくてもいい
0879デフォルトの名無しさん
2011/09/04(日) 13:17:32.680880デフォルトの名無しさん
2011/09/04(日) 13:20:05.42ところがSI業界だけはいまだにC++が最先端だと思ってるという
0881デフォルトの名無しさん
2011/09/04(日) 13:25:26.40世間知らず
0882デフォルトの名無しさん
2011/09/04(日) 13:30:01.050883デフォルトの名無しさん
2011/09/04(日) 13:35:46.630884デフォルトの名無しさん
2011/09/04(日) 13:51:57.04速度を求められるソフトを作るならC++(ゲーム開発はこれいったく←【なぜか変換できない】)
本当に資源が限られたファームウェア開発とかならC(保険の意もかねて)
0885デフォルトの名無しさん
2011/09/04(日) 17:56:50.92平日に昼にビジネス街!
女性の参加が多いデモです
ナイトの参加求む!!!
【平日に】花王本社デモ part10【突撃】
http://yuzuru.2ch.net/test/read.cgi/offmatrix/1314978585/
◆開催日について
日程 : 9月16日(金)
時間 : 11時集合 スタート11時30分
集合場所 : 中央区坂元町公園
解散 : 浜町公園
ルート: 後日発表(水天宮は通ります)
雨天決行 荒天中止
0886デフォルトの名無しさん
2011/09/07(水) 01:24:51.21stlで処理速度が気になるなら、自前でありきたりなデータ構造実装しなおして、
テンプレートメタなプログラムでも書けば早いんでねーの?
最近の新しい言語を色々と齧ったおかげでか、実はc、c++だけで良い気がしてきたぞ
0887デフォルトの名無しさん
2011/09/07(水) 02:20:46.34構文解析さえし易ければ・・・
0888デフォルトの名無しさん
2011/09/07(水) 02:40:28.460889デフォルトの名無しさん
2011/09/07(水) 10:30:21.48STLのスタックってベクトルみたいにサイズ超えたらゼンコピじゃなくて?
リストみたいに一個ずつくっつけていく形式ですよね。
言い換えるならpushの時間は常に不変ですよね?
0890デフォルトの名無しさん
2011/09/07(水) 10:37:06.740891デフォルトの名無しさん
2011/09/07(水) 11:01:44.120892デフォルトの名無しさん
2011/09/07(水) 11:27:27.660893デフォルトの名無しさん
2011/09/07(水) 12:06:26.66dequeを使ったstackのpushも定数時間です
0894デフォルトの名無しさん
2011/09/07(水) 15:51:02.620895デフォルトの名無しさん
2011/09/07(水) 17:32:34.46�@では const ポインタを渡されるような条件・場合では、渡されたポインタが指す先を変更しない
クラス Hoge はコンストラクタで渡されたポインタ(pTarget)を対象に何かしらの処理をするクラスなんだけど、const と 非 const のどちらでも受け取れるようにしたい
どうやって記述するのがおすすめ?
0896895
2011/09/07(水) 17:35:40.42class Hoge
public:
Hoge(Piyo * pTarget)
: pTarget(pTarget) {}
private:
Piyo * pTarget;
};
Piyo p;
const Piyo pc;
Hoge(&p);
Hoge(const_cast<Piyo *>(pc));
�A
class Hoge
public:
Hoge(Piyo * pTarget)
: pTarget(pTarget), pTargetConst(NULL) {}
Hoge(const Piyo * pTarget)
: pTarget(NULL), pTargetConst(pTarget) {}
private:
Piyo * pTarget;
const Piyo * pTargetConst;
};
Piyo p;
const Piyo pc;
Hoge h1(&p);
hoge h2(&pc);
0898デフォルトの名無しさん
2011/09/07(水) 17:44:53.92struct Hoge {
Hoge(Piyo const * p) : p(p) {}
private:
Piyo const * p;
};
どっちも受け入れて非const操作をするならバグの元なので別の方法を考える
0899895
2011/09/07(水) 18:09:21.81非 const ポインタを渡されるパターンでは、渡されたポインタが指す先を変更する
const ポインタを渡されるパターンでは、渡されたポインタが指す先を変更しない
0900デフォルトの名無しさん
2011/09/07(水) 18:10:24.150901デフォルトの名無しさん
2011/09/07(水) 18:21:39.44vectorでもlistでももちろんdequeでも末尾での挿入・削除は定数時間。
ただしここでいう定数時間は計算量が要素数には依存しないという意味で
処理時間が常に不変という意味ではなく、規格では具体的な処理時間についてはなにも保証しない。
0902デフォルトの名無しさん
2011/09/07(水) 19:16:25.08人が親切に馬鹿なことやめろって忠告してやってるのにね
独学じゃアホなコード大量生産するだけだぞ
0904デフォルトの名無しさん
2011/09/07(水) 22:44:33.980905デフォルトの名無しさん
2011/09/07(水) 22:55:29.80↑こういう一言が余計で、そして態度悪い。
他人に、案なり答えなり尋ねてるんじゃないの?って言う。 人間性疑うわ
0906895
2011/09/07(水) 23:14:20.40お前は揚げ足取って
> struct Hoge {
> Hoge(Piyo const * p) : p(p) {}
> private:
> Piyo const * p;
> };
みたいな馬鹿な回答した奴を擁護するつもりか?
態度が悪い回答者が質問者を弄るのはよくある話だ
俺はその回答(?)者をさらっと投げ捨てただけだし、何も問題はない
そして質問内容は事故解決したから、もういい
下らない論争も勘弁
0907デフォルトの名無しさん
2011/09/07(水) 23:23:28.83もういいんなら消えろよ、ゴミレスしてねえで
もうよくねえんだろ? 毒吐きてえんだろ? おい便所虫
0908デフォルトの名無しさん
2011/09/07(水) 23:25:27.80擁護とかどっちの味方みたいな話じゃなくて、
実際に目の前でこんな話してたら、普通は相手が例え馬鹿な回答したとしても、
「すみませんが、そうではなくて」 と、「意図の説明」 をするだろっての。
伝わってなかったのかなと。 解決させたくて話しかけてるんだから。
どっちの擁護とか、そういう発想やめなさい
0909895
2011/09/08(木) 00:28:22.36俺には人をおちょくっているようにしか見えない
1. 自分がそのおちょくりに対してガッカリしてしまった
2. >>898 がアホなレスをした
ただそれだけの話
>>907
安価されないor話題に飽きたら消えるよ
実は>>899を書いた直後に達成してた。それはもういいです
0910デフォルトの名無しさん
2011/09/08(木) 00:34:14.26違う。解決させたくて話しかけてるんだから、伝わらなかったら意図の説明するだろってのは、お前の事。
「どっちがおすすめ」 か聞きたかったから、このスレの人間に話かけたんだろ?
それで望まない返答もらったんだろ? その時、伝わってなかったのかなと、
もしも目の前で話をしてたら、質問の意図をお前は説明して、解決に向かおうとするだろ?
他人のことじゃなくて、お前自身の事だよ。自省と会話の話だよ
0911デフォルトの名無しさん
2011/09/08(木) 00:36:32.31それに対して無礼な態度を取ったのは >>895 の方に見えるよ。読み返してごらんなさい
まるで自己中な子供だ
0912デフォルトの名無しさん
2011/09/08(木) 00:44:05.610913デフォルトの名無しさん
2011/09/08(木) 00:47:58.89なるほど、安価しておちょくって欲しいのかマゾ野郎
便所の落書きとコーラスがそんなに楽しいかいw
0914895
2011/09/08(木) 00:56:41.35>�@では const ポインタを渡されるような条件・場合では、渡されたポインタが指す先を変更しない
(また、�Aでは const ポインタと非 const ポインタ 2 つを保存しようとしているので、const・非 const 操作どちらとも使用としていることは明白)
>>898
>どっちでも受け入れるならconst操作しかしないんだろうと考えて ...
>... どっちも受け入れて非const操作をするならバグの元なので別の方法を考える
const操作しかしないんだろうと → まず質問をよく理解してないか、天邪鬼なレス
別の方法を考える → 思考停止、または質問の投げ捨て
だから必要無いと答えたんだよ?
0915デフォルトの名無しさん
2011/09/08(木) 00:58:55.07型消去とoperator ->使えばいいよ
これで完結なのでもう寝ようね
0916895
2011/09/08(木) 01:02:21.37>>902
>人が親切に馬鹿なことやめろって忠告してやってるのにね
だからそういう(>>898)レスをしたんだね
そしてそこまで目標じゃないだろうに、何で止めてくれたのかね
0917デフォルトの名無しさん
2011/09/08(木) 01:04:03.49> まず質問をよく理解してない
何か悪いのかよ?
理解して欲しいのは誰だよ?
おまえ努力の方向が間違ってるんだよ
コンパイルエラーするたびに規格票を破り捨ててるようなものだ、ただのキチガイ
0918デフォルトの名無しさん
2011/09/08(木) 01:04:44.760919895
2011/09/08(木) 01:14:30.72アプリが動きません><→windows再インストールしろ と同じレベルの回答をしておちょくられたから、
「あ、これは相手にされてないし、相手するのも無駄だな」と思った
馬鹿にされたから馬鹿にし返した。それだけの低レベルな話だろ
>>918
お前は糞ライブラリ糞クラスの改修を手伝わされる気持ちがわかりますか?
0920デフォルトの名無しさん
2011/09/08(木) 01:18:17.70あ、任せるような企業だから>>896みたいなコードになるのか
0921デフォルトの名無しさん
2011/09/08(木) 01:27:08.75それなら心が荒んでもしょうがない
かわいそうに
0922デフォルトの名無しさん
2011/09/08(木) 01:33:00.89おまえ、こう言っただろ
> まず質問をよく理解してない
> そう言ってくれなければ質問者も分からない
どっちなんだ?
矛盾した話が通じないのは、その話をした者以外の誰にも責任ないぞアホ
0923895
2011/09/08(木) 01:44:27.92どの内容がどの内容と矛盾しているのか教えてくれ。語尾に色々付けたがる君
0924デフォルトの名無しさん
2011/09/08(木) 01:45:35.32質問者の質問内容が理解出来なかったら、回答者は「日本語でおk」と返せ
と言ってるんだろう
0925デフォルトの名無しさん
2011/09/08(木) 01:47:54.910926デフォルトの名無しさん
2011/09/08(木) 01:48:22.63はははは、世の中みんな「天の邪鬼」ばっかりで気の毒だねー
0927デフォルトの名無しさん
2011/09/08(木) 01:50:46.65おれは休みなんで夜更かし(^^)
0928895
2011/09/08(木) 02:03:48.06お前はそれで心が許すのかもしれないが、俺が何かしらの質問に応答するときはそんなことは言わないな
答えられる可能性があるのであれば分からない点を質問者に尋ねる
答えられそうに無いのならそもそもレスしない
>>925
誰もキレていない。既に論争ごっこの場になってるだろ
本当にキレてるか、単なる・・・まぁいいや。そういう奴が1人紛れてるがな
はー流石に疲れた
そろそろ俺は抜けますよ。逃げじゃないっすよ?俺を逃げさせたら大したもんですよ
0929デフォルトの名無しさん
2011/09/08(木) 02:11:10.76どこの馬の骨とも知らんやつが、どう応答したかろうが、疲れようが、逃げようが、公衆にとってどうでもいい
よっぽど聞いて欲しかったんだろうな、もっと身近な人に言えばいいのに
駅前で不特定多数を叱り飛ばしてる危ないオヤジそのものじゃんw
0930デフォルトの名無しさん
2011/09/08(木) 08:07:09.60まぁいいや、今日は何をほざいてくれるのか楽しみに待っていよう。
0931デフォルトの名無しさん
2011/09/08(木) 19:59:32.58極端な話、1万くらい特殊化したクラスを作れるでしょうか。
0932デフォルトの名無しさん
2011/09/08(木) 20:33:51.91再帰的な特殊化ならデフォルトオプションのVC++2010で約500前後が限界。
0933デフォルトの名無しさん
2011/09/08(木) 21:04:43.45亀レスだがvectorの末尾に追加は要素数に依存するんじゃないか?メモリの確保にいった場合
平均すると同じくらいの時間になるようになってるとかはあった気がするけど
0934デフォルトの名無しさん
2011/09/08(木) 22:43:11.230935931
2011/09/08(木) 22:58:03.63ありがとう。普通の特殊化なので少し安心しました。
使ってるのがBCBでまだちょっと不安なので問題が起きた時
対処可能に書いときます。
0936デフォルトの名無しさん
2011/09/08(木) 23:10:36.170937デフォルトの名無しさん
2011/09/09(金) 22:39:23.240938デフォルトの名無しさん
2011/09/09(金) 22:55:54.90ttp://chasen.org/~taku/blog/archives/2007/02/_o1.html
0939デフォルトの名無しさん
2011/09/09(金) 23:16:38.91読み出し時にリストを結合して1配列化。
結合した領域に空きがなくなると、また1024要素の領域を
結合した領域に続けてリストとして生成。
こんなコンテナ作ったらO(1)のvectorより、たやすく10倍以上の速度を出せた。
しかし、最適化を書けたstringの+=には全く勝てんかった。
アレはどうなってんだ?化物みたいにはええぞ。
0940デフォルトの名無しさん
2011/09/09(金) 23:54:23.98そういうのは等価でない処理を比較してて結局正当な比較になってないことがほとんど。
0941デフォルトの名無しさん
2011/09/10(土) 12:40:10.03char型ないしintを放り込むなら、
stringで+=もvectorでpush_backも条件は同じじゃん。
char[]を突っ込んだりするなら話は別だろうけど。
0942デフォルトの名無しさん
2011/09/10(土) 12:43:49.15実際に比較に使ったコードを曝して味噌。
ついでに、コンパイラとコンパイルオプションもね。
本人は気付いていないところで等価になっていないんじゃないかと私も思うよ。
0943デフォルトの名無しさん
2011/09/10(土) 13:04:43.80std::stringとMFCのCStringでは、どっちが速いのでせう?
0944デフォルトの名無しさん
2011/09/10(土) 13:36:42.750945デフォルトの名無しさん
2011/09/10(土) 13:43:26.030946デフォルトの名無しさん
2011/09/11(日) 00:23:58.57std::sort() を使いなさいって言われた 16 歳の夏
0947デフォルトの名無しさん
2011/09/11(日) 00:30:45.740948デフォルトの名無しさん
2011/09/11(日) 02:27:49.43要素の追加が多くて参照が少ない という条件下なら
vectorよりも>>939のコンテナが速そうだと思うけどな
測定後ボトルネックがわかったら
特定条件下で速くなるようなコンテナを作ることはたまにあるよ
0949デフォルトの名無しさん
2011/09/11(日) 09:13:26.57Cならvsprintf()(かその安全化版)のお世話になると思うのですが(例↓)
int custom_varstring(char* buf, size_t n, const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
int r = vsprintf(buf, fmt, ap);
va_end(ap);
return r;
}
いまどき固定長のバッファ(上の例のbuf)を呼び出し元で用意するとかダサい気がします。
C++のostream風にすっきりstd::stringな世界だけで解決したいのですがどうすればよいのでしょうか。
0950デフォルトの名無しさん
2011/09/11(日) 09:22:41.53バッファの確保をしながら vsprintf() を呼び出す関数を作るとか、
boost::format 採用するとか。
0951デフォルトの名無しさん
2011/09/11(日) 09:43:56.47�dクス
バッファを確保しながらvsprintf()を呼び出す方向でやろうかと思います
よく考えたら、printf()風の書式指定とか引数省略記号"..."とかはCの世界の遺産なので、
C++の世界にそんなもん持ち込むからにはコードがダサくなるのも仕方ないかなという気がしてきた、、
可変長引数一般の実現について言えば、ostreamの<<演算子みたいなものを自前で実装して
呼び出す人にもそれを使ってもらえば良いわけだし(boost::formtの%もこの方針ぽい)
0952デフォルトの名無しさん
2011/09/11(日) 13:02:49.790953デフォルトの名無しさん
2011/09/11(日) 16:44:35.81ごめん。古い話だからコンテナ部分しか残ってないわ。
コンテナ晒すから、自分の納得するようにベンチしてみて。
あと、コンテナの内部的に使うことを目的としてたから、
バイトデータがベースでジェネリックじゃない。
そのへんも納得するようにやってみとくれ。
http://codepad.org/enAH4P4O
>>948
そうだね。参照は頻繁じゃなく、散発的な追加が多い状況を想定して作ったよ。
ま、それにしてもstringの+=の速さは異常。
0954デフォルトの名無しさん
2011/09/11(日) 16:55:19.11ostringstreamの事いいたいんじゃないの?
0955TreeBoa君
2011/09/11(日) 23:38:34.89これC++で作ってるらしいけどお前ら作れないの?
やっぱりLLしかできないの?
ネットワークプログラミングとかできないの?
0956デフォルトの名無しさん
2011/09/11(日) 23:50:43.07CADは仕事で作ったな。
0957デフォルトの名無しさん
2011/09/12(月) 00:05:48.05それC++で作ってるらしいけど、料理出来ないの?車磨けないの?って言った?
0958デフォルトの名無しさん
2011/09/12(月) 00:22:57.12ttp://ideone.com/rtHEM
ttp://ideone.com/SWb1S
誤差が多くはっきりしないが、少なくともvectorより10倍速いとかstringの+=が必ずしも速いとかはいえなかった。
ちなみに上記のソースをウチのローカルで最適化かけて実行した場合は
arraysizeが12のときはstringの+=が最速、arraysizeが1234のときはreserveしたvectorが最速、という結果だった。
0959デフォルトの名無しさん
2011/09/12(月) 00:30:27.55そういやうちのコンパイル形式書いてなかった。これだけ。
gcc -O3 source.cpp
そっちはVC?
0960デフォルトの名無しさん
2011/09/12(月) 00:46:08.50BinalyPool; 90000
vector<Byte>; 120000
vector<Byte>::reserve(cnt); 130000
deque<Byte>; 110000
basic_string<Byte> 120000
//面倒なんで型名省略
g++:
time: 70000
time: 130000
time: 150000
time: 100000
time: 120000
clang:
time: 60000
time: 140000
time: 130000
time: 100000
time: 100000
なるほどね。
前見たときは、string最強だったんだけど
なんか条件が違うんだろうね調べてみるわ。
0961デフォルトの名無しさん
2011/09/12(月) 02:04:22.87basic_string& operator+=( const charT* s);
に途中に'\0'を含む配列を渡してて途中までしかコピーしてないと推測
0962デフォルトの名無しさん
2011/09/12(月) 02:19:15.14coutへのバッファリングまで含めた時間を計測してないか?
あと短い文字列の場合フリーストアではなくクラス内部のバッファを使う事があるかも
http://ideone.com/ryYPH
0963962
2011/09/12(月) 02:35:30.19c_str()は内部バッファへのポインタを返すメソッドだと勘違いしてた
0964958
2011/09/12(月) 09:10:17.73ttp://ideone.com/ab4Ny
0965デフォルトの名無しさん
2011/09/13(火) 08:23:35.88{
static const int DefaultValue = 3; // 1.1
static int GetDefaultValue() { return 3; } // 1.2
static const std::vector<int> EmptyVector; // 2.1
static const std::vector<int> & GetEmptyVector()
{
static const std::vector<int> v;
retrn v;
} // 2.2
};
1.1 と 1.2、2.1 と 2.2 は、それぞれどちらを定義するべき?
場合によるのであれば、どういう条件で使い分けるべき?
0966デフォルトの名無しさん
2011/09/13(火) 08:49:19.35メンバ関数にした場合は、あとで中身をいじれるってよく言われるね
0967デフォルトの名無しさん
2011/09/13(火) 08:55:43.45clear()が用意されているんだからそれで充分じゃないのか?
もし必要なら、初期化するメンバ関数を用意してその中でclear()を呼べばいいし。
0968デフォルトの名無しさん
2011/09/13(火) 08:57:10.660969デフォルトの名無しさん
2011/09/13(火) 09:35:20.32初期化タイミングをコントロールできる/できないという違いが
選択基準になることがあるかな。
0970デフォルトの名無しさん
2011/09/13(火) 12:22:24.94int i1[DefaultValue]; // 可
int i2[GetDefaultValue()]; // コンパイルエラー
0971デフォルトの名無しさん
2011/09/13(火) 12:40:43.05それ以外なら1.2と2.2
初期化のタイミングがいつでもいいならその日の気分で良い
0972デフォルトの名無しさん
2011/09/13(火) 17:31:19.010973デフォルトの名無しさん
2011/09/13(火) 17:40:46.810974デフォルトの名無しさん
2011/09/13(火) 20:04:44.870975デフォルトの名無しさん
2011/09/13(火) 20:09:34.01C++相談室 part91
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part90
http://hibari.2ch.net/test/read.cgi/tech/1310885439/
このスレもよろしくね。
http://hibari.2ch.net/test/read.cgi/tech/1299218426/
ついでに壁紙にしてね。
http://www.research.att.com/~bs/Bjarne.jpg
0976デフォルトの名無しさん
2011/09/13(火) 20:10:18.160977デフォルトの名無しさん
2011/09/13(火) 20:32:01.660978965
2011/09/13(火) 21:00:29.81初期化順序がどうでもいい変数については 1.1 または 2.1 の記述を使うようにします
空のvectorを返す理由を、馬鹿な私にも分かるように説明プリーズ。
0980デフォルトの名無しさん
2011/09/13(火) 21:40:50.11普通は、デフォルト値を表すオブジェクトを用意すべき。
それをクラスでやるかファクトリーの形で提供するかは
好きにしたらいいけど。
0981デフォルトの名無しさん
2011/09/13(火) 22:10:23.47テンプレこのままでいいの?
二つ目のスレdat落ちしてるみたいだが
0982デフォルトの名無しさん
2011/09/13(火) 22:53:48.99【初心者歓迎】C/C++室 Ver.76【環境依存OK
http://hibari.2ch.net/test/read.cgi/tech/1312621728/
0983デフォルトの名無しさん
2011/09/13(火) 23:00:20.760984デフォルトの名無しさん
2011/09/13(火) 23:03:47.65http://hibari.2ch.net/test/read.cgi/tech/1315922506/
0985デフォルトの名無しさん
2011/09/13(火) 23:04:47.38あれじゃね、constだし空のオブジェクトを単一にして節約みたいなことすんじゃね。
そこまで考えてないと思うけど。
map["key1"] = &Hoge::EmptyVector;
map["key2"] = &Hoge::EmptyVector;
map["key3"] = &Hoge::EmptyVector;
map["key4"] = &Hoge::EmptyVector;
map["key5"] = &Hoge::EmptyVector;
std::vector<int> instance;
map["key2"] = &instance;
みたいな。
0986デフォルトの名無しさん
2011/09/13(火) 23:26:06.34std::vector<int> EmptyIntVector;
map["key1"] = & EmptyIntVector;
で何がいけないんだ?
やっぱり判らん。
0987デフォルトの名無しさん
2011/09/13(火) 23:26:19.65おつ
0988デフォルトの名無しさん
2011/09/13(火) 23:33:48.23間違えたconst std::vector<int> instance;ね。
参照しかしないならチビッと意味があるだろうね。
あとnullの代わりに&EmptyVector == map[key];って事が可能ではある。
俺ならそういう用途にvector自体を使うことはないけど。
なんらかのNullオブジェクトを用意するわ。
0989デフォルトの名無しさん
2011/09/13(火) 23:36:39.73代入よりswapを使うことが多いと思うけど
0990デフォルトの名無しさん
2011/09/14(水) 00:11:07.700991デフォルトの名無しさん
2011/09/14(水) 00:18:55.00サンプルコードのスミまでつついて揚げ足とろうとやっきになるのはム板住民の悪癖だ
0992デフォルトの名無しさん
2011/09/14(水) 00:29:12.160993デフォルトの名無しさん
2011/09/14(水) 00:30:32.400994デフォルトの名無しさん
2011/09/14(水) 00:33:06.37そんな殺伐とした雰囲気が良いんじゃねえか。女子供はすっこんでろ。
0995デフォルトの名無しさん
2011/09/14(水) 07:35:11.670996デフォルトの名無しさん
2011/09/14(水) 10:27:44.680997デフォルトの名無しさん
2011/09/14(水) 11:23:06.350998デフォルトの名無しさん
2011/09/14(水) 11:57:08.270999○
2011/09/14(水) 15:11:59.29当初は「こんな電腦掲示板、何たる幼稚加減」と馬鹿にしていたものの、行って見ると存外に面白い。
華やかな色彩の髪と目を持つうら若き乙女に「ゆとり乙」と何度と無く罵られるにつけ、食うや食わずで慌しく過ぎ去った学生時代が自ずと思ひ返され、「戦争さえ無ければ、小生もこのような青春が送れたやも知れぬ」と独りごちることもしばしば。
すっかり虜となつた今では、孫の部屋から白銀色のノートパソコンをせしめては書斎に篭り存分に「祭り」を堪能する毎日を送っている。
同年代の友人達が痴呆や重い病に悩まされるなか、老いて尚矍鑠としてオフ会に向かう事が出来るのも、ひとえに2チャンネルのおかげかと思えば、再三に渡る「半年ROMってろ」の罵り文句も、何やら「まだまだ死ぬには早いよ」と言われているようで愉快極まりない。
ひとつ間違えれば自らが乗り込んでいた機体と同じ名前を持つコテハンに出会える日を樂しみにしつつ、今日もディスプレイに向かう。
それでは、壱千ゲット。「原文は.batスレ」
1000デフォルトの名無しさん
2011/09/14(水) 15:12:47.8910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。