C++相談室 part89
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/05/03(火) 17:22:30.70ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part88
http://hibari.2ch.net/test/read.cgi/tech/1297142195/
このスレもよろしくね。
http://hibari.2ch.net/test/read.cgi/tech/1299218426/
ついでに壁紙にしてね。
http://www.research.att.com/~bs/Bjarne.jpg
0002デフォルトの名無しさん
2011/05/03(火) 17:23:41.26[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/05/03(火) 17:24:01.92[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/05/03(火) 17:24:24.38amazon 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/05/03(火) 17:24:44.44Effective 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/05/03(火) 17:45:21.120007デフォルトの名無しさん
2011/05/03(火) 19:06:40.60ああいうニワカはマジで消えて欲しい
彼らはもっと批判的な態度を取るべきだ
0008デフォルトの名無しさん
2011/05/03(火) 19:12:01.39乙です
0009デフォルトの名無しさん
2011/05/03(火) 21:25:04.74コードの中に時々出てくる『:』(コロン)『::』(コロン2つ)
ってなんなんですか?
0010デフォルトの名無しさん
2011/05/03(火) 21:30:08.27コロン 2 個は名前空間
コロン 1 個は三項演算子とか switch 文の区切りとか
同じ記号を使っていますが、意味的には全く関係ありません
分かり辛いですよね・・・
0011デフォルトの名無しさん
2011/05/03(火) 21:36:58.60コロン1つは>>10
コロン2つは「○○::△△」で○○の△△を表す。
「北海道::山田太郎」で北海道の山田太郎さんをあらわす記法
0012デフォルトの名無しさん
2011/05/03(火) 21:49:05.27なるほどー、たしかに似てるのに全然違う意味なんですね。
分かりやすく教えて頂き、ありがとうございます。
0013デフォルトの名無しさん
2011/05/03(火) 23:00:45.74継承の:も忘れてはならんぜ
0014デフォルトの名無しさん
2011/05/03(火) 23:14:37.920015デフォルトの名無しさん
2011/05/03(火) 23:19:22.880016デフォルトの名無しさん
2011/05/03(火) 23:44:44.190017デフォルトの名無しさん
2011/05/03(火) 23:47:33.34* とか & に複数の意味を持たせるくらいなら、@ とか使えば良かったと思うのですが、
自称C++上級者の皆様はどうお考えですか。
0018デフォルトの名無しさん
2011/05/03(火) 23:49:42.260019デフォルトの名無しさん
2011/05/03(火) 23:54:16.630020デフォルトの名無しさん
2011/05/04(水) 00:06:02.98pHoge.func(); // pHoge->func();
pHoge -> hoge2; // pHoge = &hoge2;
pHoge.func(); // pHoge->func();
pHoge = @hoge; // pHoge = &hoge;
僕の考えた最強のポインタ構文
0021デフォルトの名無しさん
2011/05/04(水) 00:43:25.96トライグラフを増やすのはいやだったんだろう
0022デフォルトの名無しさん
2011/05/04(水) 01:00:51.36@ と $ はアセンブラ絡みでなんとなくいや
` は絶対いらん!と男塾ばりの意地で死亡確認
0023デフォルトの名無しさん
2011/05/04(水) 01:13:52.490024デフォルトの名無しさん
2011/05/04(水) 01:22:12.02C#みたいに . で済ませればハッピーだったのに
0025デフォルトの名無しさん
2011/05/04(水) 01:24:50.580026デフォルトの名無しさん
2011/05/04(水) 01:53:00.28昔はアロー演算子なんかなかったから全部 . だった。
0027デフォルトの名無しさん
2011/05/04(水) 02:05:40.71. だけで -> も兼ねれば良い
0028デフォルトの名無しさん
2011/05/04(水) 03:05:34.910029デフォルトの名無しさん
2011/05/04(水) 03:18:36.300030デフォルトの名無しさん
2011/05/04(水) 04:32:55.42環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0031デフォルトの名無しさん
2011/05/04(水) 07:12:44.00または「この関数はこの関数をオーバーライドしたもの」であることをチェック(例えば boost::static_assert 的なもので)する方法はありますか?
0032デフォルトの名無しさん
2011/05/04(水) 11:22:11.00基底クラスの関数にvirtualを付けなければ継承クラスの同名関数は無条件にオーバーライドされる
しかしそれをチェックする方法はない
これがC++の一つの問題点だ
実際に関数を呼び出してどちらが呼び出されるかは、クラスの定義を読まなければ分からない
0033デフォルトの名無しさん
2011/05/04(水) 12:18:33.08クラスの継承関係と調べたい関数名がわかってればできるんじゃね?
static_assert(
is_super_sub<sup, sub>::value &&
has_XXX<sup>::value &&
has_XXX<sub>::value);
こんな感じで
継承関係にあって同じメソッド名前を持ってればオーバーライド=trueだよね
0034デフォルトの名無しさん
2011/05/04(水) 17:43:02.480035デフォルトの名無しさん
2011/05/05(木) 07:09:33.64それだとオーバーロードになりませんか?
>>33
シグネチャが一致していることを調べる関数は無いんじゃないかな
0036デフォルトの名無しさん
2011/05/05(木) 09:24:05.71その型をメンバ関数の引数の型にしたいのですが、
コンパイルできません。
その関数は、privateで内部からのみ呼ぶつもりです。
どうすればよいでしょうか?
雰囲気はこういう感じです。
ヘッダーファイル
template<typename T>
class Tree {
private:
struct treeFormat{};
treeFormat & searchParent(const T &parent, const treeFormat ¤t);
};
ソースファイル
template<typename T> Tree::treeData & Tree<T>::searchParent(const T &parent, const Tree::treeFormat ¤t) {}
003736
2011/05/05(木) 09:29:45.73どちらにしても、コンパイルは通りませんが…
template<typename T> treeFormat & Tree<T>::searchParent(const T &parent, const treeFormat ¤t) {}
0038デフォルトの名無しさん
2011/05/05(木) 09:36:07.30typename Tree<T>::treeFormat &
searchParent(const T &parent, const typename Tree<T>::treeFormat ¤t);
004036
2011/05/05(木) 10:05:18.77typedefは関係なかったです。
戻り値に「typename Tree<T>::」を付けると、コンパイルされました。
仮引数には付けなくてもコンパイルされたので、勘違いしました。
ありがとうございます。
0041デフォルトの名無しさん
2011/05/05(木) 10:11:04.910042デフォルトの名無しさん
2011/05/05(木) 10:19:05.66template<int N> int number(double (&a)[N])
{
return N;
}
int main()
{
double b[]={1,2,3,4,5,6,7,8};
std::cout << number(b) << std::endl;
return 0;
}
が載っていたのですが、関数numberの引数 (&a)[N]の意味が
わかりません。これってどう解釈したらいいですか?
0043デフォルトの名無しさん
2011/05/05(木) 10:27:51.220044デフォルトの名無しさん
2011/05/05(木) 10:36:13.89うーん、参照ですか。 ()がないと double& a[N]となって
a[N]に対する参照になってしまうから、それを防ぐために()を
つけたと...
なんか、2次元配列を受け取る関数の引数
f(double (*x)[N]) {・・・}
で、*xに()をつけるのと似ていますね。
0045デフォルトの名無しさん
2011/05/05(木) 10:50:09.65VC++では「参照」の配列(サイズN)と解釈されて、エラーになってしまいますね。
0046デフォルトの名無しさん
2011/05/05(木) 13:16:30.580047デフォルトの名無しさん
2011/05/05(木) 13:20:21.50f<int (&)[5]>();
0048デフォルトの名無しさん
2011/05/05(木) 13:51:18.87ヘッダーファイル(sample.h)は次の通りです。
template<typename T>
class sample{
sample();
virtual ~sample();
};
cppファイルは次の通りです。
template<typename T>Tree<T>::Tree(){}
template<typename T>Tree<T>::~Tree() {}
他のソースでsample.hをインクルードし、「sample<int> foo;」と記述すると、以下のようなエラーが出ます。
undefined reference to `sample<int>::sample()
テンプレートを使う場合、どのようにコンストラクタ・デストラクタを定義すればよいでしょうか。
0049デフォルトの名無しさん
2011/05/05(木) 13:52:57.13ソースは以下の通りです。
template<typename T>sample<T>::sample(){}
template<typename T>sample<T>::~sample() {}
よろしくお願いします。
0050デフォルトの名無しさん
2011/05/05(木) 13:56:05.16全部へっだにかきなはれ
0051デフォルトの名無しさん
2011/05/05(木) 14:07:04.03コンストラクタもデストラクタもprivateになっているけどいいのか
0052デフォルトの名無しさん
2011/05/05(木) 14:27:28.18>それだとオーバーロードになりませんか?
なんでだよ
オーバーロードってのは引数の型や数が違う関数を定義する事だろうが
混乱してない?
0053デフォルトの名無しさん
2011/05/05(木) 14:30:11.810054デフォルトの名無しさん
2011/05/05(木) 14:32:20.73どうしてもcppに書きたい場合、以下のような宣言が必要なのですね。
template class sample<int>;
>>51
あ、間違えていました。
0055デフォルトの名無しさん
2011/05/05(木) 15:57:57.31禿げ同
0056デフォルトの名無しさん
2011/05/05(木) 16:31:15.73確かに、オーバーロードじゃなくて>>53が正解だ。失礼しました
結局のところ、明示的なオーバーライド関連の話は無理っぽいな・・・
0057デフォルトの名無しさん
2011/05/05(木) 16:44:48.670058デフォルトの名無しさん
2011/05/05(木) 18:49:37.14{
virtual void Hoge() { ... }
};
class Derived : public Base
{
void Hoge() { ... }
}
0059デフォルトの名無しさん
2011/05/05(木) 19:07:01.350060デフォルトの名無しさん
2011/05/05(木) 19:17:52.36{
virtual void Hoge() { ... }
}
0061デフォルトの名無しさん
2011/05/05(木) 19:33:28.340062デフォルトの名無しさん
2011/05/05(木) 19:57:43.28{
virtual void Hoge() override;
}
C++0xにご期待ください
0063デフォルトの名無しさん
2011/05/05(木) 20:01:38.16overrideキーワードは不毛なやり取りに終止符が打たれていいですね
0064デフォルトの名無しさん
2011/05/05(木) 20:07:09.360065デフォルトの名無しさん
2011/05/06(金) 10:59:20.07void Hoge() override;
override void Hoge();
0066デフォルトの名無しさん
2011/05/06(金) 11:00:20.570067デフォルトの名無しさん
2011/05/06(金) 14:55:15.29const int hoge();
戻り値に対する装飾じゃなく関数に対するものだから構文の一貫性取れてるでしょ
0068デフォルトの名無しさん
2011/05/06(金) 23:48:01.11{
public:
template <class U> Hoge(Hoge<U> const & other) { ・・・ } // A
Hoge(Hoge const & other) { ・・・ } // B
};
↑のようなケースでAがあればBがなくてもコピーするのに特に問題ないんだけど
そういう場合ってBをわざわざ書く意味あるかな?
というかHoge<T>::Hoge<T>とHoge<T>::Hogeの違いがわからん
0069デフォルトの名無しさん
2011/05/06(金) 23:55:25.480070デフォルトの名無しさん
2011/05/07(土) 00:49:30.22これのことかな?
http://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E3%83%A1%E3%83%B3%E3%83%90%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AB%E3%82%88%E3%82%8B%E5%9E%8B%E5%A4%89%E6%8F%9B(Coercion_by_Member_Template)
0071デフォルトの名無しさん
2011/05/07(土) 09:19:52.620072デフォルトの名無しさん
2011/05/07(土) 09:49:06.02int hoge() virtual;
virtual int hoge();
0073デフォルトの名無しさん
2011/05/09(月) 17:56:18.83初期化時にインスタンス自身の shared_ptr を使いたいばあい、
class Hoge
{
private:
typedef Hoge this_class;
public:
typedef boost::shared_ptr<this_class> shared_ptr;
shared_ptr Create()
{
shared_ptr p(new this_class);
... // ここで shared_ptr を使った初期化をする。
return p;
}
protected:
Hoge() {}
};
こんな感じで、Create() の中で初期化するしか無いんですか?
0074デフォルトの名無しさん
2011/05/10(火) 03:19:45.73少々長いので http://codepad.org/Zlh8RjWp に貼りました。
お願いします。
0075デフォルトの名無しさん
2011/05/10(火) 03:25:58.700076デフォルトの名無しさん
2011/05/10(火) 05:27:30.140077デフォルトの名無しさん
2011/05/10(火) 06:23:41.02#include <stdexcept>
#include <iostream>
class foo_exception : public std::runtime_error {
public: explicit foo_exception( const std::string& what_arg ) : std::runtime_error( what_arg ) {};
};
void f1( void ) { throw std::runtime_error( "ehh" ); }
void f2( void ) { throw foo_exception( "gee" ); }
void check( void (*f)(void) ) {
try {
f();
} catch( foo_exception& e ) {
std::cout << "foo_exception" << std::endl;
std::cout << e.what() << std::endl;
} catch( std::runtime_error& e ) {
std::cout << "std::runtime_error" << std::endl;
std::cout << e.what() << std::endl;
}
}
int main( void )
{
check(f1);
check(f2);
return 0;
}
Output:
std::runtime_error
ehh
foo_exception
gee
007877
2011/05/10(火) 07:04:35.63class foo_exception : public std::runtime_error {
public: explicit foo_exception( const std::string& what_arg ) : std::runtime_error( "foo_exception: " + what_arg ) {};
};
void f1( void ) { throw std::runtime_error( "ehh" ); }
void f2( void ) { throw foo_exception( "gee" ); }
void check( void (*f)(void) ) {
try {
f();
} catch( exception& e ) {
std::cout << e.what() << std::endl;
}
}
int main( void )
{
check(f1);
check(f2);
return 0;
}
Output:
ehh
foo_exception: gee
0079デフォルトの名無しさん
2011/05/10(火) 11:30:03.29const library::exception&でcatchして、typeidで分けるしか無いんじゃないの?
0080デフォルトの名無しさん
2011/05/10(火) 16:58:24.48まずは日本語を正しく解析しろ
0081デフォルトの名無しさん
2011/05/10(火) 18:05:18.610082デフォルトの名無しさん
2011/05/10(火) 18:08:29.86コールバックラムダがあればいいけど03じゃ書くのがめんどい
RTTIはコストがいやだから俺だったらマクロ選ぶかな
http://ideone.com/7cMUd
幸いにもtry-catchはブロックだから副作用も少ない
0083デフォルトの名無しさん
2011/05/10(火) 18:40:28.57今自分はitr=hoge.begin()してforループでitrを1つずつ増やして指定の位置に来たらerase・・・としてるんですがなんだか効率が悪そうで
0084デフォルトの名無しさん
2011/05/10(火) 18:51:50.76アルゴリズムとデータ構造を勉強して、それぞれのコンテナの特性を把握しましょう
0085デフォルトの名無しさん
2011/05/10(火) 18:53:47.88何も答えないよりたちがわるい
0086デフォルトの名無しさん
2011/05/10(火) 19:02:49.961. 削除処理の対象になるコンテナはどれ?例えば std::list とか、汎用とか
2. 指定する「位置」はどういう形で保持しているの?
0087デフォルトの名無しさん
2011/05/10(火) 19:08:38.34アホ乙
0088デフォルトの名無しさん
2011/05/10(火) 19:09:03.061.主にdequeを使っています
2 今のところintです。指定位置のitrを返すとかあれば苦労しないんですが
0089デフォルトの名無しさん
2011/05/10(火) 19:18:57.02dequeならできるとおもうお
0090デフォルトの名無しさん
2011/05/10(火) 19:26:51.11advance(it, index);
q.erase(it);
0091デフォルトの名無しさん
2011/05/10(火) 19:47:21.85おお!これはいいですね。ぜひ活用したいと思います
>>90
ほうほう、advanceなんてものがあったのですね
今回は削除だけなので89さんのが1行でよさそうですがこれも活用できそうです。
ありがとうございました
0092デフォルトの名無しさん
2011/05/10(火) 22:52:24.85#pragma setlocale("en-us")
このコードをWin7の32bit、VC++6.0 SP6 + SDK環境でビルドすると、「地域が無効です」とエラーが出てビルドできない
「Win7でVC++6.0はサポートしてませんYO!」というのは承知しているのだが、Win7+VC6環境がある人、
ビルドできるかどうか試してもらえないか?
当方LenovoのPCで、下記修正パッチも出ているので機種の問題かとも思っている。
(ちなみにこのパッチあてても変化なし)
ttp://www-06.ibm.com/jp/domino05/pc/download/download.nsf/jtechinfo/MIGR-75198
Win7だからロケールIDが変わっているのかと思いきや、レジストリ上は0409のところにen-usが入っている
コンパイラが何をもって「無効」と判断するのか、そういった情報でもあると嬉しい
0093デフォルトの名無しさん
2011/05/10(火) 23:10:46.73http://msdn.microsoft.com/library/39cwe7zf
0094デフォルトの名無しさん
2011/05/10(火) 23:51:10.88cinでは出来ないんですか
#include <iostream>
using namespace std;
int main(){
int n;
while(cin >> n){
cout << "n:" << n << endl;
}
return 0;
}
とやると、一回目にeofを受け取ると抜けてくれるんですが
二回目以降だと、なぜか二回連続でeofを入力しないと止まりません
> ./eof.exe
^Z
> ./eof.exe
1
n:1
^Z
^Z
>
他にwhile(!cin.eof())とかもやってみたけど上手く動きません
0095デフォルトの名無しさん
2011/05/11(水) 00:03:42.08ちゃんと一回で抜けるけど? (Visual Studio C++ 2010 Express)
あと、どんな処理系使ってるのか知らんけど、ステップ実行とかできないのか?
0096デフォルトの名無しさん
2011/05/11(水) 00:07:19.69さっきLinuxとgccでやったら抜けました
>>94はwindowsとborlandです
0097デフォルトの名無しさん
2011/05/11(水) 00:15:26.67これの(2)は?
0098デフォルトの名無しさん
2011/05/11(水) 00:27:31.96ダメになるページだね。
0099デフォルトの名無しさん
2011/05/11(水) 00:33:42.20それはちゃんと止まると思います
プログラミングコンテストで書いたそういうCのコードをC++ですっきり書きなおそうと思いまして。
さっきsubmitしたらwhile(cin >> n)でちゃんと抜けてるみたいです。有難うございます
ただCの書き方のほうが実行速度は速そうですね、気のせいかな?
ところで、当方学生なのでVisual Studio 2010 Professionalを持ってますが
その機能の100分の1も使わないのに起動するのがやたら遅いので
コンパイラだけコマンドプロンプトから使おうと思ったんですが
C:\Program Files\Microsoft Visual Studio 10.0\VC\binのパスを通して
>cl test.cpp
みたいに使おうとしたら「MicrosoftR C/C++ Compiler Driverは動作を停止しました」
というメッセージが表示されてコンパイル出来ないんですが…
0100デフォルトの名無しさん
2011/05/11(水) 01:08:43.25で、追加するとインクルードパスが云々。最後はイクルードするようにディレクトリを指示してるのに
そんなファイルはないとか…諦めますた
0101デフォルトの名無しさん
2011/05/11(水) 01:14:15.45それと処理系依存はそれぞれの処理系のスレへ
0102デフォルトの名無しさん
2011/05/11(水) 01:34:45.06一回目の起動は確かにもっさりしているが二回目以降はキャッシュが効いて速いだろ
それにちゃんと.NET Runtime Optimization Service動かしてngen一度動かしてる?
ネイティブイメージを作っておくとかなり速くなる
0103デフォルトの名無しさん
2011/05/11(水) 01:54:30.32はい、すいません。↓の二つ読んだらなんとか出来ました。有難うございます
http://d.hatena.ne.jp/tt_clown/20090816/p1
http://d.hatena.ne.jp/toburau/20080407/1207580607
0104デフォルトの名無しさん
2011/05/14(土) 19:50:33.46どうすればいいですか。
0105デフォルトの名無しさん
2011/05/14(土) 19:52:25.610106デフォルトの名無しさん
2011/05/14(土) 20:05:15.640107デフォルトの名無しさん
2011/05/14(土) 20:16:36.82もう直前で#undefしてる…
0108uy
2011/05/15(日) 01:10:47.880109デフォルトの名無しさん
2011/05/15(日) 01:29:37.310110デフォルトの名無しさん
2011/05/15(日) 02:12:32.030111デフォルトの名無しさん
2011/05/15(日) 02:16:18.900112デフォルトの名無しさん
2011/05/15(日) 04:51:23.760113デフォルトの名無しさん
2011/05/15(日) 05:00:46.42Ctrl+(Shift+)B派?
F7派?
右クリック「ビルド」派?
メニュー「ビルド」派?
make派?
0114デフォルトの名無しさん
2011/05/15(日) 05:53:49.08(std::min)(a, b);
0115デフォルトの名無しさん
2011/05/15(日) 09:07:26.14でかいヘッダなんだから
コンパイル防壁かまさないと
0116デフォルトの名無しさん
2011/05/15(日) 11:05:17.520117デフォルトの名無しさん
2011/05/15(日) 11:08:33.28プリコンパイルヘッダの頭に
#define NOMINMAX
#include <windows.h>
とやってる
0118デフォルトの名無しさん
2011/05/15(日) 11:18:53.710119デフォルトの名無しさん
2011/05/15(日) 11:20:07.830120デフォルトの名無しさん
2011/05/15(日) 11:50:12.60殷と民
殷、周、秦、漢、三国、晋、南北朝、隋、唐、五代、宋、元、明、清、中華民国、中華人民共和国
0121デフォルトの名無しさん
2011/05/15(日) 11:56:48.220122デフォルトの名無しさん
2011/05/15(日) 12:02:32.27参考サイトを教えてください。
そもそもVS2010で開発は可能でしょうか?
0123デフォルトの名無しさん
2011/05/15(日) 12:10:57.92ttp://docs.solab.jp/xmllite/
0124デフォルトの名無しさん
2011/05/15(日) 12:31:30.63早い!
ありがとうございます。
0125デフォルトの名無しさん
2011/05/15(日) 14:36:44.48locale::global(locale("japanese"));
としたら、なぜかostringstreamを経由した数値出力がカンマ付きになります。
wcout << 1234567890 << endl; ではそのようなことは起きません。
wostringstreamのカンマ付加をどうやったらやめさせられますでしょうか…
0126デフォルトの名無しさん
2011/05/15(日) 14:50:44.26http://ml.tietew.jp/cppll/cppll_novice/thread_articles/1550
0127125
2011/05/15(日) 16:39:33.11まことに�dクス
byplayer様発言の方法で解決できました
(当方ostringstreamでなくてwostringstream使用)
しかしロケール訳解らん、、
TCHARより難しいことを日雇いプログラマに要求しないでホスイ、、
0128デフォルトの名無しさん
2011/05/15(日) 17:42:00.56ロケールってのは簡単に言うとC++と出力の関係
つまり内部エンコーディングと外部エンコーディングの橋渡し
tcharは内部エンコーディング
0129デフォルトの名無しさん
2011/05/15(日) 19:02:14.56つまり例えばロケールがCロケールなら、
内部エンコーディングがwchar_tでも、
マルチバイトでOSに渡されちゃうって話?
ちょっと不正確な言い方なのかもしれないけど
0130デフォルトの名無しさん
2011/05/15(日) 19:48:28.11関数によるけど標準のものに関しては大体それで合ってるはず
ただしシングルバイトな
ロケール設定しない(=Cロケール)で
wchar_tをwfstreamで書き出すと分かるよ
できたファイルはANSI
ロケールを日本にすると
できるファイルはShift_JIS
0131デフォルトの名無しさん
2011/05/15(日) 20:31:55.05なるほど〜そういうカラクリだったのか
ありがとう。
0132デフォルトの名無しさん
2011/05/15(日) 20:44:06.16質問なのですがMicrosoft Visual C++ 2010を使って
ファイル名と文字列を入力して文字列が何回出てくるか
表示させるプログラムを作成しました
そこでMicrosoft Visual C++ 2010のデバッグから実行するのではなく
アイコンから起動しブラウザで入力して実行、出力するようにしたいのですが
どうすればいいでしょうか
詳しく載っているサイトも教えてくれると助かります
よろしくお願いします
0133デフォルトの名無しさん
2011/05/15(日) 20:51:51.15GUIウィンドゥでファイル名等を入力
C++のCLR Windows Formアプリ でプロジェクト作成
0134デフォルトの名無しさん
2011/05/15(日) 21:06:25.77CGIで検索
0135デフォルトの名無しさん
2011/05/15(日) 21:32:05.39*.EXE のアイコンをダブルクリックして起動すると表示して終わってしまう?
0136デフォルトの名無しさん
2011/05/16(月) 16:55:20.96const int b[] = {333,444,555};
aの中からbの並びが全て一致する位置を返すようなSTLのアルゴリズム教えてください
0137デフォルトの名無しさん
2011/05/16(月) 17:04:24.15const int * result = search(a, a + sizeof(a) / sizeof(* a), b, b + sizeof(b) / sizeof(* b));
0138デフォルトの名無しさん
2011/05/16(月) 17:40:10.55それをプログラミングして解ける人いたら教えて。
0139デフォルトの名無しさん
2011/05/16(月) 19:18:02.30宿題すれにどうぞ
0140デフォルトの名無しさん
2011/05/16(月) 19:47:32.56>>134
ありがとうございました
試してみます
0141デフォルトの名無しさん
2011/05/17(火) 13:42:09.610142デフォルトの名無しさん
2011/05/17(火) 14:32:25.480143デフォルトの名無しさん
2011/05/17(火) 19:09:25.96クラススコープでアクセスできる便利なインスタンス生成用関数って感じなのでしょうか?
0144デフォルトの名無しさん
2011/05/17(火) 20:06:27.07スタックに置くの禁止したり
生成の実態を隠蔽したり
014592
2011/05/17(火) 21:48:47.40亀レスになったがサンクス
そのURLのロケールIDでビルドは通った
WinXPで「言語識別子」でビルドできたのは何かの間違いだったということにしよう
0146デフォルトの名無しさん
2011/05/18(水) 01:26:03.18なるほど、ありがとうございます。
0147デフォルトの名無しさん
2011/05/19(木) 10:44:35.66の戻り値がint型だって保証されてますか。
0148デフォルトの名無しさん
2011/05/19(木) 13:22:51.74std::reverse_iteratorのテンプレート引数にintは入らないと思うぞ
int *のtypo?
0149デフォルトの名無しさん
2011/05/19(木) 13:25:41.84です
0150デフォルトの名無しさん
2011/05/19(木) 20:27:22.37不可能ですよね?
0151デフォルトの名無しさん
2011/05/19(木) 20:36:43.72定義よろ
0152デフォルトの名無しさん
2011/05/19(木) 20:40:11.78ttp://www.kmonos.net/alang/boost/classes/format.html
boostは?
0153デフォルトの名無しさん
2011/05/19(木) 21:03:38.58単体ってのが何をさすのか分からんが
マニピュレータ使えばいいやん
0154デフォルトの名無しさん
2011/05/19(木) 21:19:42.05あったんですねどうも
0155デフォルトの名無しさん
2011/05/19(木) 21:56:35.89ならint *と保証されてる
0156デフォルトの名無しさん
2011/05/19(木) 23:44:06.92こんなのでは?
int main()
{
std::ostringstream os;
int x[] = {3, 5, 7, 9, 11, 13, 15};
const int N = sizeof(x) / sizeof(x[0]);
for (int i = 0; i < N; i++)
os << std::setw(2) << std::setfill('0') << std::right << x[i] << ' ';
std::cout << os.str() << std::endl;
}
0157デフォルトの名無しさん
2011/05/21(土) 09:01:44.43小数点以下8桁まで表示したいけど、
123.45000000
みたいな後続のゼロは消したい。
マニピュレータで設定できる?
0158デフォルトの名無しさん
2011/05/21(土) 09:46:26.948桁未満を切り捨てるか四捨五入するかによっても変わるんだし、自前で丸め処理したらどう?
0159デフォルトの名無しさん
2011/05/21(土) 09:48:37.38できる
0160デフォルトの名無しさん
2011/05/21(土) 10:32:24.18こんなのでは?
// 012345678901234
static char *constant = "123.12345670";
//static char constant[] = "123.45000000";
main(){
int i, len;
len = strlen(constant);
if(len < 10 || constant[len-9] != '.') return 0;
for(i=len-1; i>len-8; i--){
printf("%d<%c>", i, constant[i]);
if(constant[i] == '0') constant[i] = '\0';
else break;
}
printf("\n%s\n", constant);
}
0161デフォルトの名無しさん
2011/05/21(土) 11:20:13.36マニピュレータ使いたいみたいだしこっちんほうがよくね?
#include <cmath>
#include <iomanip>
#include <iostream>
int main(void)
{
double val = 123.4567890;
int iLen = (int)std::log10(val) + 1;
std::cout << std::setprecision(iLen + 8) << std::noshowpoint << val << std::endl;
return 0;
}
整数部の桁数はsprintfなりlexcial_castしてlengthなりでも
テストして早い方を採ればいいんじゃない
0162160
2011/05/21(土) 11:45:16.160163デフォルトの名無しさん
2011/05/21(土) 15:44:54.54いちいち本を読むかヘルプを参照しないと覚えてらんない
でもCと同じ事が出来るし自分で定義したクラスにもマニピュレータや
operator<<やoperator>>が定義出来るのがありがてえ
0164デフォルトの名無しさん
2011/05/21(土) 16:58:50.880165デフォルトの名無しさん
2011/05/21(土) 20:29:50.22CFoo foo[5];
CBar bar[5];
このように、同じ要素数の CFoo と CBar の配列があります。また、CFoo には比較演算子が定義されています。
今、std::stable_sort を使って foo を並び替えつつ、同じ並びに bar も並び替えたいのですが、なかなかいい方法が見つかりません。
例えば foo[5] に A,B,C,D,E、bar[5] に a,b,c,d,e が入っていたとして、
ソートによって foo が C,E,B,A,D と並び変わったなら同時に bar も c,e,b,a,d と並び代わっていれば成功です。
CFoo と CBar を含む新しいクラス CFooBar を作って、値をコピーして、ソートして、値を戻す、などとすればできなくはないですが、
いくらなんでも無駄が大きすぎると思いまして…。
自前でソートを書けば簡単なのですが、できれば標準アルゴリズムを使って解決したいです。
何かいい方法はないものでしょうか。
0166デフォルトの名無しさん
2011/05/21(土) 20:34:50.48を使う
0167165
2011/05/21(土) 20:45:58.59pair は思いつきませんでした。
ですがこれだと、やはり全ての値をコピーして、ソートしてからもとに戻す、と言った作業が必要でしょうか?
確かにこれなら、first のみを比較する比較関数を作っておけば使いまわせそうですし、
結果としてはやりたいことが出来ているので、代案が思いつくまではこれで行きたいと思います。
ありがとうございました。
0168デフォルトの名無しさん
2011/05/21(土) 21:00:39.370169デフォルトの名無しさん
2011/05/21(土) 21:35:32.430170デフォルトの名無しさん
2011/05/21(土) 21:39:49.880171デフォルトの名無しさん
2011/05/21(土) 22:32:14.42pair<T1,T2>の比較演算子はT1から比較するから、お望みの条件なら比較関数いらないよ。
0172デフォルトの名無しさん
2011/05/22(日) 00:38:06.14添字の配列作ってそれを sort、アクセスする時はそれを経由すれば?
int idx[5] = { 0,1,2,3,4 };
struct Comp { bool operartor()(int n1, int n2) { return foo[n1] < foo[n2]; } };
sort(idx, idx + 5, Comp());
で、アクセスは foo[idx[i]] と bar[idx[i]] を使う。
>171
T1 が等価の時、T2 も比較しちゃうから stable 性を破壊する可能性がある。
0173デフォルトの名無しさん
2011/05/22(日) 01:07:12.10CBar bar[5];
なら
CFooBar foobar[5];
vector<CFooBar*> foobar;
vector<CFooBarPtr> foobar;
とかでいいじゃん
0174デフォルトの名無しさん
2011/05/22(日) 04:52:59.69http://codepad.org/xG8vs5zJ
こんな感じ?ポインタのソートしかしてないから速いよ
クラスの大きさに関係ないだろう
ポインタでなくて M が大きいとすごいコピーのオーバーヘッドが発生しそう
0175デフォルトの名無しさん
2011/05/22(日) 05:18:00.99http://codepad.org/lTtWyc90
lambda式が使えればスマートになるんだけどな
インライン展開が効けば速度が2倍近くなるかもしれない
0176デフォルトの名無しさん
2011/05/22(日) 11:16:01.060177デフォルトの名無しさん
2011/05/24(火) 02:58:01.99http://codepad.org/DHcpe0Ta
なんでこんなにrandom_shuffle()に時間がかかるんだ?
と言うより、sort()はvector用に最適化されているのかと言いたい
内部ポインタの付け替えやってるとか?
0178デフォルトの名無しさん
2011/05/24(火) 22:17:20.67std::vector<int>::iterator i = a.begin();
std::vector<int>::const_iterator ci = a.begin();
これが出来て
struct Foo
{
struct iterator{};
struct const_iterator{};
iterator begin(){ return iterator(); }
const_iterator begin() const { return const_iterator(); }
};
Foo f;
Foo::iterator i = f.begin();
Foo::const_iterator ci = f.begin();//ここ
これが出来ないのは何故ですか。
0179デフォルトの名無しさん
2011/05/24(火) 22:21:59.330180デフォルトの名無しさん
2011/05/24(火) 22:28:38.670181デフォルトの名無しさん
2011/05/24(火) 22:40:43.54返り値の型が違ってもオーバーロード出来ないぞ
type traitsをよく読め
0182デフォルトの名無しさん
2011/05/24(火) 22:43:46.71明らかに関数のオーバーロードに失敗している証拠
というか正確な関数のlookupに失敗していると言った方がいいな
struct Foo {
struct iterator{};
struct const_iterator{};
iterator begin() { return iterator(); }
const_iterator begun() const { return const_iterator(); }
};
int main()
{
Foo f;
Foo::iterator i = f.begin();
Foo::const_iterator ci = f.begun(); //ここ
}
0183デフォルトの名無しさん
2011/05/24(火) 22:57:51.94http://stackoverflow.com/questions/2844339/c-iterator-and-const-iterator-problem-for-own-container-class
0184デフォルトの名無しさん
2011/05/24(火) 23:23:04.34これで行けました。
0185デフォルトの名無しさん
2011/05/25(水) 02:02:48.58BCCは糞だな
0186デフォルトの名無しさん
2011/05/25(水) 23:20:23.70具体的には
http://codepad.org/Nkh1TwRl
のコードでおよそCNTS > 530000で落ちます。
この関数自体はモンテカルロ法で自然対数の底eを返す、
「n個の玉をn個の箱にランダムに入れるという試行で、ある箱に玉が一つも入らない確率は (1-1/n)^n。
したがって、その試行をシミュレーションして、空の箱の相対個数を求めれば、その逆数がネピア数の推定値になる。」
というアルゴリズムです。
genrand_res53()は、0以上1未満の乱数を返します。
CNTS=520000まではメモリの使用量が大きく上がることもなく瞬時に正しい結果を出します。
コンパイラはg++4.5.2、OSはWin7(64bit)です。
なにか分かる方よろしくお願いします。
0187デフォルトの名無しさん
2011/05/26(木) 01:34:44.13スタックが怪しい
static int box[CNTS]; にしてはどうか
0188デフォルトの名無しさん
2011/05/26(木) 02:13:44.75http://codepad.org/iSGk2FuE
こんな感じでどうかな?動的に配列を確保するようにした
boostのメルセンヌツイスタを使っているので乱数の分布はいいと思う
0189デフォルトの名無しさん
2011/05/26(木) 08:11:15.95ありがとうございます
正しく動きました
>>188
如何せん初学者なものでクラスについて正しい理解が追いついていません
とりあえずコードは保存させて頂きましたので今後の勉強材料にします
ありがとうございました
0190デフォルトの名無しさん
2011/05/26(木) 10:49:09.42部活の先輩のコード見てたら書いてあったんですが
よく見るexturn "C"ではなくグローバル変数のexturnです
0191デフォルトの名無しさん
2011/05/26(木) 10:58:22.99全く使いません。つーか、エラーになりますな。
0192デフォルトの名無しさん
2011/05/26(木) 12:28:21.290193デフォルトの名無しさん
2011/05/26(木) 13:59:27.060194デフォルトの名無しさん
2011/05/26(木) 14:33:54.480195デフォルトの名無しさん
2011/05/26(木) 16:21:10.76{
private:
size_t size;
void * pBuffer
};
こんな感じで取得したメモリへのポインタとサイズを保持しておくような汎用クラスって、boostライブラリにある?
0196デフォルトの名無しさん
2011/05/26(木) 17:03:03.350197デフォルトの名無しさん
2011/05/26(木) 17:20:28.380198デフォルトの名無しさん
2011/05/26(木) 17:24:49.21STLのsortで比較関数をクラス内の関数にしたいんですが、上手くいきません。
こんな感じにエラーが出ます。
http://codepad.org/mmC3c1S4
0199デフォルトの名無しさん
2011/05/26(木) 17:42:34.95ない
0200デフォルトの名無しさん
2011/05/26(木) 17:49:06.24>int Get(){ return num; }
int Get() const{ return num; }
>bool Compare( const Data &left, const Data &right );
static bool Compare( const Data &left, const Data &right );
0201デフォルトの名無しさん
2011/05/26(木) 18:09:06.33コンパイル出来ました
ありがとうございます
0202デフォルトの名無しさん
2011/05/26(木) 20:19:10.78これ確かbindとthisを組み合わせて出来なかったっけ?
叙述関数がメンバ関数の場合
0203デフォルトの名無しさん
2011/05/26(木) 22:56:51.48ちくしょう、ありがとう
0204デフォルトの名無しさん
2011/05/26(木) 23:04:52.45>>193
すみませんexternです……
>>192
ありがとうございます
const変数以外は使いませんか?
先輩のコードを読みなおしたら、グローバル変数にexternを付けていました
あまり意味が無い上に良くない気がするんですが、こういう用途での使用のメリットとかあるのでしょうか?
0205デフォルトの名無しさん
2011/05/26(木) 23:10:07.910206デフォルトの名無しさん
2011/05/26(木) 23:14:12.84std::sort(vec.begin(), vec.end(), boost::bind(&Test::Compare, this, _1, _2))
だな
0207デフォルトの名無しさん
2011/05/26(木) 23:16:51.18externはずしてビルドしてみたら?
0208デフォルトの名無しさん
2011/05/26(木) 23:17:56.26うんboost使うと簡単なんだけど、これC++標準のbind1stとbind2ndだけ使っても
書けないかな?binary_functionの場合無理か?
0209デフォルトの名無しさん
2011/05/26(木) 23:43:28.83なんでextern付けてんすかって先輩に聞け
0210デフォルトの名無しさん
2011/05/27(金) 10:01:43.010211デフォルトの名無しさん
2011/05/27(金) 10:32:59.72無理だろうな
C++03のbindはbinaryまでしか対応してない
もし可能だとすれば、まずmem_funを使ってmem_fun2_tとかを作ることになると思うがこいつはternaryだ
0212デフォルトの名無しさん
2011/05/27(金) 11:00:37.65int a = 0 ? 0 : ( b = 111, b = 222, b = 333 );
これaの値が333になるんですけど、どの環境でも同じですか?
0213デフォルトの名無しさん
2011/05/27(金) 11:05:07.450214デフォルトの名無しさん
2011/05/27(金) 11:29:47.87カンマ演算子の優先順位と、operator=の戻り値がどうなるか考えれ。
それと a の初期化で0 ?ってしているから常に偽で 0 : は代入されない。
0215デフォルトの名無しさん
2011/05/27(金) 12:01:19.81どの環境でも同じです
0216デフォルトの名無しさん
2011/05/27(金) 13:09:32.98了解ありがとう
thisをbindしなければいけないのが内部にbinary_functionを作った場合の
問題だね
そうなるとternary、つまり引数を3つbindしなければいけなくなり、これはboost
もしくはtr1のbindでないと無理だ
staticにすればthisを持たない単なる関数になるので可能なわけだ
0217デフォルトの名無しさん
2011/05/27(金) 21:51:23.100218デフォルトの名無しさん
2011/05/27(金) 22:03:13.22class ClassName {
test();
}
template<type T>
void ClassName<T>::test() { }
0219デフォルトの名無しさん
2011/05/28(土) 21:02:03.94hogeで5個何かが入っているとして
6以上を指定したら-1を返す・・・みたいな
今はdequeを使ってるのですがいちいちサイズと比べているのがなんか効率悪いような気がして
0220デフォルトの名無しさん
2011/05/28(土) 21:12:51.95ちなみに、atメンバを使うと、範囲外のときはout_of_range例外が投げられる
0221デフォルトの名無しさん
2011/05/28(土) 21:13:43.17dequeでsizeは問題ないでしょう
あえて改良したいなら、数を問い合わせるのではなくemptyで判断するように工夫すればスッキリする
0222デフォルトの名無しさん
2011/05/28(土) 21:16:15.90ありがとうございました
0223デフォルトの名無しさん
2011/06/03(金) 17:31:45.97的な事をしたいんですが、
クラスのコンストラクタで使うと当然問題が出てしまうんですが、
何か良い方法は無いでしょうか?
0224デフォルトの名無しさん
2011/06/03(金) 17:33:47.520225デフォルトの名無しさん
2011/06/03(金) 17:38:18.100226デフォルトの名無しさん
2011/06/03(金) 17:47:28.560227デフォルトの名無しさん
2011/06/03(金) 18:02:24.76namespace hoge
{
const std::string hoge("HOGE");
}
class Fuga
{
std::string mHoge;
Fuga():mHoge(hoge::hoge){}
};
const Fuga fuga;
--
この場合、
実行するまで hogeとfugaのどちらが先に初期化されるかが未定なので、
仮にfugaが先になった場合、hoge="HOGE"を期待できないきがしました。
0228デフォルトの名無しさん
2011/06/03(金) 18:19:41.49hogeのコンストラクタは通ってるのか…。うーむ。
お騒がせしました。
0229デフォルトの名無しさん
2011/06/03(金) 20:34:53.210230デフォルトの名無しさん
2011/06/04(土) 14:45:39.27std::string s;
void say();
test.cpp
void say() {
s = "say";
std::cout << s << std::cout;
}
なぜ、これは怒られるのですか?
0231デフォルトの名無しさん
2011/06/04(土) 14:55:51.45無視かよコンパイラが泣いてるぞ
0232デフォルトの名無しさん
2011/06/04(土) 14:57:42.41include
0233デフォルトの名無しさん
2011/06/04(土) 15:11:29.34まじかorz
>>232
ちゃんと、#include "test.h"はやっています
ttp://codepad.org/fF6JOtNr
特に怒られないが
<< std::cout;は
<< std::endl;の間違いだよな?
0235デフォルトの名無しさん
2011/06/04(土) 15:28:35.06sの定義が複数あります的なエラーが出てるのだと予想
0236230
2011/06/04(土) 15:29:56.03#include "hellow.h"
int main(int argc, char *argv[]) { say(); return 0; }
--------------------------------------------------------------------
#ifndef HELLOW_H
#define HELLOW_H
#include <string>
std::string s;
void say();
#endif // HELLOW_H
-------------------------------------------------------------------------
#include "hellow.h"
#include <iostream>
void say(){
s = "hellow";
std::cout << s << std::endl;}
こんな、コードを書いたのですが...
0237!ninjya
2011/06/04(土) 15:34:06.90test.hの
std::string s;
を
extern std::string s;
に書き換えて
cppファイルのどれか一つに
std::string s;って書いとけ
0241デフォルトの名無しさん
2011/06/05(日) 08:23:29.360242デフォルトの名無しさん
2011/06/05(日) 12:20:02.10C++では#defineの代わりにconstつけたグローバル変数を使うのが普通じゃないのか?
グローバル変数使うのはだめなの?教えて>>241さん
0243デフォルトの名無しさん
2011/06/05(日) 12:31:50.50・どこかのクラスの静的変数にする
あたりが落しどころかなあ。。
0244デフォルトの名無しさん
2011/06/05(日) 13:06:28.50それは変数じゃなくて定数じゃないのか?
0245デフォルトの名無しさん
2011/06/05(日) 13:22:41.57気になって調べてみたら
const~を「定数変数」って呼ぶのはあまり一般的じゃないみたいだった
さーせん
0246デフォルトの名無しさん
2011/06/05(日) 13:33:26.420247デフォルトの名無しさん
2011/06/05(日) 13:56:21.92しかたなくシングルトンにすることはある
0248デフォルトの名無しさん
2011/06/05(日) 16:29:22.26std つけたからって本質は変わっていない
0249デフォルトの名無しさん
2011/06/05(日) 16:38:18.14他のクラスから見られるとまずい場合な
0250デフォルトの名無しさん
2011/06/06(月) 17:29:09.86{
const int BanpeiID = 0;
}
class Hoge
{
public:
static const int BanpeiID = 0;
}
名前空間に所属する変数と、クラスに所属する変数
どっちの方がいいんだ?
0251デフォルトの名無しさん
2011/06/06(月) 17:37:23.51どっちかが良くてどっちかが悪いというものじゃないと思うぞ
0252デフォルトの名無しさん
2011/06/07(火) 17:17:25.54「*.lib : error LNK2001: 外部シンボル "__imp__wfopen" は未解決です。」
このようなエラーが出ます。
msvcrt.libをリンクすると出なくなるのですが今度はfreeやnewが競合します。
__imp__無しのものは既にあると思うので、これとリンクさせることは可能ですが。
0253252
2011/06/07(火) 17:22:16.130255252
2011/06/07(火) 20:08:35.74なので、ソースの書き換えは無理なんです。
0256デフォルトの名無しさん
2011/06/07(火) 20:17:56.940257デフォルトの名無しさん
2011/06/07(火) 20:27:50.540258252
2011/06/07(火) 20:43:40.120259デフォルトの名無しさん
2011/06/07(火) 22:12:33.58俺たちのプロジェクトに参加しませんか?
経験者・未経験者関係無し。やってみたい人たちが自由に参加して作っています。
野次馬歓迎、口出し歓迎、新規参加大歓迎!!
本スレ
http://yuzuru.2ch.net/test/read.cgi/ff/1298538064/l50
wiki
http://www31.atwiki.jp/fftsukurou/
チャット
ttp://fftsukurou.chat.kanichat.com/chat?roomid=fftsukurou
避難所
ttp://jbbs.livedoor.jp/game/49808/
0260252
2011/06/08(水) 00:17:07.19MT設定のままnew、deleteをMSVCRT.LIBのものを使うことは可能ですか?
0261252
2011/06/08(水) 00:26:45.150262デフォルトの名無しさん
2011/06/08(水) 05:20:16.49早かったりしますか?
0263デフォルトの名無しさん
2011/06/08(水) 08:56:34.510264デフォルトの名無しさん
2011/06/08(水) 10:54:32.540265デフォルトの名無しさん
2011/06/08(水) 22:25:24.88調べたらデストラクタが全て空っぽでこうコメントに書かれてます。
- Nothing to do, really. All lists, array-type fields, etc, are
- handled by the compiler generated destructor. All we have to do
- is make an empty function.
Visual C++ではメンバーに他のクラスへのポインタが有る場合に自動的に
そのデストラクタが呼ばれるのですか?
0266デフォルトの名無しさん
2011/06/08(水) 22:56:29.800267デフォルトの名無しさん
2011/06/08(水) 23:05:36.450268265
2011/06/08(水) 23:27:31.00そうですよねえ。 変だな〜と思いながらひょっとしたらそういう拡張がされてるのかな
と思って探してみたのですが見つかりません。
0269デフォルトの名無しさん
2011/06/08(水) 23:33:15.190270デフォルトの名無しさん
2011/06/09(木) 14:12:55.97ここはC++相談室との事で是非とも相談をさせて頂きたいので御座いますが
お腹が空きました。
如何すれば宜しいのでしょうか。
0271デフォルトの名無しさん
2011/06/09(木) 14:59:27.210272デフォルトの名無しさん
2011/06/09(木) 15:01:45.890273デフォルトの名無しさん
2011/06/09(木) 19:11:05.47PHPのprint_rのようなのがあると便利です。
自作変数すべては大変とおもうのでSTLまで変数でいいのですが。
0274273
2011/06/09(木) 19:18:20.030275デフォルトの名無しさん
2011/06/09(木) 19:31:51.980276デフォルトの名無しさん
2011/06/09(木) 20:29:18.35そいうのは、テンプレートの方がいいんじゃ無いかな?
0277273
2011/06/09(木) 20:34:29.13サンクス
0278デフォルトの名無しさん
2011/06/09(木) 21:29:36.85線形代数の、例えばベクトル演算のようなことを構造体(クラスでも良いのでしょうが)と
演算子のオーバーロードで簡易に表記できるようなシステムを作りたいです。
演算子のオーバーロードについて勉強中なのですが、例えば
Vector v;
int x://or double, float,...
などと適当に定義して
x*v
を線形代数のようなベクトルをx倍にさせるような演算子*を定義することは出来ますか?
v*xなら*をVectorのオーバーロード関数として定義すればよいですが
逆は*をintのオーバーロード関数とせねばならず不可能・・・?
0279デフォルトの名無しさん
2011/06/09(木) 21:36:15.87忘れ去られたSTLであるValarrayを使うと簡単に出来るんじゃねーの
0280デフォルトの名無しさん
2011/06/09(木) 21:36:22.940281デフォルトの名無しさん
2011/06/09(木) 21:47:14.07Vector operator*(int, const Vector&);
をクラス外で定義
0282デフォルトの名無しさん
2011/06/09(木) 21:53:51.63似たようなことが出来るSTLがあるのですね
STL自体使ったことがありませんが使えそうになったときのために記憶にとどめておきます。
>>280
演算子のオーバーロードを知ったときこれだ!と思って飛びついたのですが、おかしかったですかね?
>>281
それでよいのですか
わかりました。
すばやいご返答ありがとうございました。
0283デフォルトの名無しさん
2011/06/09(木) 21:59:40.03MenuStripを配置したところ通常のメニューとは違うデザインになりました
普通のデザインにするにはどうしたらいいの?
0284デフォルトの名無しさん
2011/06/09(木) 22:41:51.922. #include <stdio.h>
「"」形式と「<>」形式のインクルードはどっちを先に記述するべき?
0285デフォルトの名無しさん
2011/06/09(木) 22:47:48.55自作ヘッダが先のほうがエラーが見つけやすいと思うが。
0286デフォルトの名無しさん
2011/06/09(木) 23:00:17.09やっぱりそうなのか?
今まで何も考えずに標準ヘッダを先に書いていたんだけど、自作を先に書かないとインクルードのミスが見つけられないんだよね
0287デフォルトの名無しさん
2011/06/09(木) 23:06:52.310288デフォルトの名無しさん
2011/06/09(木) 23:38:10.67線形代数のライブラリって、boostの中にもあったような気がするから、
確認してみるといいかも。
0289デフォルトの名無しさん
2011/06/09(木) 23:42:16.38一方私はより標準的なものから並べている。例えば、
<stdio.h>
<unistd.h>
<fftw3.h>
"product.h"
"MyApp.h"
の順。
0290デフォルトの名無しさん
2011/06/09(木) 23:51:07.410291デフォルトの名無しさん
2011/06/09(木) 23:53:46.98>1 dir2/foo2.h (適切なところ ? 詳しくは下を参照)。
>2 Cシステムファイル
>3 C++システムファイル
>4 その他ライブラリの .h ファイル
>5 プロジェクトの .h ファイル
googleさんはこうしてるみたい
0292デフォルトの名無しさん
2011/06/10(金) 00:00:14.89これだな
0293デフォルトの名無しさん
2011/06/10(金) 02:07:30.00google のガイドラインと同じなんだよね
<stdio.h> ←C
<string> ←C++
<boost/shared_ptr.hpp> ←その他ライブラリ
"Hoge.h" ←このプロジェクトのもの
ただこの方法も前述の問題があるんだよね・・・
0294デフォルトの名無しさん
2011/06/10(金) 02:48:36.910295デフォルトの名無しさん
2011/06/10(金) 07:26:58.850296デフォルトの名無しさん
2011/06/10(金) 07:40:42.14std
3rdlib
mylib
app
0297デフォルトの名無しさん
2011/06/10(金) 09:20:27.37"Foo.h" を1行目に書いて後は>>295と同じ
0298デフォルトの名無しさん
2011/06/10(金) 09:22:08.350299デフォルトの名無しさん
2011/06/10(金) 11:09:59.650300デフォルトの名無しさん
2011/06/10(金) 14:38:28.08詳しく教えてください。
0301デフォルトの名無しさん
2011/06/10(金) 15:42:35.59struct B{ int x;} moo;
} foo;
とある場合,メンバのメンバのポインタの取得はできますか?
&A::B::xでも&A::moo::xでもおかしいですよね...
あまりやりたくないですがreinterpret_castして足すしかないのでしょうか.
0303デフォルトの名無しさん
2011/06/10(金) 15:54:40.57A::B *p2 = &foo.moo;
こういうこと?
0304デフォルトの名無しさん
2011/06/10(金) 15:55:59.64メンバポインタ的なオフセットが知りたいのです.
イメージ的には &foo.moo.x - &fooなんですが...
&foo.moo.xだと,xのアドレスになりますよね?
0305デフォルトの名無しさん
2011/06/10(金) 16:15:39.71そうなんですが,
A::moo::x *p = &foo.moo.x;
みたいに,メンバのメンバへのポインタが取りたいのです…型安全に.
タプルみたいなものを使わないと無理でしょうか?
0306301
2011/06/10(金) 16:27:06.18構造体のネストだと無理かなーと思っただけです.
やはり整数にreinterpret_castして引き算…でしょうか…
そもそもこんなことが必要なのも問題なんですよね…
0307デフォルトの名無しさん
2011/06/10(金) 16:34:19.51struct A {
struct B {
int x;
} moo;
} foo;
int main()
{
A::B *b = new A::B;
int A::B::*xx = &A::B::x;
b->*xx = 2;
std::cout << b->*xx << std::endl;
delete b;
}
0308デフォルトの名無しさん
2011/06/10(金) 16:38:16.90int A::B::*p = &A::B::x;
0309デフォルトの名無しさん
2011/06/10(金) 16:54:39.58int A::B::*p = &A::B::x;
でいい。foo.mooのメンバにアクセスしたいなら
foo.moo.*p
とすればいい
0310デフォルトの名無しさん
2011/06/10(金) 16:56:49.04どうすればいいのかな
struct A {
struct B {
int x;
} moo;
} foo;
int main()
{
A f;
int A::B::*xx = &A::B::x;
f.B::*xx = 3;
std::cout << f.B::*xx << std::endl;
}
0311デフォルトの名無しさん
2011/06/10(金) 17:01:54.88どうなってるんだ
#include <iostream>
struct A {
struct B {
int x;
} moo;
} foo;
int main()
{
A f;
int A::B::*xx = &A::B::x;
f.moo.*xx = 3;
std::cout << f.moo.*xx << std::endl;
}
0312デフォルトの名無しさん
2011/06/10(金) 17:27:26.21どうなってるも何もそれで正しいよ。オブジェクトの模式図を紙に書いて確認してみなよ
しかしこれでreinterpret_castしてオフセット計算しようとかマジ恐ろしい野郎だな
0313デフォルトの名無しさん
2011/06/10(金) 17:28:33.30いや、もしmooが宣言されてなかったらどう書くかって話
0314301
2011/06/10(金) 18:19:02.65なるほど,理解できました.なるほど納得です.勉強になりました.
そして私は大きな間違いをしていました.やりたかったのは,
struct B{ int x; };
struct A{ B foo; };
のときですね...
&A::fooは取得できるんですが,A::B::xではとれません…
計算はできても良さそうなのですが…
ひょっとしてこの場合も同じようになるのでしょうか?
0315301
2011/06/10(金) 18:21:10.40まったくもって…ですね
reinterpret_castは基本的に使うなってのはわかっているのですが,
他に解決策もわからず,お尋ねしています…
0316デフォルトの名無しさん
2011/06/10(金) 18:33:46.84もしかしてやりたいのはこういうことか?
struct B{ int x; };
struct A{ B foo; };
A::B A::*p = &A::foo;
int B::*q = &B::x;
A a;
a.*p.*q = 42;
0317301
2011/06/10(金) 18:36:31.11st. B{int x;}; st. A{ B moo; };
A foo;
のときに,foo.moo.xへのメンバポインタがほしいわけです.
やりたいイメージとしては,同じく,
int <何かしらの型>* p = &A::moo::x; ...みたいなのですが...
右辺が明らかにおかしいです...
0318301
2011/06/10(金) 18:39:04.30そうそう!そういうことなんです.
それを,一発でできないのかなぁと…
静的に決まるので,計算できるんなら取れてもいいのに,と思いまして…
0319デフォルトの名無しさん
2011/06/10(金) 18:52:45.92そりゃムリだと思うなー
B A::*とint B::*を持つ、Aをとってintを返す関数オブジェクトを作るってのがやりたいことに近そう
0320301
2011/06/10(金) 19:05:01.75なるほど.了解です.簡単にできるように
ちょっと頑張ってみます.ありがとうございました.
0321デフォルトの名無しさん
2011/06/11(土) 13:02:55.63namespace hoge { namespace fuga { namespace piyo { namespace impl {
template <class t> struct x { /* ... */ } ;
}}}}
template <class t> struct x {
typedef hoge::fuga::piyo::impl::x<t> type ;
} ;
template <class t> void f(typename x<t>::type const & ) { /* ... */ }
int main(void) {
x<char>::type c;
x<short>::type s;
x<long>::type l;
f(c);
f(s);
f(l);
return 0 ;
}
上のように〜::typeを引数にするとlookupが働かないみたいなんですが
これをうまく動かせる簡単な方法はありますか?
0322デフォルトの名無しさん
2011/06/11(土) 14:52:23.45istream_iterator<int> first(str), second, last;
while (first != last){
cout<< *first <<endl;
++first;
}
で一応、正常に整数が出力されているようですが、
while (first != last)の条件でどうしてうまくいくのか
わかりません。Iterator last にはstrの終了情報は渡って
いないように思うのですが。
0323デフォルトの名無しさん
2011/06/11(土) 15:12:20.69++firstでもう何もないend的なところに移動したイテレータと、デフォルトコンストラクタで初期化されたイテレータがイコールになるようにoperator==が定義されてる
0324デフォルトの名無しさん
2011/06/11(土) 17:03:49.39strから取り出すものがなくてfirstが0 (あるいは、end()に相当するもの)
を返すのと、最初から何もstrみたいな文字列をもってなくて0を返すものが
等しくなって終了しているのではないかと、質問した後で思いついたのです
が、そう間違っていないようですね。
しかし、なかなか凝ってますよね。
0325デフォルトの名無しさん
2011/06/11(土) 17:33:25.380326デフォルトの名無しさん
2011/06/11(土) 17:41:24.040327デフォルトの名無しさん
2011/06/11(土) 19:10:06.60f<char>(c);
f<short>(s);
f<long>(l);
仕様書 14.8.2.4 段落 4
導出の対象外
修飾付き識別子に指定された、型を示す入れ子名前指定子
に該当して、型実引数が導出できないのでは?
0328デフォルトの名無しさん
2011/06/11(土) 23:13:43.230329デフォルトの名無しさん
2011/06/11(土) 23:19:00.990330デフォルトの名無しさん
2011/06/12(日) 00:49:10.54boost::filter_iterator
0331デフォルトの名無しさん
2011/06/12(日) 10:55:55.89complex<double> z(1.0,1.0);
cout<< 2 * z << endl;
はエラーになります。double型との演算は定義されているため
cout<< 2.0 * z <<endl;
としなければなりません。しかし、2*zとかz/3のような演算もやりたいです。
整数と複素数の演算をオーバーロードすればいいのですが、暗黙の型変換
演算子(これってクラスの時しか使えない?)やtrait(typedefテンプレート)
を使って対応できないものでしょうか?
0332デフォルトの名無しさん
2011/06/12(日) 12:20:00.79std::floor()とかstd::ceilを使って小数点以下を切り捨てるか切り上げたらだめなん?
それかstatic_cast<double>を使うとか
だいたいstd::complex<type>なんだから、整数の複素数でいいならstd::complex<int>とすればいいし
要するに小数点以下の扱いをどうしたいかによって変わって来る
0333デフォルトの名無しさん
2011/06/12(日) 12:21:33.400335デフォルトの名無しさん
2011/06/12(日) 17:07:14.21方が簡単だと思いました。
0336デフォルトの名無しさん
2011/06/12(日) 17:25:58.940337デフォルトの名無しさん
2011/06/12(日) 17:34:00.13intが先に来る場合はintは基本型だからメンバ関数を持てないだろ
int.operator(complex)ってのは無理だからね
operator*(int, complex) を定義するにしてもcomplexを改変しなければならないし
まあfriendにしなくてもintを内部でdoubleにキャストするだけなら必要無いよこんなの
0338デフォルトの名無しさん
2011/06/12(日) 18:09:39.53>必要無いよこんなの
※ 個人の感想です。
0339デフォルトの名無しさん
2011/06/12(日) 18:24:29.62まぁ、データメンバかメンバ関数でそういうのがあった気がするけど、
忘れたw。
0340デフォルトの名無しさん
2011/06/12(日) 18:40:05.31確かに、メンバ関数が先か、どうかの話もないではあいが。。。
残念ながら、完全にピントがずれてる。
0341デフォルトの名無しさん
2011/06/12(日) 18:49:33.060342デフォルトの名無しさん
2011/06/12(日) 19:16:40.51template <class X> class art{
X a[size];
public:
X &operator[](int i);
};
template <class X> X &art<X>::operator[](int i){
try{
if(i < 0 || i > size - 1) throw 1;
}catch(int i){
cout << "エラー\n";
return 0;
}
return a[i]; //エラー
}
汎用安全配列を作っているのですが、戻り値の型が違うと怒られます
テンプレートでなければこれで通ると思うのですが、なにか違いがあるのでしょうか?
0343デフォルトの名無しさん
2011/06/12(日) 19:20:45.290344デフォルトの名無しさん
2011/06/12(日) 19:43:34.971>d:\project\演習用\main.cpp(17): error C2440: 'return' : 'int' から 'int &' に変換できません。
1> d:\project\演習用\main.cpp(12): クラス テンプレート のメンバー関数 'int &art<X>::operator [](int)' のコンパイル中
1> with
1> [
1> X=int
1> ]
1> d:\project\演習用\main.cpp(23) : コンパイルされたクラスの テンプレート のインスタンス化 'art<X>' の参照を確認してください
1> with
1> [
1> X=int
1> ]
0345デフォルトの名無しさん
2011/06/12(日) 19:55:17.600346デフォルトの名無しさん
2011/06/12(日) 19:59:40.490347デフォルトの名無しさん
2011/06/12(日) 20:13:45.33新日本テクトスという会社を追われ、その後どうしてよいかわからなくなりました。
だけど私の大好きな尾崎豊の歌に励まされ、夢であるプロのクリエイターを目指すことにしました。
何度も挫けそうになりましたが、尾崎豊の歌を聞きながら自分を励ましています。
今も尾崎豊の歌のおかげで、夢を諦めずにCGアニメの製作を続けられています。
とりあえず、以下の動画を見てください。一生懸命作ったもので、自分では既にプロレベルの傑作だと思ってます。
できればみなさんのご意見、ご感想を聞きたいです。
復興支援アニメ.mp4
http://www.youtube.com/watch?v=yn4uTiN8vvM
湾岸鉄道キャンペーンCM(カラー).mp4
http://www.youtube.com/watch?v=g3PlX1OAhug&feature=channel_video_title
これは力作で、にしおかすみこさんにも是非見てもらいたかったため彼女のブログにコメントしたんですが無視されました。
http://blog.watanabepro.co.jp/nishiokasumiko/archives/2008/02/22_15_post_22.html
(下の方にあります。投稿者: hekeneko | 2008年03月24日 22:54)
やはり私の才能に気づいてくれる人は中々いないみたいですね(苦笑)。
題名”ラダニアムの翼”
A wing of radaniam_part�U.mp4
http://www.youtube.com/watch?v=keSK70uqDJY
A wing of radaniamu part_�V.mp4
http://www.youtube.com/watch?v=-LRZbXbirR0
題名”hekeneko honey”
http://www.youtube.com/watch?v=kATwf6fAkG8
私の世界観の全てを凝縮した力作です。hekenekoワールドをご堪能あれ。
0348デフォルトの名無しさん
2011/06/12(日) 20:18:02.40エラーメッセージの雰囲気で早とちりして、行をちゃんと数えなかったのが原因と思われます
ありがとうございました
0349デフォルトの名無しさん
2011/06/12(日) 20:25:02.34おまw
0350348
2011/06/12(日) 20:43:53.61ですよね…
サンプルとか説明で積んだ知識だと「exit(1);」で逃げられそうなんですけど、
returnで上手く収める方法ってありますか?
0351デフォルトの名無しさん
2011/06/12(日) 20:44:52.320352デフォルトの名無しさん
2011/06/12(日) 20:46:58.900353デフォルトの名無しさん
2011/06/12(日) 20:49:18.390354デフォルトの名無しさん
2011/06/12(日) 20:54:21.19out_of_range
invalid_argument
range_error
length_error
使い分けがいまいちわからない
0355デフォルトの名無しさん
2011/06/12(日) 20:58:09.850356デフォルトの名無しさん
2011/06/12(日) 21:02:31.080357デフォルトの名無しさん
2011/06/12(日) 21:04:10.53atなんてどうせめんどくさがって使わないと思うがな
0358348
2011/06/12(日) 21:07:54.39初めてのプログラミングにc++を選んだドM野郎なので
地道にやれば…いつか必ず…!
0359デフォルトの名無しさん
2011/06/12(日) 21:10:49.30perlとかコードに目を通すだけでも目痛くなるぞ
0360デフォルトの名無しさん
2011/06/12(日) 21:34:11.920361デフォルトの名無しさん
2011/06/12(日) 21:41:18.10言語仕様が難しいことととコードリーダビリティが悪いことを一緒にしてどうするよ。
0362デフォルトの名無しさん
2011/06/12(日) 22:20:42.27つーか、行番号が表示されるエディタを使えよ。
カーソルのある行番号が表示されるだけでいいから。
0363デフォルトの名無しさん
2011/06/12(日) 22:33:56.490364デフォルトの名無しさん
2011/06/12(日) 22:43:05.600365デフォルトの名無しさん
2011/06/12(日) 23:14:53.520366デフォルトの名無しさん
2011/06/13(月) 00:09:38.750367デフォルトの名無しさん
2011/06/13(月) 00:17:05.27まだ規格も固まってないのに版起こしたら後からの修正が面倒だろ
今はPDFで印刷屋に持って行けばいいので楽にはなったけどな
0368デフォルトの名無しさん
2011/06/13(月) 01:50:02.110369デフォルトの名無しさん
2011/06/13(月) 09:03:16.90いやそういう問題ではない
規格改訂がある度に出版社は不良在庫と返品の山を抱えるリスクがある
そのため規格がはっきり決定するまで危なくて出版出来ないのだ
損するだけだからね
0370デフォルトの名無しさん
2011/06/13(月) 09:36:24.840371デフォルトの名無しさん
2011/06/13(月) 12:58:13.300372デフォルトの名無しさん
2011/06/13(月) 20:48:55.330373デフォルトの名無しさん
2011/06/13(月) 20:53:50.100374デフォルトの名無しさん
2011/06/13(月) 21:03:04.66Makefileを使うといいよ
0375デフォルトの名無しさん
2011/06/13(月) 23:42:13.33int i;
RefInt& ri = i;
riは参照の参照になってコンパイルエラーになると思ったのですがなりませんでした。
なぜでしょうか?
0376デフォルトの名無しさん
2011/06/13(月) 23:48:58.00コンパイラは何よ
&&になって右辺値参照になってるんじゃないか?
0377デフォルトの名無しさん
2011/06/14(火) 00:03:29.61exeファイルとobjやマニフェストがまとまらずに単一のexeにならないんだが・・・
0378デフォルトの名無しさん
2011/06/14(火) 00:21:04.76C++0xだと通るみたいだな
下のプログラムで、rの型がint &になるのと同じ感じなのかな?
template <typename T>
void hoge(int x)
{
T &r = x;
}
int main()
{
hoge<int &>(23);
}
0379デフォルトの名無しさん
2011/06/14(火) 00:29:49.87その型への参照はただの参照つまり元の型のままになる
0380デフォルトの名無しさん
2011/06/14(火) 00:49:29.07F< int& > f;
たまらんちん
0381デフォルトの名無しさん
2011/06/14(火) 07:10:49.51お世話になります。
struct A{
double x;
double f();
}
struct B:A{
}
double A::f(){
return x;
}
このような構造体の継承を行い、main関数内で
A* a;
a->f();
とするとエラー番号C2662が出てきてコンパイルができません
少し調べてみるとconst関数がどうのこうの出てきましたがconstなど使っていないので
なぜconst関数の話題になるのか謎です
エラーの原理と解消方法を解説いただけないでしょうか
よろしくお願いいたします。
0383381
2011/06/14(火) 07:42:07.62やはり>>381でもエラーが出るようです(一時他の場所でエラーが出ていたものと思いました)
とりあえず関数f()の後ろにconstをつければ回避できることは分かりましたが、未だに原理が理解できません。
どなたかお手すきの方で解説、あるいは解説があるサイトなどご紹介していただけるとありがたいです。
0384デフォルトの名無しさん
2011/06/14(火) 07:46:30.120385デフォルトの名無しさん
2011/06/14(火) 07:48:47.640386デフォルトの名無しさん
2011/06/14(火) 08:11:25.42エラーなんて出ないぞ
http://ideone.com/jQwRU
情報が足りなくて指摘もできん
0387デフォルトの名無しさん
2011/06/14(火) 08:23:02.120388デフォルトの名無しさん
2011/06/14(火) 08:40:42.03まず訂正です
>>381
中、
A* a;
とあるのは
B* b;
でした
で、実は>>381のmain関数内で、とありますが、実はさらに関数の中で呼び出しており、
その関数の引数が const B*だった、ということでした
ここのconstをはずせばコンパイルできました。
お付き合いいただいたのにこんなオチで申し訳ありません
0389デフォルトの名無しさん
2011/06/14(火) 08:46:24.90というかconst外せばコンパイル通ったとか、const付けてる意味考えろ
0390デフォルトの名無しさん
2011/06/14(火) 09:02:37.33迷惑ついでにお付き合いください
以下、サンプルコードを貼り付けました
http://ideone.com/peJ2E
struct Vの中でoperator+を定義し、
さらに関数fの引数がconst V* aであり、
fのなかで(*a)+という形を使っております。
すると上と似たようにconst の有るなしでコンパイルが通りません。
f内部でconstなしV型変数に置き換えるか、Vの外でconst V& + const V&のようなoperator+を定義すると
回避できますが、
struct Vの中でさらにoperator+をオーバーロードし回避するような方法はありますか?
0391デフォルトの名無しさん
2011/06/14(火) 09:19:21.26http://ideone.com/5famS
0392デフォルトの名無しさん
2011/06/14(火) 09:26:57.05文法的な部分での理解が足りないかもしれません。
(いまだ関数の後ろにconstと書かれると?と思ってしまいます)
ありがとうございました。
勉強・精進致してまいります。
0393デフォルトの名無しさん
2011/06/14(火) 09:30:22.70メンバ関数後のconstはオブジェクト内部を変更しないという表明
これをしてないとconstなオブジェクトからはメンバ関数を呼び出せない
内部を変更してしまう可能性があるから
0394デフォルトの名無しさん
2011/06/14(火) 09:36:30.00なるほど
すると関数の後にconstがくる場合はclass(struct)内での関数のみということでしょうか
理解できてきた気がします
0396デフォルトの名無しさん
2011/06/14(火) 10:07:50.32理解できてないよ・・・ class内のみのメンバ関数はprivateだろ
オブジェクト指向そのものの理解が足りてなさそうだから基礎から勉強しな
0397デフォルトの名無しさん
2011/06/14(火) 10:20:37.43痛感いたしました。。。
失礼いたします。ここまでご指摘ありがとうございました。
0398デフォルトの名無しさん
2011/06/14(火) 11:06:51.74死ね
0399デフォルトの名無しさん
2011/06/14(火) 11:41:12.15お前が死ね
0400デフォルトの名無しさん
2011/06/14(火) 14:06:02.660401デフォルトの名無しさん
2011/06/14(火) 14:14:45.88それは違う
演算子の評価順序に従う
しかし副作用完了点までのいつインクリメントされるかまでは保証されていない
例外は関数の呼び出し
カンマ演算子ではないので評価順序が規定されていない
0403デフォルトの名無しさん
2011/06/14(火) 14:36:48.44じゃあ副作用完了点というやつのまでにインクリメントしたやつを2回使わなければ良いということですか?
副作用完了点とは何時ですか?
0404デフォルトの名無しさん
2011/06/14(火) 15:17:57.87ググれ
0405デフォルトの名無しさん
2011/06/14(火) 16:49:30.96たとえば
a[i] = i++;
このような式の場合副作用完了点はセミコロンの直前にある
つまりセミコロンの直前まで実行が終了して始めてiがインクリメント
されている事が保証されているだけで、iがいつどのタイミングで
インクリメントされるかまでは規定されていない
したがってa[i]に入るのは何か、はたまたa[i]のiはインクリメントされる
前のiなのかインクリメントされた後のiなのか、全然予測出来ない
このような場合C89以降のCでは単項演算子が付いた評価されるべき
iのような同一のオブジェクトが2回以上現れた時の動作は未定義としている
つまり鼻から悪魔だ
0406デフォルトの名無しさん
2011/06/14(火) 19:54:15.330407デフォルトの名無しさん
2011/06/14(火) 20:54:56.39NGワードにいれたからすっきり
0408デフォルトの名無しさん
2011/06/14(火) 21:50:04.580409デフォルトの名無しさん
2011/06/14(火) 21:51:25.56>NGワードにいれたからすっきり
そいつはよかった。実にくだらんがな。
0411デフォルトの名無しさん
2011/06/14(火) 21:58:27.890412デフォルトの名無しさん
2011/06/15(水) 00:53:55.72linuxとwindowsで動きタイムスタンプもコピーできるものはありますか。
0413デフォルトの名無しさん
2011/06/15(水) 01:29:35.960414デフォルトの名無しさん
2011/06/15(水) 09:10:32.38「おれはお前をNGにした証拠」的なレスって
惨めだよね
0415デフォルトの名無しさん
2011/06/15(水) 10:10:16.310416デフォルトの名無しさん
2011/06/15(水) 12:07:09.90悔しそう
0417デフォルトの名無しさん
2011/06/15(水) 14:02:04.21そうだな、悔しいよな
0418デフォルトの名無しさん
2011/06/15(水) 14:07:43.84安易な突っ込み所にはすぐレスるのなwww
0419デフォルトの名無しさん
2011/06/15(水) 14:42:47.40サイヤ人の仲間が殺されたのが悔しいんじゃねえんだろ
フリーザにいいようにされちまったのが悔しくてしょうがねえんだよな
0420デフォルトの名無しさん
2011/06/15(水) 18:59:06.730421デフォルトの名無しさん
2011/06/15(水) 23:23:43.57「悔しそう」とか書きこむのは
平 日 の 昼 間
はやめたほうがいいよ…ほんと、マジで。
0422デフォルトの名無しさん
2011/06/16(木) 00:42:18.610423デフォルトの名無しさん
2011/06/16(木) 00:44:18.720424デフォルトの名無しさん
2011/06/16(木) 00:45:01.210425デフォルトの名無しさん
2011/06/16(木) 01:49:46.190426デフォルトの名無しさん
2011/06/16(木) 02:08:07.230427デフォルトの名無しさん
2011/06/16(木) 13:13:53.56現在SQL SERVERに接続し、データを取得しています。
この時
_variant_t varValue;
varValue = rs->Fields->GetItem(_variant_t("TargetDate"))->Value;
このようにデータを取得してきているのですが
DB側がIntegerの値を返すとvarValue はVT_I4となりvarValue.intValで値が取得できるのですが、
DateTime型の場合varValue はVT_BSTRになります。
この時、何かの型の変数に格納する場合、どのような型が適切でどのようにキャストしてやればいいのでしょうか?
ウォッチしたときに varValueは"2011-01-01" BSTR と表示されます。この値を取得して使用したいのです。
よろしくお願いします。
0428デフォルトの名無しさん
2011/06/16(木) 15:23:15.55http://hibari.2ch.net/test/read.cgi/tech/1299982561/
こっちでやれ
0429デフォルトの名無しさん
2011/06/16(木) 15:36:49.34誘導ありがとうございます。
そちらできいてみます。
0430デフォルトの名無しさん
2011/06/16(木) 20:43:03.03どっちでもいいもの?
wchar_t a=L'a';
wchar_t a='a';
0431デフォルトの名無しさん
2011/06/16(木) 21:36:18.16統一するためにLはつけるべきでは
0432デフォルトの名無しさん
2011/06/18(土) 22:05:49.81new( &a ) int;
これは変数aに対して何か動作をしてるんですか?
0433デフォルトの名無しさん
2011/06/18(土) 22:29:27.07intのしかも自動変数で何をしたいかは自分には想像出来ないが。
0434デフォルトの名無しさん
2011/06/18(土) 22:34:33.870435デフォルトの名無しさん
2011/06/18(土) 23:38:05.55初期化子のカンマは副作用完了点なの?
0436デフォルトの名無しさん
2011/06/19(日) 00:28:46.62クラスならコンストラクタ呼び出し
0437デフォルトの名無しさん
2011/06/19(日) 00:30:16.53int型の話をしてるんです。
0438デフォルトの名無しさん
2011/06/19(日) 09:08:33.530439デフォルトの名無しさん
2011/06/19(日) 13:31:25.31初期化値のない場合、POD型はデフォルト値、
つまりなにもしない。
0440デフォルトの名無しさん
2011/06/20(月) 00:06:06.90は何もしないけど
new( &a ) int();
だと0になるんだよな
0441デフォルトの名無しさん
2011/06/20(月) 07:11:02.680442デフォルトの名無しさん
2011/06/20(月) 15:59:28.21c++ってコンパイラー必要じゃないっすか
んで、プログラミングしてはコンパイルを繰り返してたら
ふと、思ったんすけどォー
c++でアプリ作っても他のPCで動作させる時に
そのPCにもc++のコンパイラーって必要じゃないですか?
アァアアアアン?
そこんとこどうなんだよコラ
0443デフォルトの名無しさん
2011/06/20(月) 16:00:50.47何のためにコンパイルしてると思ってんだ禿
0444デフォルトの名無しさん
2011/06/20(月) 16:00:56.90>c++でアプリ作っても他のPCで動作させる時に
>そのPCにもc++のコンパイラーって必要じゃないですか?
いいえ
0446デフォルトの名無しさん
2011/06/20(月) 16:41:23.510447デフォルトの名無しさん
2011/06/20(月) 17:08:15.220449デフォルトの名無しさん
2011/06/20(月) 17:21:55.800450デフォルトの名無しさん
2011/06/20(月) 17:43:41.02それがDirectXとかじゃないかな
0451デフォルトの名無しさん
2011/06/20(月) 18:22:07.600452デフォルトの名無しさん
2011/06/20(月) 20:21:40.48死ね
0453デフォルトの名無しさん
2011/06/20(月) 21:16:05.38どういうことなの?
0454デフォルトの名無しさん
2011/06/20(月) 21:40:03.86おめーさ、デバッグビルドした exe を「他のPC」に持って行ってない?
0455デフォルトの名無しさん
2011/06/20(月) 21:59:38.65typedef st{
...
}
//関数宣言ヘッダファイル func.h
template<typename T> void fucntion(T* inout);
//関数定義 func.cpp
#include "func.h"
template<typename T> void fucntion(T* inout)
{
...
}
//main関数ファイル
#include "struct.h"
#include "func.h"
void main(){
st* inout;
function<st>(inout);//LNK error
return;
}
//どういうことなの?
0456デフォルトの名無しさん
2011/06/20(月) 22:06:45.460457デフォルトの名無しさん
2011/06/20(月) 22:14:44.63//関数定義 func.cpp
#include "struct.h"
#include "func.h"
template<typename T> void fucntion(T* inout)
{
...
}
template<> void function<st>(st* inout)
{
...
}
0458デフォルトの名無しさん
2011/06/20(月) 22:15:48.74includeしたらマジで通った
でもテンプレートする前はfunc.cppインクルードしなくても通ったんだよ?
0459デフォルトの名無しさん
2011/06/20(月) 22:16:12.770460デフォルトの名無しさん
2011/06/20(月) 22:17:15.22後出しで申し訳ないがstは数種類あって特殊化はしたくないのぜ
0461デフォルトの名無しさん
2011/06/20(月) 22:17:59.42それってどういうココロなの?
宣言さえしておけば勝手に探してくれるんだと・・・
0462デフォルトの名無しさん
2011/06/20(月) 22:20:45.350463デフォルトの名無しさん
2011/06/20(月) 22:27:54.39ふーん
じゃあ全部ヘッダにまとめるか
サンクス
0464デフォルトの名無しさん
2011/06/20(月) 22:37:52.150465デフォルトの名無しさん
2011/06/20(月) 22:52:46.600466デフォルトの名無しさん
2011/06/20(月) 23:02:32.87非常に長々と書くと
func.h,func.cpp どちらにも function<st>が存在しないので function<st>は作られない
main に function<st> が出てきたので、このときに作ろうとする(実体化しようとする)けれど
この main がインクルードしている func.h には関数の宣言しか書かれていないので実体化できない
リンカは func.obj にも main.obj にも function<st> が存在しないのでリンカがエラーを吐く
という感じではないかと思う...
0467デフォルトの名無しさん
2011/06/20(月) 23:07:00.70listやdeque等のコンテナを選べる。
さらに言えば、push_back等のいくつかのメンバ関数を満たしていれば自作コンテナも使える。
0468デフォルトの名無しさん
2011/06/20(月) 23:07:42.42FIFOを強制させたい場合に使う
0469デフォルトの名無しさん
2011/06/20(月) 23:43:14.08dequeだと反対側に突っ込んじゃうかもしれないだろ
0470デフォルトの名無しさん
2011/06/21(火) 00:19:54.550471デフォルトの名無しさん
2011/06/21(火) 01:07:43.28bidirectional_iteratorなら何でも上に被せられるってだけのもの
0472デフォルトの名無しさん
2011/06/21(火) 06:18:20.27あえて不便にしてるんじゃないか
0473デフォルトの名無しさん
2011/06/21(火) 16:30:53.36動作させるにはどうすればいいんですか?
0474デフォルトの名無しさん
2011/06/21(火) 16:32:36.010475デフォルトの名無しさん
2011/06/21(火) 18:45:31.050476デフォルトの名無しさん
2011/06/21(火) 19:49:55.33std::queue はコンテナ要件満たしていないはず
begin() や end() も定義されていない
0477デフォルトの名無しさん
2011/06/21(火) 21:18:54.370478デフォルトの名無しさん
2011/06/21(火) 21:25:18.88近いうちに、俺は結婚を申し込まれるだろう・・
0479デフォルトの名無しさん
2011/06/21(火) 21:26:22.03結婚してください!!!!!
0480デフォルトの名無しさん
2011/06/21(火) 21:40:37.08神
0481uy ◆yyC0rYWEq2
2011/06/22(水) 08:37:18.08しかも基本Vijuaru Stajioで
Vijyuar Stugioのゴミさは、この程度も設定できないようなksは
技術さわんなってっていういかれた頭の持ち主の示す意思表示に見えなくもなくもない
いかれてやがる
そしてC++しか知らないままC++をやり続ける奴がきっと多い
すげーレベルで時間の無駄 これはソフトウェア面で完全に世界から送れちまってる日本のみの現状か・・・
日本効率も悪いんだな・・・・・・
つうか学校のカリキュラムが変わりすぎじゃないのか?
10年前はC、C++
5年前はJAVA
今はRubyなんだろ?
同じ学校でも、その学校に在籍していた時代によって教わってる内容が違いすぎるw
右往左往しすぎだわ
ゴミみたいな分野だしな・・・ さっさと何らかの形で統一されないと
0482デフォルトの名無しさん
2011/06/22(水) 08:55:48.090483デフォルトの名無しさん
2011/06/22(水) 09:27:47.30主張は結構
だがこのスレで扱う話題ではないな
0484デフォルトの名無しさん
2011/06/22(水) 09:40:53.120485デフォルトの名無しさん
2011/06/22(水) 14:48:54.25ってなんですか?
0486デフォルトの名無しさん
2011/06/22(水) 15:43:32.220488デフォルトの名無しさん
2011/06/22(水) 21:07:18.96そーゆー根性こそ問題の核心だ
0489デフォルトの名無しさん
2011/06/22(水) 21:21:36.800490デフォルトの名無しさん
2011/06/23(木) 07:18:00.64someBool?a:b + c;
って
someBool?a:(b+c);
なんだな、心では
(someBool?a:b)+c;
なんだが・・・
皆もう慣れてるん?
0491デフォルトの名無しさん
2011/06/23(木) 07:47:57.90個人的に3項演算子はそれだけで1行使うようにしてるから、あんまり悩んだ事ない。
x = someBool?a:b;
x += c;
括弧使うのってカンマ演算子くらいかも。
x = someBool?a:(some,b);
0492デフォルトの名無しさん
2011/06/23(木) 07:54:23.660493デフォルトの名無しさん
2011/06/23(木) 08:00:26.15ついつい連発しちゃうんだよな〜
カッコ付けるようにすればいいんだろうけど、忘れた頃に同じようにやっちまうからなぁ
まあここに書き込んだことが心に残って防止になればそれでいいや
0494デフォルトの名無しさん
2011/06/23(木) 08:06:11.46んで、かっこ悪いっていわれるわけですね。
0495デフォルトの名無しさん
2011/06/23(木) 09:24:57.90関数みたいで読みやすくなるかと思ったがいまいちだったな
0496デフォルトの名無しさん
2011/06/23(木) 09:50:18.53PHPほどじゃないよ
0497デフォルトの名無しさん
2011/06/23(木) 11:08:12.940498デフォルトの名無しさん
2011/06/23(木) 11:28:22.99class c {
T type;
};
ということなら可能
0499デフォルトの名無しさん
2011/06/23(木) 12:32:17.56ありがとうございます。
では、それを使って具体的にクラスをコンストラクトするにはどうしたらいいのでしょうか?
0500デフォルトの名無しさん
2011/06/23(木) 12:34:17.57498の例なら
c::c(T t) : type(t) {}
するだけじゃ?
0501デフォルトの名無しさん
2011/06/23(木) 15:13:24.16T t;
public:
Hoge(){}
template <class U>Hoge(U const & u): t(u){}
template <class U1, class U2>Hoge(U1 const & u1, U2 const & u2): t(u1, u2){}
/*
以下飽きるまで繰り返す
*/
};
これでほとんど行けるよ
0502デフォルトの名無しさん
2011/06/23(木) 17:44:13.71>>501
なんかつかめて来た気がします!ありがとうございます
最近CからC++始めたんですけど、C++ぱねぇっすね、やりたい放題というか、すごく充実してるというか
0503デフォルトの名無しさん
2011/06/23(木) 18:53:29.110504デフォルトの名無しさん
2011/06/23(木) 23:47:55.15コンパイラを作っているのですが、1つのクラスに50個くらい関数があります。
字句解析、構文解析、意味解析、コード生成などなど・・・
それぞれクラスにした方がいいのかもしれませんが、分けたところで何を得するのかわかりません。
結局インスタンス化も1つしかしないし、意味あるんでしょうか?
いっそのことクラスを取っ払ってC言語として書いたほうがいいのでしょうか?
オブジェクト指向って難しい。
0505デフォルトの名無しさん
2011/06/23(木) 23:57:38.870506デフォルトの名無しさん
2011/06/23(木) 23:57:42.070507デフォルトの名無しさん
2011/06/24(金) 00:05:13.24C++がわからないとコンパイラ書いちゃいけないんですか?
0508デフォルトの名無しさん
2011/06/24(金) 00:08:56.970509デフォルトの名無しさん
2011/06/24(金) 01:17:53.57C++構文解析、C構文解析
ARMコード生成、x86コード生成
みたいに分けられて
後からObjective-C構文解析だとかx64コード生成とか
簡単に追加できる
0510デフォルトの名無しさん
2011/06/24(金) 07:15:43.700511デフォルトの名無しさん
2011/06/24(金) 08:02:43.70複数の翻訳単位でインクルードされているヘッダファイルがあって、const char* はextern をつけているから問題ない。
しかし、extern をつけていないenumは多重定義エラーが出ないのはなぜでしょうか?
0512デフォルトの名無しさん
2011/06/24(金) 08:09:19.100513デフォルトの名無しさん
2011/06/24(金) 11:09:54.64その二つのコンストラクタを使って、同時にaとbを初期化するコンストラクタとか作れますかね?
つまりコンストラクタの中でコンストラクタを呼び出す的な
0514デフォルトの名無しさん
2011/06/24(金) 11:13:08.09でも普通初期化は初期化子でやるよ
0515デフォルトの名無しさん
2011/06/24(金) 11:58:02.34委譲コンストラクタはC++0xから
現行だと一時オブジェクトが生まれるだけになる
0516デフォルトの名無しさん
2011/06/24(金) 12:35:18.89ウィンドウAを表示するための解決方法はありますでしょうか?(ウィンドウは他にも、ウィンドウBやウィンドウCなどに継承していく予定です)
改行対策のため読みづらいとは思いますが、よろしくおねがいします。
class Window{ //全てのウィンドウの親クラス
Window(){}
void draw_window(){
DrawRect(0,0,100,100,GetColor(255,255,255),true); //白い四角形を表示する関数
}};
class WindowA : public Window{ //ウィンドウAクラス
WindowA(){}
void draw_window(){
DrawString(0,0,100,100,GetColor(255,0,0),true); //赤い四角形を表示する関数
}};
class Windows{ //ウィンドウ管理クラス
std::vector<Window> windows;
Windows(){}
void add_window(Window window){
windows.push_back(window);
}
void draw_windows(){ //全てのウィンドウをdraw_window()する
int num = windows.size();
for(int i=0;i<num;i++){
windows[i].draw_window();
}}};
//プログラムのメイン部分
Windows windows = Windows();
WindowA window_a() = WindowA();
windows.add_window(window_a);
windows.draw_windows();
0517デフォルトの名無しさん
2011/06/24(金) 12:44:35.22class Window {
virtual draw_window() {...}
0518デフォルトの名無しさん
2011/06/24(金) 12:45:43.80これじゃ毎回コピーされるがいいのか?
0519デフォルトの名無しさん
2011/06/24(金) 12:51:06.26スライシングが起きるよね
0520デフォルトの名無しさん
2011/06/24(金) 13:18:54.73std::vector<Window*>
手を抜きたいなら
std::vector<std::shared_ptr<Window>>
boost::ptr_vector<Window>
0521デフォルトの名無しさん
2011/06/24(金) 13:34:06.65C++に触れて2日目で右も左も分かりませんが、
いただいたレスをヒントに格闘してみます。
>>517,>>518, >>519, >>520さん、ありがとうございました。
0522デフォルトの名無しさん
2011/06/24(金) 13:51:53.10std::vector<Window *> windows;
>>void add_window(Window window)
void add_window(Window& window)
>>windows.push_back(window);
windows.push_back(&window);
>>windows[i].draw_window();
windows[i]->draw_window();
で無事動きました。ありがとうございました!
かなり大きな前進になると思います。
0523デフォルトの名無しさん
2011/06/24(金) 13:56:09.46派生であるWindowAクラスをそのまま入れることはできないのです
基底クラスとその派生クラスを管理したい場合は、ポインタなら基底クラスから
派生クラスまで指し示せるのでポインタで管理するのがセオリー std::vector<Window*>
ただそうするとオブジェクトの解放処理(delete)が面倒なのでスマートポインタ
shared_ptr<Window>を使うと管理が楽になりましゅ vector< shared_ptr<Window> >
0524デフォルトの名無しさん
2011/06/24(金) 14:21:24.700525デフォルトの名無しさん
2011/06/24(金) 14:26:01.590526デフォルトの名無しさん
2011/06/24(金) 15:32:14.82vector<autoptr<Window> >使うお
0527デフォルトの名無しさん
2011/06/24(金) 15:35:06.41おいバカやめろ
0528デフォルトの名無しさん
2011/06/24(金) 15:37:08.81>>523, >>525に書いてあるようにスマートポインタでやってみたのですが、
'void std::vector<_Ty>::push_back(_Ty &&)' : 1 番目の引数を 'Window' から 'std::unique_ptr<_Ty> &&' に変換できません。
となってコンパイル出来ませんでした。
>>524のboost::ptr_vectorでコンパイル・実行しても、終了時に
Debug Assertion Failed!
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
というダイアログが出るので、このまま使ってもいいものかどうか…。
スマートポインタは素人が使っても大丈夫なモノなんでしょうか
0529デフォルトの名無しさん
2011/06/24(金) 15:46:00.78設定をいじったせいかは分かりませんが、お騒がせしました。
エラー吐かないように直して、改めてboostを試してみます。
0530デフォルトの名無しさん
2011/06/24(金) 16:05:54.62また同じエラーが発生してしまいました。
まだdeleteの必要性も理解出来ていないので、
勉強も兼ねてstd::vector<Window*>を使ってみますね。
こんな話題でスレ汚ししちゃって申し訳ないです(;´Д`)
0531デフォルトの名無しさん
2011/06/24(金) 16:45:22.42わからない事があったらいつでも俺に聞け。
俺も知らんけど。
0532デフォルトの名無しさん
2011/06/24(金) 16:55:41.980533デフォルトの名無しさん
2011/06/24(金) 17:03:15.751,山田,28,165,60,100,20,30,
2,鈴木,40,178,80,100,20,30,
3,佐藤,31,170,70,100,20,30,
カンマ区切りされたファイルをifstreamでファイルを選択して
getlineでカンマ区切りで摘出までは理解してます
全データを選ばず、特定の行だけを抜き出すにはどうすればいいでしょうか?
0534デフォルトの名無しさん
2011/06/24(金) 17:08:07.93行のバイト数が固定ならfseekで飛べるけどそうじゃないだろうから
読み捨ててくしか無い
何行目なのかを知る方法が改行文字を認識するしか無いからな
0535デフォルトの名無しさん
2011/06/24(金) 17:08:29.02特定の行だけ抜き出すのは無理なの?
0536533
2011/06/24(金) 17:11:26.16先頭から順番に全部抜き出して配列にぶち込む
↓
その配列から特定の行分抜き出す
なら可能だけど、この方法では毎回全データを読み取ってから
その中から1つ取り出すという手法になってしまって・・・
0537デフォルトの名無しさん
2011/06/24(金) 17:13:32.46それでいいじゃん
なにがダメなの?
0538デフォルトの名無しさん
2011/06/24(金) 17:16:19.04え?じゃあ何型を突っ込めば…?というレベルなので、
多分それが原因だと思います…。
前に使ってた言語がPHPなので、型に厳しい言語に戸惑ってます。
もうちょっとC++に慣れてから挑戦してみますね。
0539デフォルトの名無しさん
2011/06/24(金) 17:27:32.503人程度ならそれで良さそうだけど数千人で、しかも要素が10や20になると数万だからな
0540デフォルトの名無しさん
2011/06/24(金) 17:33:23.68そんなにあるならDB使え気になるわ
0541デフォルトの名無しさん
2011/06/24(金) 17:41:12.210542デフォルトの名無しさん
2011/06/24(金) 18:07:41.60#include <fstream>
#include <string>
bool satisfies_some_condition(const std::string &line)
{
return line.find("山田") != std::string::npos;
}
int main()
{
std::ifstream ifs("hito.csv");
std::string line;
while (std::getline(ifs, line)) {
if (satisfies_some_condition(line)) {
std::cout << line << std::endl;
}
}
}
0543デフォルトの名無しさん
2011/06/24(金) 18:28:55.02こんな感じでいいのかな
http://codepad.org/y3jWmkqf
0544デフォルトの名無しさん
2011/06/24(金) 20:20:15.01クラス内でtypedef出来るんだ!とか、->と.の違いを今知ったりとか、ふがいないばかりでございますorz
大変参考になるソースをありがとうございました。
0545デフォルトの名無しさん
2011/06/24(金) 22:45:58.42ターゲットCPU : Intel Core2シリーズ以上
テーゲットOS : WindowsXP
言語 : C++
コンパイラ : VC++2005付属
インラインアセンブラではなく、できればイントリンシックで記述して使いたいです。
イントリンシック記述を勉強できる本やWebサイト(IntelのPDF以外)で
オススメがあれば教えてください。
0546デフォルトの名無しさん
2011/06/25(土) 06:10:10.020547545
2011/06/25(土) 09:30:39.26オブジェクト指向設計の学習では、洋書の訳書がとても勉強になったので、
あちらの書籍、Webに質の良い情報があるだろうことは理解できます。
解読する努力はしますので、是非、ご教示ください。
0548デフォルトの名無しさん
2011/06/25(土) 11:08:08.76hoge.hで宣言
hoge.cppで定義で、
main.cとかで#include"hoge.h"してるんだけど、
それでビルドしたら、定義されてないって文句言われる
どうしたらいいですか?
0549デフォルトの名無しさん
2011/06/25(土) 12:07:01.92定義すればいいと思います
0550デフォルトの名無しさん
2011/06/25(土) 12:10:50.72void hoge::○○(){}みたいにしてない
0551デフォルトの名無しさん
2011/06/25(土) 12:13:52.650552デフォルトの名無しさん
2011/06/25(土) 21:57:28.61やり方どこかにないっすか
0553デフォルトの名無しさん
2011/06/25(土) 22:00:23.540554デフォルトの名無しさん
2011/06/25(土) 22:12:37.200555デフォルトの名無しさん
2011/06/25(土) 23:14:29.38hoge.cppでincludeはしてます
>>551
mainはcppの間違いでした
0556デフォルトの名無しさん
2011/06/25(土) 23:20:50.33ソースどっかに上げて聞いた方が早いと思うぞ。
0557デフォルトの名無しさん
2011/06/25(土) 23:34:39.38諦めた方が早いと思うぞ。
0558デフォルトの名無しさん
2011/06/26(日) 00:27:00.41int n;
char *p,*q;
do *p++ = *q++; while (--n > 0);
0559デフォルトの名無しさん
2011/06/26(日) 00:31:30.040560デフォルトの名無しさん
2011/06/26(日) 00:46:16.03int n;
char *p,*q;
do {
*p = *q;
p++;
q++;
n--;
} while (n > 0);
0561デフォルトの名無しさん
2011/06/26(日) 00:52:26.29hoge.hで、クラスの定義をして、hoge.cppでクラスのメンバ関数の定義をしてます。
つぎに、そこで作ったクラスを、メンバとして含むようなクラスや、そのクラスのサブクラスを別のファイル(ヘッダーとリソースファイルに)作りたいと思います
その場合、#include等はどうしたらいいですか?
色々やってるんだけど、クラスが再定義されてるって言われたり、定義がされてないって言われたりして困ってます
0562561,548
2011/06/26(日) 00:57:42.64今度は定義がないって言われました
0563デフォルトの名無しさん
2011/06/26(日) 01:04:42.05一部でいいから
0564デフォルトの名無しさん
2011/06/26(日) 01:07:38.53インクルードガードはちゃんとやってる?
0565561,548
2011/06/26(日) 01:09:41.89#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include"ising.h"
#include"metropolis.h"
#include"rand.h"
#include<math.h>
#include <vector>
/*stdafx.cpp*/
// stdafx.cpp : 標準インクルード kadai4_mf.pch のみを
// 含むソース ファイルは、プリコンパイル済みヘッダーになります。
// stdafx.obj にはプリコンパイル済み型情報が含まれます。
#include "stdafx.h"
// TODO: このファイルではなく、STDAFX.H で必要な
// 追加ヘッダーを参照してください。
//こっちは特に弄ってません、そのままです
0566デフォルトの名無しさん
2011/06/26(日) 01:11:22.70using namespace std;
int myabs(int n);
long myabs(long n);
double myabs(double n);
int main(){
cout <<"-10の絶対値:"<<myabs(-10)<<"\n";
cout <<"-10Lの絶対値:"<<myabs(-10L)<<"\n";
cout <<"-10.01の絶対値:"<<myabs(-10.01)<<"\n";
char a='u';
while(a!='o')
cin>>a;
return 0; }
int myabs(int n) {
cout <<"整数用のmyabs()\n";
return n<0?-n:n; }
long myabs(long n) {
cout <<"長整数用のmyabs()\n";
return n<0?-n:n; }
double myabs(double n) {
cout <<"浮動小数点用のmyabs()\n";
return n<0?-n:n; }
実行結果
整数用のmyabs()
-10の絶対値:10
長整数用のmyabs()
-10Lの絶対値:10
浮動小数点用のmyabs()
-10.01の絶対値:10.01
0567561,548
2011/06/26(日) 01:11:44.45やっぱりインクルードガードしないと駄目ですかね・・・
VSで自動的にビルドでうまくやってくれたりはしないのかな・・・
0568デフォルトの名無しさん
2011/06/26(日) 01:22:58.06stdafx.hをインクルードしたhoge.hかhoge.cppでmyabs(10);とかmyabs(10.01);とか使いたい
ということでいいのか?
0569561,548
2011/06/26(日) 01:28:20.27いえ、566は自分ではないです
rand.hで宣言、定義されたクラスを内部に含むクラスをmetropolis.hを宣言、定義して、
ising.hでそのクラスを継承したいんです。
メンバ関数は、同名のcppで定義してます。
というか、クラスの宣言だけ、ヘッダーでやるってのは可能でしょうか
class metropolis;
みたいな感じで
0570>>566のものです
2011/06/26(日) 01:29:16.58>>565とは無関係です
混乱させてすいません
>>566の質問を忘れてました
>>566の質問はcoutの使い方についてです
coutの出力順が意図していないものでしたのでそこんとこ教えてください
0571デフォルトの名無しさん
2011/06/26(日) 01:40:35.84どういう出力順を意図していたのか説明してみ
0572デフォルトの名無しさん
2011/06/26(日) 01:43:14.14ああ、別だったの
クラスを内部に含むクラスっていうのがよくわからんな
class metropolis
{
class rand hoge;
}
みたいなことがしたいのか
0573561,548
2011/06/26(日) 01:47:14.06たとえば、f(g(x))という関数を考えた時に、
これを計算するときどうする?
まずg(x)を計算して、それをfに代入するでしょう?
だから、
>cout <<"-10の絶対値:"<<myabs(-10)<<"\n";
では、最初にmyabsが評価(計算)され、
cout <<"整数用のmyabs()\n"
が実行され、”整数用のmyabs()”が出力される
その意図なら、関数にstringを返させるようにするべき
0575デフォルトの名無しさん
2011/06/26(日) 02:03:46.30それなら定義されてないってことは無い気はするけれど・・・
rand.h metropolis.h ising.hを見てみないとわからんな
0576デフォルトの名無しさん
2011/06/26(日) 02:07:53.53参考書のコードなんですが
こんなところを予想してました
実行結果
整数用のmyabs()
10-10の絶対値:
長整数用のmyabs()
10-10Lの絶対値:
浮動小数点用のmyabs()
10.01-10.01の絶対値:
0577561,548
2011/06/26(日) 02:37:22.58//#include<isostream>
#include "stdafx.h"
/*ex*/ unsigned int mod_mul(int a,int x);
/*ex*/ int one(int x);
/*ex*/ double to_p(unsigned int x);
/*ex*/ double to_gau(double a1,double a2);
class RRAND
{
int a;
unsigned int x;
unsigned int size;
void step();
public:
RRAND(void);
RRAND(unsigned int n);
double rand(void);
unsigned int rand(unsigned n);
bool rand(double p);
unsigned int dist();
double gauss();
void ini();
void ini(int s);
};
0578561,548
2011/06/26(日) 02:39:09.95//#include"rand.h"
#include "stdafx.h"
//template <class state,class sstate>
class state
{
friend class sstate;
protected:
// friend class metropolis;
double h;
RRAND& r;
public:
double t;
virtual double comp_h();
virtual state& operator=(const sstate& ss);
RRAND& get_r(){return r;}
};
//template <class state,class sstate>
class sstate
{
protected:
// friend class metropolis;
RRAND& r;
state& s;
double h;
public:
virtual double comp_h();
};
0579561,548
2011/06/26(日) 02:42:47.69class metropolis
{
protected:
state s;
sstate ss;
//double h;
RRAND r;
virtual void chose_ss();
virtual double p_s();
virtual double p_ss();
virtual double pt_s();
virtual double pt_ss();
metropolis(state& c1,sstate& c2) : s(c1),ss(c2){};
void step();
void step(int n);
public:
};
/*ising.h*/
#include "stdafx.h"
typedef signed char s_c;
using namespace std
class i_state : public state
{
private:
friend class i_sstate;
friend class magtropolis;
int x,y;
0580561,548
2011/06/26(日) 02:44:52.20public:
i_state(int x,int y);
s_c n(int,int);
s_c e(int,int);
s_c w(int,int);
s_c s(int,int);
s_c h_point(int sx,int sy);
double comp_h();
i_state& operator=(const i_sstate& ss);
};
class i_sstate : public sstate
{
private:
friend class magtropolis;
friend class i_state;
int x,y;
double comp_h();
};
class magtropolis : public metropolis<i_state,i_sstate>
{
void chose_ss();
double p_s();
double p_ss();
double pt_s();
double pt_ss();
};
int Fb(int size,int x,int y);
double boltz(double h,double t);
0581デフォルトの名無しさん
2011/06/26(日) 02:46:52.99http://codepad.org/
http://ideone.com/
0582デフォルトの名無しさん
2011/06/26(日) 03:03:06.53metropolis.h
rand.h
の先頭に
#pragma onceを追加
rand.hは何もincludeしなくて良い
metropolis.hは"rand.h"だけをinclude
ising.hは"metropolis.h"と<vector>をinclude
0583デフォルトの名無しさん
2011/06/26(日) 03:10:06.18戻る気が無い時にこれではオーバースペックでしょう?
0584デフォルトの名無しさん
2011/06/26(日) 03:22:16.78多重定義とか相互インクルードを引き起こすからやめたほうがいい
0585デフォルトの名無しさん
2011/06/26(日) 03:22:32.800586デフォルトの名無しさん
2011/06/26(日) 03:23:01.03// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include"ising.h"
#include"metropolis.h"
#include"rand.h"
この並び順のせいだな
rand>metropolis>isingの順に流れていくのに読み込みが逆になっている
これだと最初にising.hが呼び出され、他の定義を読めるはずがない
0587デフォルトの名無しさん
2011/06/26(日) 03:37:46.42あり^^
0588デフォルトの名無しさん
2011/06/26(日) 10:43:49.40関数を呼ばずにその結果を利用することは不可能だから、
関数内で出力する限り無理。
0589デフォルトの名無しさん
2011/06/26(日) 10:56:59.22どうでもいけどコロンの使い方がおかしい
0590デフォルトの名無しさん
2011/06/27(月) 02:50:34.86fp = fopen("a.txt" "w");
fprintf(fp, "aaaa");
としたとき、fprintf関数で書き込んだ内容はクリアできますか?
おそらく、
fclose(fp);
fp = fopen("a.txt" "w");
とすればうまくいくのでしょうが、ファイルを閉じずに行う方法が知りたいです。
0591デフォルトの名無しさん
2011/06/27(月) 02:52:20.260592561,548
2011/06/27(月) 08:28:21.23一応それもためしてみたんですけど、stdafx.hの作用がどうもよく分からなくて・・・
includeしてなかったら文句言われるし、してたら多重定義になっちゃうし・・・
>>584
そもそもVSがどんなふうにコンパイルしてるか良く分からないんですよね
makeファイルとかで、自分で全部管理した方が楽なのかな・・・
>>586
とりあえずそれでやってみたらできました
えっと、内部クラスの質問なんですけど、内部クラスってのは、外部クラスがコンストラクトされた時、自動的に生成されるものなのですか?
もしそうなら、特定のコンストラクタ(引数を取る)でもって、内部クラスを生成するにはどうしたらいいですか?
0593デフォルトの名無しさん
2011/06/27(月) 08:37:23.18お前はstruct { };って書いたら勝手にインスタンスできると思ってるのか?
0595デフォルトの名無しさん
2011/06/27(月) 08:49:27.41stdafx.hにはイラついて、使わなかった覚えがある。
0596561,548
2011/06/27(月) 08:50:42.91でも、例えば、
class Int{
int n;
};
で、
Int i;
とすると、自動的に整数用の領域が確保されるじゃないですか
同様に
class In{
int n;
};
class Out{
In in;
};
として
Out out;
とすると、自動的にクラスIn型の変数inも生成されるんじゃないんですか?
>>594
VSの使い方が分かんなくて、使わないとエラー吐かれて対処できないんです
0597デフォルトの名無しさん
2011/06/27(月) 08:57:09.19そのエラーみつけて対処するくらいのことができなきゃ、
靴も履けずにマラソンに出かけるような展開になるぞ。
0598デフォルトの名無しさん
2011/06/27(月) 09:07:20.77そりゃぁ生成されるけど、質問の意図が判らん。
0599561,548
2011/06/27(月) 09:29:24.76まあせっかくVS入れたので、ちゃんと勉強する予定ではあります
>>598
つまり、生成されるということは、Out型クラスをインスタンス化した時に、
何らかのInのコンストラクタが呼び出されているという事じゃないですか。
で、この時呼び出されるInのコンストラクタに引数を持たせたいんです
0600デフォルトの名無しさん
2011/06/27(月) 09:47:20.24質問は「データメンバをデフォルトコンストラクタ以外で初期化する方法は?」でいいのかな?
0602デフォルトの名無しさん
2011/06/27(月) 10:02:34.140603デフォルトの名無しさん
2011/06/27(月) 10:03:42.790604デフォルトの名無しさん
2011/06/27(月) 10:21:03.590605561,548
2011/06/27(月) 10:40:48.52というのは、内部クラスが参照変数のメンバを持ってるので
0606デフォルトの名無しさん
2011/06/27(月) 10:45:10.60なにいってんだこいつ
0607デフォルトの名無しさん
2011/06/27(月) 10:45:24.790608デフォルトの名無しさん
2011/06/27(月) 10:47:45.840609デフォルトの名無しさん
2011/06/27(月) 10:51:04.16std::pari<int, char> &x;
// Hoge(): x(12, 'a') {} // Error!
};
ということだろうか。
0610デフォルトの名無しさん
2011/06/27(月) 10:51:49.35int& n;
c() { }
};
いやこうだろう
0611561,548
2011/06/27(月) 10:54:02.25class In{
int n;
public:
In(int m):n(m){}
};
class Out{
In in;
public:
Out(int m){
In n(m);
}
};
とすれば、Outでこのコンストラクタを使った時に、
自動的に内部にmの値を持つ、内部クラスnが生成されるって事ですか?
0612デフォルトの名無しさん
2011/06/27(月) 10:54:50.18突っ込む前に呼んであるだろ
そのとき好きなの呼べよ
0613デフォルトの名無しさん
2011/06/27(月) 10:56:29.85いや普通にコンパイルエラーじゃないかなw
0614デフォルトの名無しさん
2011/06/27(月) 11:02:46.02そんな理解で難しいことやろうとするからはまるんだ
0615561,548
2011/06/27(月) 11:05:49.10class In{
int& n;//参照
public:
In(int m):n(m){}
};
class Out{
In in;
int n;
public:
Out(int m){
n = m;
In in(n);
}
};
こういう事です
>>612
・・・つまり?
>>613
どうしたらいいと思いますか?
0616デフォルトの名無しさん
2011/06/27(月) 11:05:56.75呼び出されるコンストラクタを指定するのにコンストラクタ初期化リスト中の初期化子を使うんだよ。
0617デフォルトの名無しさん
2011/06/27(月) 11:06:51.460618デフォルトの名無しさん
2011/06/27(月) 11:07:31.760619561,548
2011/06/27(月) 11:10:41.42In(int m):n(m){}
で、n(m)ってのは、代入してるだけかと思ってたんですけど、
やってる事はコピーコンストラクタの呼び出しで、この部分で好きなコンストラクタを呼び出せたりしちゃうんでしょうか?
もしそうだった場合
Out(int m):in(n(m)){}
というような、入れ子には出来るでしょうか?
0620561,548
2011/06/27(月) 11:14:01.75>>617
>>618
ごめんなさい初期化リストというのがどういうものか知りませんでした・・・
:の横って、ただ代入してるだけかと思ってました・・・
0621デフォルトの名無しさん
2011/06/27(月) 11:18:37.960622デフォルトの名無しさん
2011/06/27(月) 11:27:58.02できるわけねーだろカス
あと参照に関数のローカル変数突っ込んでるぞ
0623デフォルトの名無しさん
2011/06/27(月) 11:28:33.89これを解決できたとしても今のままじゃまたどこかで詰むようになる
0624デフォルトの名無しさん
2011/06/27(月) 11:41:56.340625デフォルトの名無しさん
2011/06/27(月) 11:49:39.56この馬鹿の名前欄を見れ
0626デフォルトの名無しさん
2011/06/27(月) 12:01:55.12>>622
>>623
なんだか良く分からないけどコンパイル通りました!
またつまずいたらよろしくお願いします
0627デフォルトの名無しさん
2011/06/27(月) 12:15:51.700628デフォルトの名無しさん
2011/06/27(月) 12:20:40.99エラーを理解できないようなクラス間関係は(・A・)イクナイ
使いやすいクラスを作るためには、癒着させないことが大事。
0629デフォルトの名無しさん
2011/06/27(月) 12:33:29.78は?
エラーを理解できるかどうかはコンパイラの実装にも依存しちゃうんだから、
それが設計の良し悪しの判断基準になるわけないと思うんだけど・・・。
たとえばどんなクラス間関係のこと言ってるの?
0630デフォルトの名無しさん
2011/06/27(月) 12:47:26.69int a;
・・・
}
a ってpublicじゃないよなprivateだよな?
いつもアクセス修飾子書いてしまってるからわすれてしまった
0631デフォルトの名無しさん
2011/06/27(月) 13:59:00.800632デフォルトの名無しさん
2011/06/27(月) 15:19:29.28俺も聞きたい
どんなクラス関係だ?
0633デフォルトの名無しさん
2011/06/28(火) 00:37:37.55{
template<int> Example()
{
}
};
これってどうやってコンストラクタ呼ぶの?
0634デフォルトの名無しさん
2011/06/28(火) 00:43:39.39http://stackoverflow.com/questions/2786946/c-invoke-explicit-template-constructor
> It's not possible. The Standard also has a note on this at 14.8.1/5 ...
0635デフォルトの名無しさん
2011/06/28(火) 00:47:02.870636デフォルトの名無しさん
2011/06/28(火) 00:56:25.40いちおう open issue になっている。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#264
10年以上放置されちゃってるけどね。
条件の記述がめんどうなだけだろうから、ちゃんとまとめて proposal に
仕上げればわりと簡単にとりこまれるかもね。最低でも数年単位で先に
なるのは確実だけど。
0637デフォルトの名無しさん
2011/06/28(火) 19:17:55.24http://codepad.org/Q7z3wEK2
0638デフォルトの名無しさん
2011/06/28(火) 19:21:43.320639デフォルトの名無しさん
2011/06/28(火) 19:22:03.900640デフォルトの名無しさん
2011/06/28(火) 19:40:55.90調べてみます
0641デフォルトの名無しさん
2011/06/28(火) 19:49:49.66class Foo {public: int value = 0; void set(int v) {value = v;}}
Foo a, b, c; // value = 0, 0, 0
a.set(1192); // 1192, 0, 0
c.set(296); // 1192, 0, 296
0642デフォルトの名無しさん
2011/06/28(火) 20:30:14.58蛇足かもだが、
1.hの書きかただと、2つ以上のcppからインクルードするとリンクエラー出るぞ
void Choge_2::display()をcppに移すか、
void display(){}と宣言と定義を同時にするのがよろし
0643デフォルトの名無しさん
2011/06/29(水) 17:26:36.95四捨五入と偶数丸めで、0.5足してfloorするだけだと微妙で・・・
0644デフォルトの名無しさん
2011/06/29(水) 18:18:11.24Runtime Error
プログラム名.exe
abnormal program termination
が発生するのです。それも
リリースした受信用プログラム+VC++・リリースモードで送信プログラム→受信側がエラー
リリースした送信用プログラム+VC++・リリースモードで受信プログラム→送信側がエラー
リリースした受信用プログラム+リリースした送信用プログラム→両方エラー
・・・と何が原因でエラーが起きているのかまるで分らないのです。
エラーメッセージにも情報らしきものは書かれてなく何をすればいいのか・・・
このようなエラーに何か心当たりはありませんか?
0645デフォルトの名無しさん
2011/06/29(水) 18:45:34.48VC++ならpdbにシンボル書き出して
コールスタック眺めりゃ一発
0646デフォルトの名無しさん
2011/06/29(水) 19:25:53.16うーんなんか難しそうですね
勉強してみてまだわからなかったらまた来ることにします
ありがとうございます
0647デフォルトの名無しさん
2011/06/29(水) 19:28:53.51微妙と言われても・・・それで何が不満なの?
0648デフォルトの名無しさん
2011/06/29(水) 20:08:47.92ttp://ideone.com/sauMa
上記のコードをVC++ 2010、MinGW(gcc 4.5.2)それぞれで実行速度を測ってみました、
VC++は Relaseモード、
MinGWは -O2オプション付加、
共にOpenMPを有効化した状態です。
この時にOpenMPを使ったコードを有効化すると、
VC++の通常(直列)ループの実行速度が遅くなり、
MinGWは変化ありませんでした。
さらには、ループをインクリメントからデクリメントのループ(for (mytype i = max; i >= Min; i--))に修正して、
OpenMPを使ったコードを有効化すると、
VC++の通常(直列)ループの実行速度がさらに速くなり、
MinGWの通常(直列)ループの実行速度が遅くなる、
という、環境によってバラバラになってしまいました、
これはOpenMPの最適化がコンパイラの実装依存というのが関係しているからでしょうか、
だとしたらOpenMPを使うと環境毎のコードの修正が大変になることになってしまいます。
0649デフォルトの名無しさん
2011/06/29(水) 20:25:34.98目的はなんだろう?
学習?
そこんとこを質問したほうが早い解決じゃないだろうか
0650デフォルトの名無しさん
2011/06/30(木) 01:12:07.36あんまりそういやりかたすんのは良くないんだろうか。それともその手の手法が確立されてたりすんだろうか?
class Interface
{
int value;
protected:
static int Peek(Interface &target){return target.value;}
};
struct Example:struct Interface
{
void Parse(Interface &target)
{
Peek(target); //targetのvalue値が手に入る
}
};
0651デフォルトの名無しさん
2011/06/30(木) 01:18:10.671) ExampleはPeekを呼び出せる
2) Peekは内部のint valueの値を返す
これだけのこと。
0652デフォルトの名無しさん
2011/06/30(木) 01:28:48.62Interfaceを継承したクラス群は、packageスコープのように値を共有できる。
問題は何に使えるかだ。
0653デフォルトの名無しさん
2011/06/30(木) 01:42:31.230654デフォルトの名無しさん
2011/06/30(木) 02:42:58.33結局の所、shared_ptrなどは公開しないとダメなんですよね?
vectorなどのコンテナなら前方宣言で公開せずに済みますけど。
0655デフォルトの名無しさん
2011/06/30(木) 03:19:18.53ゲームプログラミングには良く使われることは知っているんですがGUIとか小遣い帳とか言った一般的なアプリケーションを作る分にはC#とかの方が良いんでしょうか?
モチベーションを上げて取り組みたいので出来たらご紹介ください
0656デフォルトの名無しさん
2011/06/30(木) 06:27:55.97C#のがいいよ
圧倒的に楽に組めるからモチベーションが段違いだよ
0657デフォルトの名無しさん
2011/06/30(木) 09:10:14.600658デフォルトの名無しさん
2011/06/30(木) 09:18:53.65ん?
class Hoge;
shared_ptr<Hoge> fuga;
みたいな話?
0659デフォルトの名無しさん
2011/06/30(木) 11:01:22.63速度が欲しい大量データ計算処理とか。
0660デフォルトの名無しさん
2011/06/30(木) 11:02:41.84vector も前方宣言はできないでしょ。
テンプレート引数については逆に、 shard_ptr には渡していいけど vector には渡しちゃダメ。
0661デフォルトの名無しさん
2011/06/30(木) 12:22:38.04BitComet
0662デフォルトの名無しさん
2011/06/30(木) 14:11:03.58パズルを解くとかシミュレーションするとか色々あるけど。
0663デフォルトの名無しさん
2011/06/30(木) 17:00:32.48とあったとき、aの長さ3を得る方法はありますか?
sizeof()を使ってもうまくいかなくて困ってます
0664デフォルトの名無しさん
2011/06/30(木) 17:04:07.230665デフォルトの名無しさん
2011/06/30(木) 17:16:19.04sizeof(a)という書き方をすると、
error C2070: 'char *[]': sizeof オペランドが正しくありません。
と出てしまいます。むずかしいです。
0666デフォルトの名無しさん
2011/06/30(木) 17:17:45.38なるわけねーから動かなかったコード出してみろ
多分前後の文法がおかしいだけだ
0667デフォルトの名無しさん
2011/06/30(木) 17:33:30.22#define LENGTH_OF(a) (sizeof(hoge((a))))
template <class T, unsigned N> char (& hoge(T const (&)[N]))[N];
int main(void) {
char const * a[] = { "a", "b", "c" };
std::cout << LENGTH_OF(a) << std::endl; // -> 3
return 0;
}
0668デフォルトの名無しさん
2011/06/30(木) 17:36:59.86aの長さを求めたい関数からは、
extern char *a[];
しか見えないため、このようなエラーが出てしまったようです。
0669デフォルトの名無しさん
2011/06/30(木) 17:43:35.860670デフォルトの名無しさん
2011/06/30(木) 17:52:08.500671デフォルトの名無しさん
2011/06/30(木) 18:34:47.58std::arrayやboost::arrayを使う手段もあるぞ、参考までに
0672>>654
2011/06/30(木) 19:54:31.60namespace std
{
template < class T > class allocator;
template < class T, class Allocator > class vector;
};
class Hoge
{
private:
std::vector* m_pArray;
};
メンバ変数にvector保持する時、ポインタにして前方宣言すれば#include <vector>をヘッダに書かなくて住みますよね。
つまり公開せずに済む。
ところがshared_ptr系って、shared_ptrへのポインタを保持したら本末店頭なので、
結局、スマートポインタってのは公開しなくちゃならないんですよね?
0673デフォルトの名無しさん
2011/06/30(木) 20:08:22.880674デフォルトの名無しさん
2011/06/30(木) 20:09:22.66これは冗長な書き方な気がするけどなぁ
0675デフォルトの名無しさん
2011/06/30(木) 20:13:48.65こんなこと無理じゃね?
0676デフォルトの名無しさん
2011/06/30(木) 20:32:46.08必ずしも公開しないとだめということはないよ
やろうと思えばすべてのクラスで定義を隠蔽できる
メリットよりデメリットのほうが多いからやる価値は無いけどね
0677デフォルトの名無しさん
2011/06/30(木) 20:58:26.60何を言ってるのか良く分からないから
他人にも通じる言語(日本語でもいいよ)で
どんな事がしたいのか説明してみたら?
0678デフォルトの名無しさん
2011/06/30(木) 21:24:59.23こういうことを言いたいってことだよな
ttp://ideone.com/Aao2X
ただstdの一部を取り出して前方宣言は基本的にすべきでないし、
するメリットも少ない
0679デフォルトの名無しさん
2011/06/30(木) 22:46:58.94今はライブラリインクルード前に自前のをundefして後にまたdefineし直しで対処してるんですが・・・
0680デフォルトの名無しさん
2011/06/30(木) 22:50:54.740681デフォルトの名無しさん
2011/06/30(木) 22:56:19.200682デフォルトの名無しさん
2011/06/30(木) 23:00:59.07{
namespace
{}
}
名前空間の中に無名名前空間を作っても大丈夫ですか?
VC2008だとなぜかIntelliSenseが効かなくなることがあります。
0683デフォルトの名無しさん
2011/07/01(金) 01:16:54.41> メンバ変数にvector保持する時、ポインタにして前方宣言すれば#include <vector>をヘッダに書かなくて住みますよね。
ダメ。ユーザープログラムが namespace std に宣言を行った場合、未定義動作になる。
17.4.3.1 [lib.reserved.names] p1 (C++2003)
"It is undefined for a C++ program to add declarations or definitions to namespace
std or namespaces within namespace std unless otherwise specified."
17.6.4.2.1 [namespace.std] p1 (N3290)
"The behavior of a C++ program is undefined if it adds declarations or definitions to
namespace std or to a namespace within namespace std unless otherwise specified."
0684デフォルトの名無しさん
2011/07/01(金) 01:19:33.38#undef で対処してるってことは、そのライブラリも自前のコードも両方 #define new ... してるの?
ひどい状況だね。
ライブラリのそれが迷惑だと身をもってわかったんだから、自分でもそんなことするのやめれば?
そもそも #define new ... で何がしたいの?
0685>>672
2011/07/01(金) 03:47:17.85可読性や速度が低下するし、namespace stdだと未定義動作になるようですし(>>683)止めときます。
結局、ユーザに公開するクラスのヘッダだけが隠蔽されてれば問題ない話なんですね。
あー難しい。
0686デフォルトの名無しさん
2011/07/01(金) 18:14:37.36そんなの常識的な知識でしょ
0687デフォルトの名無しさん
2011/07/01(金) 18:30:10.23class V ;
class hoge { V * pV ; hoge(void) ; } ;
//cpp
#include <vector>
class V : public std::vector<fuga> { } ;
hoge::hoge(void) : pV( new V ) { }
0688天使 ◆uL5esZLBSE
2011/07/01(金) 19:52:27.28> "The behavior of a C++ program is undefined if it adds declarations or definitions to
↑ハアァアアァァアァアァアアァアァァァァァァアアァアアァァアアァァァァァァァアァ??????????
ゴミって意味わかってんのかなこいつら
0689デフォルトの名無しさん
2011/07/01(金) 22:53:58.41そこまですんならpimplにすりゃいいんじゃね?
スタックに割り当てなきゃならんのなら別だろうけど。
0690デフォルトの名無しさん
2011/07/01(金) 22:56:15.81言語上は構わんだろ。そもそも、そうできないと
クラススコープに縛りたい変数やらクラスといったシンボルは
全て広域名前空間で宣言するかちまちまstatic書かなきゃならなくなる。
0691デフォルトの名無しさん
2011/07/01(金) 23:28:14.60hoge[0] = 0x0123; hoge[1] = 0x4567;
hoge[2] = 0x89AB; hoge[3] = 0xCDEF;
リトルエンディアンの環境では
[MSB] 23 01 67 45 AB 89 FE CD [LSB]
になるけど、ビッグエンディアンの環境では
[MSB] 01 23 45 67 89 AB CD EF [LSB]
になる?
0692デフォルトの名無しさん
2011/07/01(金) 23:46:21.070693デフォルトの名無しさん
2011/07/01(金) 23:51:18.780694デフォルトの名無しさん
2011/07/02(土) 15:34:41.330695デフォルトの名無しさん
2011/07/02(土) 15:40:46.27いやそんな使い分けに困るようなもんでもないと思うんだが
intrusive_ptrの使い方は分かってるんだよね?
0696デフォルトの名無しさん
2011/07/02(土) 15:49:51.56shared_ptrは楽で既存のクラスにも簡単に適用できて多機能でプログラマのミスでリークすることは殆ど無い。けど生ポとの共存が面倒でその手の応用が効きにくく、さらに無駄が多い
intrusive_ptrはめんどくさいし既存のクラスには適用できないしプログラマのミスでリークするかもしれない。けど生ポと簡単に共存ができるし、無駄が少ない。
0697デフォルトの名無しさん
2011/07/02(土) 15:59:34.34コードはこちらです。http://www.amazon.co.jp/dp/4797327030/ の最初の Iterator パターンを C++ で書き直したものです。
http://codepad.org/hrU82H5x
ここでは、new/delete 忘れを検出するべく、new/delete をオーバーロードして malloc()/free() に振りなおしています。
さらに、malloc()/free() に対しては、xmalloc()/xfree() なるラッパを間に通しており、最終的に malloc()/free() 忘れや二重解放を拾い上げられるようにしています。
ラッパの実装は双方向リストを使用しています。
#宿題スレでよく使用しておりお見かけの方がおられるかもしれません。
ここで次のような事態が発生しました。解放忘れや二重解放はなんとか排除できたのですが、
※「クラスのスタティックなメンバ関数としての new で確保した領域が、グローバル関数として定義した delete で解放されている」
処理系によってはそういうことがある、と考えていいのでしょうか?それとも書きように問題が残っているのでしょうか。
---
上のソースでは、
278行目 Iterator<Book> *itr = bookShelf->iterator(); //(a)
233行目 Iterator<T> *iterator(); //(b);
269行目 return new ConcreteIterator<T>(this); //(c)
の道筋で最終的に確保された動的領域を、
283行目 delete itr; //(d)
で解放したのですが、実行結果を見る限り、これは、
136行目の void operator delete(void *p) {
にきているようです。
こちらの環境/処理系は gcc 4.3.4 / cygwin on Windows XP です。
ご意見をお聞かせいただければ幸いです。よろしくお願いいたします。
0698デフォルトの名無しさん
2011/07/02(土) 16:11:51.08winsockを使ってみる。(1)
http://www.kmonos.net/alang/boost/smartptr.html
winsock を侵入型参照カウンタとintrusive_ptrを使って、実装しているサンプルが
掲載してあるのですが、winsok のインスタンスをつくるのに、インターフェース
クラスを作成し、間接的にnew して、winsok のインスタンスを作っています、
コンストラクタでintrusive_ptr を使ってメモリ管理をしています、
面倒そうに視えるのでshared_ptr では、ダメなのだろうかと思って質問しました。
0699デフォルトの名無しさん
2011/07/02(土) 16:29:16.26仮想デストラクタ
0700デフォルトの名無しさん
2011/07/02(土) 16:30:59.09#include<iostream>
using namespace std;
class cord{
public:
int x,y;
cord operator+(cord o);
cord(int i=0,int x=0){x=i,y=x;} };
cord cord::operator+(cord o) {
cord tem;
tem.x=x+o.x; tem.y=y+o.y;
o.x=0; return tem; }
int main(){
cord w(1,1),r(9,1),o;
o=w+r;
cout<<o.x<<','<<o.y<<"ここまでテキスト\n";
cout<<r.x;
char p;
while(p=getchar()!='o');
return 0; }
コンパイルは通るんですが計算の実行結果が意味不明なので原因を教えてください
<<実行結果>>
-1717986920,10ここまでテキスト
-858993460
0701デフォルトの名無しさん
2011/07/02(土) 16:35:50.86cord(int i=0,int x=0){x=i,y=x;} };
0702デフォルトの名無しさん
2011/07/02(土) 16:43:51.48{
x=i,
y=x;
}
};
ここでcord.xとcord.yに値を入れているのだろうが引数のxと文字が被っているからcord.xに入っていない
0703デフォルトの名無しさん
2011/07/02(土) 16:48:51.930704デフォルトの名無しさん
2011/07/02(土) 16:51:05.33もう少し丁寧に書けば簡単に正しいコードがかけるのでは?
ttp://ideone.com/SsahX
0705704
2011/07/02(土) 16:58:39.800706デフォルトの名無しさん
2011/07/02(土) 17:02:05.26class Coord {
public:
Coord(int x = 0,int y = 0)
: x(x), y(y) {
// this->x = x;
// this->y = y;
}
Coord Coord::operator +(Coord & rhs) const {
Coord t(this->x + rhs.x, this->y + rhs.y);
rhs.x = 0; // ?
return t;
}
int x, y;
};
int main() {
Coord w(1, 1), r(9, 1), o;
o = w + r;
std::cout << o.x << ',' << o.y << "ここまでテキスト\n";
std::cout << r.x;
while (getchar() != 'o') {}
return 0;
}
0707デフォルトの名無しさん
2011/07/02(土) 17:06:27.15Coord Coord::operator +(const Coord & rhs) const {
か
0708デフォルトの名無しさん
2011/07/02(土) 17:07:51.811. 引数 x に引数 i を代入する
2. メンバ変数 y に 引数 x を代入する
3. この地点でメンバ変数 x は初期化されていない
0709デフォルトの名無しさん
2011/07/02(土) 17:19:27.89コンパイラはエラーださないんですね
ありがとうございます
0710デフォルトの名無しさん
2011/07/02(土) 17:21:42.140711デフォルトの名無しさん
2011/07/02(土) 17:30:56.61boost::lambda
boost::bind等などとか?
0713デフォルトの名無しさん
2011/07/02(土) 17:38:31.42的確なコメント感謝いたします。
g++-3 で警告※がでる理由がわかりませんでしたが、コンパイラによっては、仮想クラスから派生したクラスのデストラクタが呼ばれないことがあるのですね。
※ warning: `class Array<Book>' has virtual functions but non-virtua destructor
http://codepad.org/YIc9esVA
0714デフォルトの名無しさん
2011/07/02(土) 17:53:35.00public:
Base() { printf("Base();\n"); }
~Base() { printf("~Base();\n"); }
};
class Derived : public Base {
public:
Derived() { printf("Derived();\n"); }
~Derived() { printf("~Derived();\n"); }
};
int main() {
Base * pBase = new Derived;
delete pBase;
}
出力:
Base()
Derived()
~Base()
で正しい。~Derived() は呼ばれるはずがない
Base クラスのデストラクタが Derived クラスでオーバーライドされていないので、pBase が delete される時に呼ばれるのは Base クラスのデストラクタになる
オーバーライドするためには Base クラスのデストラクタを仮想化する必要がある
0715デフォルトの名無しさん
2011/07/02(土) 18:04:30.200716デフォルトの名無しさん
2011/07/02(土) 18:17:20.16お前QZだろ?まあいい、C++スレでは目をつぶっててやる
CodeGuardを掛けたら次のようなエラーが出ている
Error 00001. 0x400000 (Thread 0x0DB8):
Exception 0xC0000005: Access violation at 0x14B4677.
Call Tree:
0x0CD1E0DA(=CG32.DLL:0x01:01D0DA)
0x0CD15098(=CG32.DLL:0x01:014098)
0x0CD1602E(=CG32.DLL:0x01:01502E)
0x0CD2783E(=CG32.DLL:0x01:02683E)
0x0CD011BF(=CG32.DLL:0x01:0001BF)
0x7C9624CA(=ntdll.dll:0x01:0214CA)
0x7C81CAAE(=kernel32.dll:0x01:01BAAE)
0x7C81CB26(=kernel32.dll:0x01:01BB26)
0x32B9C0C8(=CC32110MT.DLL:0x01:09B0C8)
0x32B9911B(=CC32110MT.DLL:0x01:09811B)
0x32B9914C(=CC32110MT.DLL:0x01:09814C)
0x32B98DCE(=CC32110MT.DLL:0x01:097DCE)
0x32B98E4D(=CC32110MT.DLL:0x01:097E4D)
0x004017A9(=iterator1.exe:0x01:0007A9) iterator1.cpp#165
0x00403B4A(=iterator1.exe:0x01:002B4A) iterator1.cpp#190
0717デフォルトの名無しさん
2011/07/02(土) 18:18:20.62>>713はコンパイラによってはそうなってる見たいとか言ってるから言っとくが
規格では未定義だから, pBase にDerivedクラスを突っ込んでdeleteした時点アウトだからな
絶対にやってはいけないことだからね
0718デフォルトの名無しさん
2011/07/02(土) 18:23:08.24ちゃんとメモリも解放されるし
基底クラスのデストラクタにvirtual付けてないともちろんダメだけど
0719デフォルトの名無しさん
2011/07/02(土) 18:36:35.77?
vitrual付いてない時の話に決まってるだろ
その話をしてるんだが
>>713のコードではvirtual付いてるから勘違いしたのか?
0720デフォルトの名無しさん
2011/07/02(土) 18:38:51.740721デフォルトの名無しさん
2011/07/02(土) 18:41:38.25virtual付いて無いときって書いて無かったから勘違いしてた
ごめん
0722デフォルトの名無しさん
2011/07/02(土) 18:59:30.47ふっ、また1つ賢くなってしまったよ
0723デフォルトの名無しさん
2011/07/02(土) 19:01:49.130724デフォルトの名無しさん
2011/07/02(土) 19:33:55.33687か?w
そのとおりです。コードみればそのまんま自明でもあります。
肝心の基底クラスのデストラクタがvirtual でなかったので訂正します。http://codepad.org/5hxUbKLP
でも、そのcodeguard って bcc のやつでしょう?bcc55 はこちらでもコンパイル結果は謎(return 0; のあとで new/delete が呼び出されてます)です。
そのコールトレースをみると、kernel32 のまだ下の dll でエラーが出ているようだし、あんまり信用できないなあ。
>>717
ありがとうございます。理由がわかるにはまだ知識が足りませんがよく覚えておきます。
0726デフォルトの名無しさん
2011/07/02(土) 19:42:16.740727デフォルトの名無しさん
2011/07/02(土) 21:40:32.94俺の使ってる奴はbcc(今はecc)の最新版、ecc6.3.1だよカス
バグだらけのbcc5.5と一緒にすんな
明らかに自分のコードが間違っているのに人のせいにするなんて
やっぱりクズだよお前
0728デフォルトの名無しさん
2011/07/02(土) 21:42:33.46それからそのコードまだこんなエラーが出るぞ
Error 00001. 0x400000 (Thread 0x0E24):
Exception 0xC0000005: Access violation at 0x14B4677.
Call Tree:
0x0CD1E0DA(=CG32.DLL:0x01:01D0DA)
0x0CD15098(=CG32.DLL:0x01:014098)
0x0CD1602E(=CG32.DLL:0x01:01502E)
0x0CD2783E(=CG32.DLL:0x01:02683E)
0x0CD011BF(=CG32.DLL:0x01:0001BF)
0x7C9624CA(=ntdll.dll:0x01:0214CA)
0x7C81CAAE(=kernel32.dll:0x01:01BAAE)
0x7C81CB26(=kernel32.dll:0x01:01BB26)
0x32B9C0C8(=CC32110MT.DLL:0x01:09B0C8)
0x32B9911B(=CC32110MT.DLL:0x01:09811B)
0x32B9914C(=CC32110MT.DLL:0x01:09814C)
0x32B98DCE(=CC32110MT.DLL:0x01:097DCE)
0x32B98E4D(=CC32110MT.DLL:0x01:097E4D)
0x004017A9(=iterator2.exe:0x01:0007A9) iterator2.cpp#138
0x00403BFA(=iterator2.exe:0x01:002BFA) iterator2.cpp#163
直ってないんじゃないか?
0729デフォルトの名無しさん
2011/07/02(土) 21:45:10.69new/delete 忘れを検出するんじゃなくて、 RAII 使って防げば良いのに。
0730デフォルトの名無しさん
2011/07/02(土) 21:49:10.80あとページコレクションのツールと使うとか。
0731デフォルトの名無しさん
2011/07/02(土) 21:51:05.970732デフォルトの名無しさん
2011/07/02(土) 21:52:34.40コスト
0733デフォルトの名無しさん
2011/07/02(土) 21:53:16.70ロートルだからさ
0734デフォルトの名無しさん
2011/07/02(土) 21:54:27.30コストは馬鹿にならないだろうなあ
エアフェノム使ったらどう?w
0735デフォルトの名無しさん
2011/07/02(土) 21:54:56.920736デフォルトの名無しさん
2011/07/02(土) 21:55:19.55スマポに頼ろうという発想が出てこない。
オブジェクトの生成期間なんぞ、明白だし、
明白で簡潔であるべきだ。
0737デフォルトの名無しさん
2011/07/02(土) 21:56:28.37クビって言うか、こいつ無職ですから
0738デフォルトの名無しさん
2011/07/02(土) 21:56:34.290739デフォルトの名無しさん
2011/07/02(土) 21:56:45.890740デフォルトの名無しさん
2011/07/02(土) 21:56:54.65そりゃ何故スマポなのか?を理解出来てないだけだろ。
0741デフォルトの名無しさん
2011/07/02(土) 21:59:36.63ム板にこういうスレを懲りずに3回も立ててる奴ですから、どんな奴かは推して下さい
【モリタポ有償】C/C++/Java の問題を片付けます(3)
http://hibari.2ch.net/test/read.cgi/tech/1309527259/
0742デフォルトの名無しさん
2011/07/02(土) 22:02:12.30「いらないコストは払わない」
基本中の基本だろ
スマポはこの哲学を完全に無視してんだよ
特にboost::shared_ptrテメーは最悪だ
0743デフォルトの名無しさん
2011/07/02(土) 22:03:31.17CPUに関係が無い。
コスト=計算量は。
0744デフォルトの名無しさん
2011/07/02(土) 22:04:08.88悪臭を消すために振り掛ける。
しかし、本当は、それに頼らず、
元の悪臭を断つべきなのだ。
0745デフォルトの名無しさん
2011/07/02(土) 22:05:31.52ほおー
スマポを使わずにどうやってRAIIを実現すると?
0746デフォルトの名無しさん
2011/07/02(土) 22:07:03.57とっとと墓穴掘って埋まってくれ
0747デフォルトの名無しさん
2011/07/02(土) 22:07:54.060初期化とデストラクタで十分だろうが
0748デフォルトの名無しさん
2011/07/02(土) 22:09:24.67ほとんどC++を使う理由がないような・・・
0749デフォルトの名無しさん
2011/07/02(土) 22:10:11.030750デフォルトの名無しさん
2011/07/02(土) 22:12:37.490751デフォルトの名無しさん
2011/07/02(土) 22:13:27.590752デフォルトの名無しさん
2011/07/02(土) 22:14:06.17string buf(1024,'\0'); と &buf[0] で置き換えたら
メモリリークしないが。
0753デフォルトの名無しさん
2011/07/02(土) 22:15:34.15文字列コンテナと言ってもいい
という事はお前はコンテナは使う前提で話をしているって事でいいんだな?
0754デフォルトの名無しさん
2011/07/02(土) 22:16:15.19QZはリークさせまくっても平気な奴らしいですから
そこら辺が職業PGとアマグラマの一番の差でしょうね
0755デフォルトの名無しさん
2011/07/02(土) 22:17:20.16みんなこんな根本的なところからわかってないんだなぁ
0756デフォルトの名無しさん
2011/07/02(土) 22:19:10.24むしろ C++ を使う理由につながる
おまえさんの言う「C++ を使う理由」とは?
0757デフォルトの名無しさん
2011/07/02(土) 22:20:34.31開発期間を短くしてしかも出来るだけ初めからバグの発生確率を
低くするためだと思う
そういうと「お前はJavaかC#でも使ってろ」と言われそうだが
0758デフォルトの名無しさん
2011/07/02(土) 22:20:34.69STLのささいなクラスライブラリを使いたいからだな。
0759725
2011/07/02(土) 22:22:15.95これは失礼。
> Exception 0xC0000005: Access violation at 0x14B4677.
> Call Tree
> 0x0CD1E0DA(=CG32.DLL:0x01:01D0DA)
> 0x0CD15098(=CG32.DLL:0x01:014098)
> 0x7C9624CA(=ntdll.dll:0x01:0214CA)
> 0x7C81CAAE(=kernel32.dll:0x01:01BAAE)
> 0x7C81CB26(=kernel32.dll:0x01:01BB26)
> 0x32B9C0C8(=CC32110MT.DLL:0x01:09B0C8)
> 0x32B98E4D(=CC32110MT.DLL:0x01:097E4D)
> 0x004017A9(=iterator2.exe:0x01:0007A9) iterator2.cpp#138
> 0x00403BFA(=iterator2.exe:0x01:002BFA) iterator2.cpp#163
これが何を意味するのかちょっとだけ教えていただけませんか?
確かに、#163->#138 ときて、そのあといきなり(>>725 の#75〜#123の間の、#97, #98, #109, #110 などを飛び越えて)スレッドセーフなランタイム?に入り、kernel32, nttdll まできてさらに下の得体のしれないところで例外が発生しているのでしょうか?
0x14B4677 というのはどこを指しているのでしょうか?
>>725 の #163 といえば、class BOOK { char *name; の解放になりますが、こちらの観測では二重解放もしていないようですし、いったい何が起こっているのでしょうか?
もしかして、#95- #96, #107-#108 の
for (i = 0; i < q->size; i++)
*(char *)((char *)(q->data) + i) = (char)(rand() & 0xff);
が悪いのか?
0760デフォルトの名無しさん
2011/07/02(土) 22:22:54.990761デフォルトの名無しさん
2011/07/02(土) 22:24:12.50Call TreeというのはDLLを呼び出した階層順の事
だからkernelで例外が起きているわけではない
0x14B4677というのは初期化されてないポインタにでも
アクセスしてるんじゃないか?
0762デフォルトの名無しさん
2011/07/02(土) 22:26:21.77ランダムな値を書き込む
多分0x14B4677というのはCodeGuardが書き込んだ値だろう
0763デフォルトの名無しさん
2011/07/02(土) 22:27:51.19C++0xなんてどこの悪質建築業者のやっつけ増改築だよって思う
過去の資産がどうのこうの言うけどそんなもんあっという間に追いつくよ
0764デフォルトの名無しさん
2011/07/02(土) 22:28:56.00さぁD言語の扉を開けるんだ
0765デフォルトの名無しさん
2011/07/02(土) 22:30:14.53えっ?? C++ を使ったらバグの発生確率が下がるのか?
# どんな分野なんだろう
>>758
煽りうめえw
0766デフォルトの名無しさん
2011/07/02(土) 22:32:22.07思ってるんだ?
Pimplイディオムの存在理由は分かるか?
0767デフォルトの名無しさん
2011/07/02(土) 22:33:17.870768デフォルトの名無しさん
2011/07/02(土) 22:33:55.10CPUで言うとx86をARMで置き換えようっていうのに似てるな
ARMはスマートフォンなどに確実に浸透してきているし、サーバー機にも使われ始めた
Intelは焦っているに違いない
0769デフォルトの名無しさん
2011/07/02(土) 22:34:04.010770デフォルトの名無しさん
2011/07/02(土) 22:34:54.690771デフォルトの名無しさん
2011/07/02(土) 22:34:58.560772デフォルトの名無しさん
2011/07/02(土) 22:37:37.37new の時点から姉歯臭してたが
0773デフォルトの名無しさん
2011/07/02(土) 22:39:35.73AndroidはオープンアーキテクチャだしCPUを選ばないからさらに強敵だな
これがPC層まで浸透してくると怖いものがある
事実MSもARMやAndroidにシフトしてきてるし
0774デフォルトの名無しさん
2011/07/02(土) 22:43:21.270775デフォルトの名無しさん
2011/07/02(土) 22:50:47.20それでも開発言語はC/C++なんだよなあ
0776デフォルトの名無しさん
2011/07/02(土) 22:51:43.01それで例外安全に出来るのか?
0777デフォルトの名無しさん
2011/07/02(土) 22:52:51.73もちろん
君は出来ないの?
0778デフォルトの名無しさん
2011/07/02(土) 22:56:03.61すごく大変だと思わないか?スマポなしでやると
0779デフォルトの名無しさん
2011/07/02(土) 22:58:49.890780デフォルトの名無しさん
2011/07/02(土) 23:00:06.42さすがプロは言う事が違うな
0781デフォルトの名無しさん
2011/07/02(土) 23:00:22.80な環境か、C++上級者だらけの羨ましい職場かのどっちかなんでしょ?
天国と地獄だなw
0782デフォルトの名無しさん
2011/07/02(土) 23:02:08.990783デフォルトの名無しさん
2011/07/02(土) 23:02:59.48次の質問をどうぞ
0784デフォルトの名無しさん
2011/07/02(土) 23:05:13.63RAIIとかも
テクニックの略語はどう読んでいいのか・・・
0785デフォルトの名無しさん
2011/07/02(土) 23:05:27.10基本的にC++は富豪プログラミング思想だからな
アセンブラでも使ってろくそったれ
0786デフォルトの名無しさん
2011/07/02(土) 23:05:43.980787デフォルトの名無しさん
2011/07/02(土) 23:11:28.16いや、全然
0788デフォルトの名無しさん
2011/07/02(土) 23:17:30.08俺はEmbedded C++を使わされる事になった時発狂しそうになったぞ
でもそれでおまんま食わせてもらってるから文句言えない
0789デフォルトの名無しさん
2011/07/02(土) 23:19:52.92言わないと永遠に生きてるコード生成プログラム扱いだぞ
0790デフォルトの名無しさん
2011/07/02(土) 23:23:23.67メモリリークを無くしたいならば、PHP、Javascriptを使えばいい。
ほとんどC/C++と同じ事はできるだろ。
0791デフォルトの名無しさん
2011/07/02(土) 23:25:47.140792デフォルトの名無しさん
2011/07/02(土) 23:29:14.96マトモな設計してれば論理的なリークなんてすぐになくせる
あとはコーディング段階でのうっかりぐらいしかリークする余地はないけど
これもデバッグ段階でリークしてる箇所がズラッと一覧で出るから普通は見逃しようがない
0793デフォルトの名無しさん
2011/07/02(土) 23:30:02.80翻訳部分にバグが無かったからメモリーリークもしないだろう。
あと、PHPコードをC/C++から呼び出す事もできるが。
0794デフォルトの名無しさん
2011/07/02(土) 23:46:06.61そもそもJavaのバイトコード吐き出せるC++コンパイラーって作れないのか?
わざわざ別のVM作るより速いだろうに。
0795デフォルトの名無しさん
2011/07/02(土) 23:53:23.920796725
2011/07/03(日) 00:00:50.06キーワードの提供ありがとうございます。
ただ、>>697 の URL のとおり、Java の書籍を通してやっとデザパタを理解しようとしているレベルに過ぎないところお察しくだされば。
スマートポインタの概念を理解するのも、今の段階では夢のまた夢‥‥‥。
それにしてもなんだか盛況ですね。
0797デフォルトの名無しさん
2011/07/03(日) 00:04:08.650798デフォルトの名無しさん
2011/07/03(日) 00:08:25.91みんなわざわざ空気悪くするようなカキコしなくてもいいのにな
自分も気分悪いし、相手も気分悪い、第三者も気分悪い、
百害あって一理なしだな
スマポは考え方自体はすごくシンプルよ、
より良く実装するのが難しいだけで
0799デフォルトの名無しさん
2011/07/03(日) 00:42:58.33状況によって使い分ければいいだろwwwww
ただし、たけのこの里が好きな奴は味覚障害でどうしようもない
0800デフォルトの名無しさん
2011/07/03(日) 00:56:36.200801デフォルトの名無しさん
2011/07/03(日) 02:20:12.19スマポを知りたければ、Modern C++ Designや
C++テンプレートメタプログラミングを読んでみれば良い。
0802725
2011/07/03(日) 02:42:21.60コールツリーというからには、やっぱりスタックに積まれている戻り先(およびスタック上のローカル変数を取り除くため ebp 値)をチェックしているような気がします。
CG32.dll というのは、CodeGuard の dll で、バージョン6 ともなると、カーネルの下に潜っているのかも。
>> 0x0CD1E0DA(=CG32.DLL:0x01:01D0DA)
>> 0x0CD15098(=CG32.DLL:0x01:014098)
BCC5 くらいの手元の codeguard では、でたらめポインタのアクセスは捕らえられず、new/delete しかチェックしてくれないみたい。
また、global な new を補足してしまうと、こちらの手元の codeguard 的にはまずいようです。�@
あと、
p = new char [ n ];
したものは、
delete [] p;
としないといけませんでしたね。この点は怒られてしまった。�A
�@�Aについてだけ対応したものを残しておきます。http://codepad.org/gMI6MnFz codepad 上でも無事コンパイルがとおり実行結果まで得られるようになってめでたしめでたし。
0803デフォルトの名無しさん
2011/07/03(日) 03:07:44.34それが当たり前だろ
何がめでたしめでたしだ
しかし嘘もほどほどにしとけよ
フリー版のbcc5.5にはCodeGuardは付属していなかった
俺はC++Builderをバージョン4の時から買い続けているから良くこの事を知っている
どこまで信用の置けない奴なんだQZは
詐欺師か
0804デフォルトの名無しさん
2011/07/03(日) 03:16:15.98std::auto_ptr や boost::scoped_ptr や std::unique_ptr<T, default_delete(?)> なら
空間コストも実行時間コストも生ポインタと同じだよね?
0805デフォルトの名無しさん
2011/07/03(日) 03:34:31.17bcc5.6(C++Builder6)の製品版が手元にあります。delphi もろとも買ってはみたものの、もともと win16api で止まってしまった人なのでほとんど使わずかつ使えなかったのですが。
>それが当たり前だろ
まあそうなんですが、まだまだ C++ はよくわからないし、警告やエラーがあっても、それより別の内容をお聞きしたくて参上した次第。初学者によくあることとして容赦してくださいな。
0806デフォルトの名無しさん
2011/07/03(日) 03:56:35.88あれ?さっきはbcc5.5と言っていましたよね?
いつからbcc5.6にすげ替わったのですか?
もう、いいですよ
あんたの言ってる事は信用が出来ない
0807デフォルトの名無しさん
2011/07/03(日) 03:59:54.45しかし、分かる人には分かるんですよ、ちゃあんとね
見え透いたハッタリから足を洗ったらどうですか?
0808デフォルトの名無しさん
2011/07/03(日) 06:55:25.10当初はフリーの bcc55 を使用していましたが、いよいよ codeguard の結果を見なくては、と考え、どこぞに放置していた Borland C++Builder 6.0 Professional (Build 10.157)(1983-2002) (bcc32 は 5.6) をインストールした、という経緯ですが何か矛盾していますでしょうか?
>>728
> 0x32B98E4D(=CC32110MT.DLL:0x01:097E4D)
> 0x004017A9(=iterator2.exe:0x01:0007A9) iterator2.cpp#138
>>728 提供のデータが正しければ、これは>>725(http://codepad.org/5hxUbKLP) #138 から xfree() に入ったあと、暗黙に直接ライブラリをコールしていることを示しています。
グローバルな new をオーバーロードすること自体が悪いのか、delete [] name; と書かずに delete name と書いてしまったのが悪いのか、というところでしょうか。
0809デフォルトの名無しさん
2011/07/03(日) 07:52:18.65じゃお前のCodeGuardの出力を貼ってみろよ
0810デフォルトの名無しさん
2011/07/03(日) 07:59:06.29もちろんダウンロード出来るはずだよな?
そしてそれを当てた時のBCCのバージョンを書いてみろ?
0811デフォルトの名無しさん
2011/07/03(日) 08:45:40.10http://codepad.org/URao2WZ6 → http://codepad.org/SO8vcahk (多すぎて全部載らない)
http://codepad.org/xXrBYThG → http://codepad.org/UOwZTF1y (問題は見受けられない。)
両者は134行目が異なります。
いずれも bcc32 のコマンドラインオプションに -vG -v を指定して得られた .cgl の内容です。
bcc5.6 の codeguard は、 new/delete をオーバーロードするとうまくいかない場合があるんじゃないかと考えています。
そういう仕組みなら仕方がない。
>>810
そこまでお付き合いするつもりはないのですが、普通に考えれば 5.6.4 じゃないですか?
0812デフォルトの名無しさん
2011/07/03(日) 08:49:09.960814デフォルトの名無しさん
2011/07/03(日) 10:30:13.76普通に考えれば?妙な言い方をしますなあ
割れ厨だからダウンロードできないと素直に言えばいいのに
言う事がどんどん変わって行ってますね
5.6.4のnew/deleteには確かに問題があった
しかし今は問題がない
その頃のバグを取り上げて論じても意味がない
0816デフォルトの名無しさん
2011/07/03(日) 10:57:29.97それは証拠にならない
アップデータを人からもらったかもしれないだろ?
ライセンスキーを晒せとは言えないが、正規のライセンスキーを持っている証拠が
示せなければ身の潔白を証明する事は無理だ
0817デフォルトの名無しさん
2011/07/03(日) 11:31:53.970818デフォルトの名無しさん
2011/07/03(日) 11:39:51.280819デフォルトの名無しさん
2011/07/03(日) 12:47:08.80最近のCPUがL2/L3キャッシュをどんどん大きくしているのは
大きいコードが増えて来てキャッシュミスが増えないように考慮してるんだろうね
それと肝心のコア部分がどんどんシュリンクされて小さくなっていくので余ったスペースを
有効活用するという意味もあるだろう
C++0xにもついにthreadが入ったし、マルチコアが言語でサポートされるのはいいな
Goはスレッドを初めからサポートしてるしC#もPLINQでサポートしてるけど
ありゃCPUの話になってしもたすまん
0820デフォルトの名無しさん
2011/07/03(日) 13:00:16.130821デフォルトの名無しさん
2011/07/03(日) 13:34:15.25いやだからね、C全盛の時代は良かったけど、C++みたいにコードが肥大化すると
ハードウェアもそれに合わせて変えて行かなければならないなあって話
独り言ではなく現実に起きてる事だから
0822デフォルトの名無しさん
2011/07/03(日) 13:51:31.16もう少しコンスタントに規格拡張してほしいな
次の規格が10年後とか長すぎないか
0823デフォルトの名無しさん
2011/07/03(日) 13:56:27.80スレチだってのうんカス野郎
0824デフォルトの名無しさん
2011/07/03(日) 13:58:22.43人の書いてる事にいちいちケチつけんな
嫌だったらこのスレ開くなカス
0825デフォルトの名無しさん
2011/07/03(日) 14:05:04.110826デフォルトの名無しさん
2011/07/03(日) 14:11:23.73臭い
0827811 ◆QZaw55cn4c
2011/07/04(月) 04:50:39.35評価版(https://downloads.embarcadero.com/free/c_builder)をインストールしました。これに付属する bcc32 のバージョンは 6.31 でした。
これを使用して、以下のソースについて、codeguard のチェック能力を調べました。
http://codepad.org/kq7NFnkJ
(1)グローバルなnew/deleteをオーバーロードする。
(2)適切でないdelete(new[] したものを delete [] せず、delete する)。
(3)仮想デストラクタを定義していない。
以上は133行目〜135行目に #define で記述しています。
それぞれの .cgl ファイルは以下のとおりでした。
アドバイスをいただいた上で到達した最終形 http://codepad.org/oOn0xNo5 問題ありません。
(1) http://codepad.org/3GQQotKu グローバルな new/delete のオーバーロードでは、codeguard は誤動作しました。
(2) http://codepad.org/RlqV8ugy きちんと検出しており、検出内容を示すコメントも適切でした。
(3) http://codepad.org/ZcKLtP1e きちんと検出しており、検出内容を示すコメントも適切でした。
>>814
>しかし今は問題がない
残念ながら上記のとおり問題はありますね。ただしグローバルに new / delete すると、gcc ではコンパイルすらできない※ので、別の意味で推奨されないこと、とも考えられ、codeguard が通らなくてもしかたがないかもしれません。
※http://codepad.org/pVU3fnX4 declaration of 'void* operator new(size_t)' throws different exceptions
(これはどういう意味でしょうか?)
>>728
残念ながら再現できませんでした。codeguard の dll 内で例外が発生したのでは、こちらとしてもどうしようもない。
役立つツールを紹介していただきありがとうございました。
0828デフォルトの名無しさん
2011/07/04(月) 11:16:42.50ここで書かずにEmbarcaderoのQCに報告しろカス
それからRAD Studio XEはアクチベーションを導入しているので、
割れ厨は使えないわけですなヒッヒッヒ
0829デフォルトの名無しさん
2011/07/04(月) 11:22:20.19> ※http://codepad.org/pVU3fnX4 declaration of 'void* operator new(size_t)' throws different exceptions
> (これはどういう意味でしょうか?)
メッセージどおりなんだけど・・・
"defferent" ってのは、置き換え元の ::operator new(size_t) に対してってこと。
0830デフォルトの名無しさん
2011/07/04(月) 16:30:31.92T val;
template<typename S> operator S(){
__if_exists(T::operator S){ return val.operator S(); }
__if_not_exists(T::operator S){ return S(val); }
}
};
Tがoperator Sを持っていて、SがS(T)コンストラクタを持っている場合、
通常、TをSにキャストするとS(T)コンストラクタが呼ばれてしまうと思うのですが、
これを上記のように定義してoperator Sを持っている場合は、
それを優先的に呼ぶようにしたいのですが、
__if_exists(T::operator S)がerror C2760となってしまいます。
変換演算子は__if_existsでは使えないのでしょうか。
0831デフォルトの名無しさん
2011/07/04(月) 18:54:29.72VCスレの方が詳しい人多いと思う
http://hibari.2ch.net/test/read.cgi/tech/1308470068/
0832デフォルトの名無しさん
2011/07/05(火) 03:07:00.03>最近のCPUがL2/L3キャッシュをどんどん大きくしているのは
ということは inline は不利?
>C++0xにもついにthreadが入ったし、
posix-thread をいろいろ試していますが、自己流でかけば、すっぽ抜けが発生しそうで、しかもそのすっぽ抜けは再現性が低く発見が困難でたちが悪い。教科書に載っている書き方以外はしないようにしています。
そこらへん(つまりパターン化されている部分を自然に書けるように)、C++0x には反映されているのでしょうか?
つまりしろーとが安全にスレッドを扱えるようになっているのでしょうか?
0833デフォルトの名無しさん
2011/07/05(火) 07:15:28.89例えばeraseしてもvectorみたいにメモリー解放されなかったりすんの?
あと、枝ごとにメモリー確保すんの?それっとも木全体でメモリー確保すンの?
(企画にはないだろうから多数派の実装を教えて)
0834デフォルトの名無しさん
2011/07/05(火) 07:30:15.420835デフォルトの名無しさん
2011/07/05(火) 07:34:03.93実装依存だがSTLの要件から普通は二分木でじっそうされているらしい
0836デフォルトの名無しさん
2011/07/05(火) 07:50:55.890837デフォルトの名無しさん
2011/07/05(火) 10:01:49.01>>835 こっちの方が出来る奴
0838デフォルトの名無しさん
2011/07/05(火) 10:31:04.18おまえダメなやつだな。
0839デフォルトの名無しさん
2011/07/05(火) 11:48:08.94少なくともgccとVCでは、
- eraseでメモリ解放する
- メモリ確保はノードごとに確保
となってる
んで メモリ確保 とか メモリ解放 とか書いたけどこれらはアロケータに確保解放を要求するだけで、実際にメモリ確保解放するかはアロケータ次第
0840デフォルトの名無しさん
2011/07/05(火) 23:22:34.27てか移動しないのは規格なのかな。
JISのPDFでも見れば載ってんだろうけど。
0841デフォルトの名無しさん
2011/07/06(水) 05:03:41.47erase()って管理してるオブジェクトを開放するだけで、
コンテナが確保したメモリ自体は開放されないんでしたっけ?
swap()使え云々って記憶してるのですが。
0842デフォルトの名無しさん
2011/07/06(水) 05:59:11.99class Property
{
...
};
テンプレート引数に Property<"hoge"> みたいに文字列へのポインタを渡したいんだけど、いい方法ある?
どうしてもコンパイル時定数関係のエラーが出てしまうんだが・・・
用は文字列(リテラル)をテンプレート引数に渡したいんだけど、やっぱり無理かな
class Foo
{
private:
Property<"hoge"> hoge; // エラー
};
0843デフォルトの名無しさん
2011/07/06(水) 06:01:15.63無理。boost::mpl::stringをお勧めする。
0844デフォルトの名無しさん
2011/07/06(水) 06:04:30.33vectorはそうだよ
0845デフォルトの名無しさん
2011/07/06(水) 06:40:08.07extern char const * const p = "hello" ;
template <char const * const & p> class T { } ;
int main(void)
{
T<p> o ; return 0 ;
}
0846デフォルトの名無しさん
2011/07/06(水) 07:09:44.52�dクス。vectorでしたか。
0847デフォルトの名無しさん
2011/07/06(水) 09:15:32.99なるほど。とりあえずmplに手を出してみるか
手持ちの1.45だとboost/mpl/string.hppが存在しないから、バージョンアップが必要っぽいな
>>845
おー、コンパイル通ったし
しかしここまで複雑になるならmpl使った方が良さそうかな・・・
何にせよちょっと試してみるよ。ありがとう
0848デフォルトの名無しさん
2011/07/07(木) 00:21:40.93こんなテンプレートの実体毎にwstringを保持できるようにしてみたんだが、評価してくれると嬉しいな
template <typename S> class PrenamedNode {
public:
PrenamedNode() {}
const std::wstring & GetName() const {
return statics.name;
}
private:
class Statics {
public:
Statics() {
const char * pInput = boost::mpl::c_str<S>::value;
const size_t inputLength = strlen(pInput);
const size_t outputLength = mbstowcs(NULL, pInput, INT_MAX);
if (-1 == outputLength) {
assert(false);
abort();
}
this->name.resize(outputLength);
mbstowcs(&this->name[0], pInput, outputLength);
}
std::wstring name;
} static const statics;
};
0849デフォルトの名無しさん
2011/07/07(木) 00:40:23.21{
PrenamedNode<boost::mpl::string<
'The ', 'quic',
'k br', 'own ',
'fox ', 'jump',
's ov', 'er t'
>> hoge;
PrenamedNode<boost::mpl::string<
'―ソ', 'Ы�\',
'噂浬', '欺圭',
'構蚕', '十申',
'曾箪', '貼能'
>> piyo;
wprintf(hoge.GetName().c_str()); wprintf(L"\n");
wprintf(piyo.GetName().c_str()); wprintf(L"\n");
return 0;
};
codepadを使うべきだったと思うが、何も問題はない
0850デフォルトの名無しさん
2011/07/07(木) 09:19:44.22そんなことしなくても文字列を投げれば良いと思うのですが
文字列をクラスにいれて重くする利点を教えてください。
0851デフォルトの名無しさん
2011/07/07(木) 09:26:28.39try内で文字列判定の処理でも入れる気か?w
0852デフォルトの名無しさん
2011/07/07(木) 09:26:41.740853デフォルトの名無しさん
2011/07/07(木) 14:09:23.23{
}
catch(T1 foo)
{
}
catch(T2 foo)
{
}
catch(T3 foo)
{
}
try
{
}
catch(string foo)
{
if(foo.compare("hoge") == 0)
{
}
else if(foo.compare("huge") == 0)
{
}
else if(foo.compare("huga")== 0)
{
}
}
見るからにアホだろ
意味もなく重くする必要はないが例外処理に速さなんか求める奴がいたら設計から見なおせ
0854デフォルトの名無しさん
2011/07/07(木) 14:15:23.970855デフォルトの名無しさん
2011/07/07(木) 14:19:03.09typedef std::string my_error;
try { ... } catch(my_error & e) { handle_my_error(e); } catch(...) { ... }
handle_my_error(my_error & e) { if(e == "hoge") { ... } else if(e == "fuga") { ... } }
0856855
2011/07/07(木) 14:51:28.93そうなると値より型で調べるほうがいいのかな
0857デフォルトの名無しさん
2011/07/07(木) 17:47:01.23{
virtual void process_error() { ... }
};
class Hoge : public MyError {};
class Piyo : public MyError {};
class Fuga : public MyError {};
...
catch (MyError & e)
{
e.process_error();
}
0858デフォルトの名無しさん
2011/07/07(木) 19:20:19.21throwとcatchの間で文字列や整数の中身のフォーマットをあれこれすりあわせるより
catchはとりあえず抽象型だけ知っとけばおkみたいなほうが気が楽
0859デフォルトの名無しさん
2011/07/07(木) 23:05:50.21try { throw ; }
catch(ex1 & e) { std::cout << e.what() << std::endl ; }
catch(ex2 & e) { std::cout << e.what() << std::endl ; }
catch(...) { throw ; }
};
int main(void) {
try { throw ex1() ; } catch(...) { handle() ; }
try { throw ex2() ; } catch(...) { handle() ; }
}
これがベスト
0860デフォルトの名無しさん
2011/07/09(土) 03:54:45.98でもこの便利さ・・・抜け出せない
0861デフォルトの名無しさん
2011/07/09(土) 10:13:48.170862デフォルトの名無しさん
2011/07/09(土) 10:24:52.460863デフォルトの名無しさん
2011/07/09(土) 10:34:51.170864デフォルトの名無しさん
2011/07/09(土) 14:04:45.21大域脱出を目的として例外処理使うとかgotoという文字面見たくないだけの
超筋悪でしょ…
意図と機能の目的が違っちゃってるよ
0865デフォルトの名無しさん
2011/07/09(土) 14:28:55.450866デフォルトの名無しさん
2011/07/09(土) 15:34:22.110867デフォルトの名無しさん
2011/07/09(土) 15:37:33.970868デフォルトの名無しさん
2011/07/09(土) 19:26:26.08まじめに回答するとできない。多分 setjump/longjump をつかうんじゃないかな?わたしはつかったことないからわからない。
0869デフォルトの名無しさん
2011/07/10(日) 01:31:59.63一応言うけど、C++のtry-catch構文はコンパイラ(具体的にはgcc)によっちゃ
mallocとかsetjumpとか呼びだすからな。しかも(スレッドとは別の)コンテキスト情報まで保存する。
例外処理以外の用途で使うなとは言わんけど、その辺は忘れないようにしたほうがいい。
0870デフォルトの名無しさん
2011/07/10(日) 01:52:40.43MessageRecord record;
MessageSource source( istream ); //メッセージテーブル作成
record.load( &source ); // static変数にメッセージテーブル登録
Message message( MesssageRecord(), "message1" ); //メッセージ取り出し"xxxx%d xxxx%s"をmessageが持つ。
message << value << file; //メッセージに値登録
message.flush();. //メッセージ出力
こういう使い方と、メモリープールを作る用途しか思いつかん。
基本的に使ったことがない。
0871デフォルトの名無しさん
2011/07/10(日) 02:10:26.600872デフォルトの名無しさん
2011/07/10(日) 02:13:01.19class VirtualClass
{
static void *virtual_table[16];
void **vtable;
public:
VirtualClass():vtable(virtual_table){}
};
void *XPortMethod(void *arg,...)
{
ネットワーク先のオブジェクトへ転送処理
}
void *VirtualClass::virtual_table[16] =
{
XPortMethod,
XPortMethod,
XPortMethod
};
VirtualClass instance;
LocalClass *stab = reinterpret_cast<LocalClass*>(&instance);
0873デフォルトの名無しさん
2011/07/10(日) 17:13:42.350874デフォルトの名無しさん
2011/07/10(日) 19:57:16.44今ではもう何が不満だったのか思い出せない
0875デフォルトの名無しさん
2011/07/10(日) 21:18:50.32どうしたんだ?もう燃え尽きてしまったのか?
0876デフォルトの名無しさん
2011/07/11(月) 07:10:24.100877デフォルトの名無しさん
2011/07/11(月) 13:20:41.68void f(const A &obj){ ... }
副作用完了点まで生きているclass Aの一時オブジェクトを組み合わせた
f(A());
で、f内において
const_cast<A&>(obj)
をしてobjの内容を変更しても問題ありませんか?
0878デフォルトの名無しさん
2011/07/11(月) 13:45:43.59参照先の内容を変更するなら const A& ではなくて
A& と宣言したほうがいいと思う
const A& だと普通、参照先は変更されないと思うので
void f( A& obj ) { obj = ...; }
0879デフォルトの名無しさん
2011/07/11(月) 13:48:58.34そんな話じゃないだろ
一時オブジェクトのA&を提案とかアホか
ちなみに>>877の質問の答えは分からん
0880デフォルトの名無しさん
2011/07/11(月) 13:51:11.60f()が束縛しているのがA()の一時オブジェクトだからこの場合は問題がないが、
問題は他の所にある
いやちょっと待て、一時オブジェクトでも、値を変えない事を前提に書かれている
のだから、objの内容を変更したら一時オブジェクトが解体される時、つまりAの
デストラクタが走る時に問題が出るかも知れない
しかしAがconstとは限らなく、Aが非constの時も正しく解体されるようにデスト
ラクタは書かれているはずだからたまたま問題はないか・・・
f()が受け取るのは一時オブジェクトとは限らないというのが最大の問題で、const
を受け取るから安心だと思って呼び出したらなんと中身が書き換えられていた、
という事が起きかねず、バグの温床になるのでこういう書き方は勧められない
基本的にconst_castは必要ないはずで、これを必要とする時はロジックに誤り
があるのが普通で、全体をよく見直す事をおすすめする
0881デフォルトの名無しさん
2011/07/11(月) 14:00:45.38適当に名前を付けたらいいんじゃないの
f( A& obj ) { ... };
A a;
f(a);
0882デフォルトの名無しさん
2011/07/11(月) 14:04:04.700883デフォルトの名無しさん
2011/07/11(月) 14:12:15.12C++0xはやくきてくれ
0884デフォルトの名無しさん
2011/07/11(月) 14:18:47.820886デフォルトの名無しさん
2011/07/11(月) 14:49:40.930887デフォルトの名無しさん
2011/07/11(月) 15:14:46.190888デフォルトの名無しさん
2011/07/11(月) 15:48:33.65LPTSTR p[] = TCHAR[200][100];
f:\ctest\test.h(19) : error C2275: 'TCHAR' : この型は演算子として使用できません
c:\program files\microsoft visual studio 9.0\vc\include\tchar.h(203) : 'TCHAR' の宣言を確認してください。
とエラーが出ます。どう書くべきでしょうか?
0889デフォルトの名無しさん
2011/07/11(月) 15:57:02.37ポインタとnewにすればいいんじゃねーかな
0890デフォルトの名無しさん
2011/07/11(月) 16:00:20.65C++の前にC言語をだな
0891デフォルトの名無しさん
2011/07/11(月) 16:12:54.04c/cppに
TCHAR p[200][100];
hに
#pragma once
extern TCHAR p[200][100];
0892デフォルトの名無しさん
2011/07/11(月) 16:28:48.980893888
2011/07/11(月) 16:59:16.52で書きます。ありがとうございます。
0894デフォルトの名無しさん
2011/07/11(月) 17:15:12.62sizeof(p)が出来る
0895デフォルトの名無しさん
2011/07/11(月) 17:38:05.63VCで200省略したらエラーになった。
0896デフォルトの名無しさん
2011/07/11(月) 17:39:44.56なるわけないだろう・・・・・
念のため確かめたが動くし
0897デフォルトの名無しさん
2011/07/11(月) 17:59:02.28constで定義した変数をconst_castして変更するのは未定義
非constをconst&にキャストしたのをまた非constにキャストするのは合法
0898デフォルトの名無しさん
2011/07/11(月) 18:05:59.63なんで質問の趣旨が理解出来ない奴がこんなに多いんだwwwww
具体例まであるのにw
0899デフォルトの名無しさん
2011/07/11(月) 18:08:33.052行目まで読んだ?ちゃんと答えてるんだけど
まあ朝鮮人に日本語2行はちょっと難しかったかな
0900デフォルトの名無しさん
2011/07/12(火) 10:31:25.29const A obj;
const_cast<A&>(obj)
ではなく
const A& r = A();
const_cast<A&>(r)
と同じ事で
非constの一時オブジェクトをconst参照で受けて
それを元の非constにcastしてるだけだから大丈夫
ということかな。
0901デフォルトの名無しさん
2011/07/12(火) 19:06:58.28・C#のインターフェイスのようなクラスを作る場合、純粋仮想デストラクタは
出来ないようなので実装を持たせることになりますが〜.hと〜.cppのどちら
に書くべきでしょうか。
0902デフォルトの名無しさん
2011/07/12(火) 19:22:31.23・ttp://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E4%BB%AE%E6%83%B3%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF(Virtual_Constructor)
・template
0903デフォルトの名無しさん
2011/07/12(火) 21:53:10.290904デフォルトの名無しさん
2011/07/12(火) 21:57:50.93thisポインタ経由ってどういう意味?
0905デフォルトの名無しさん
2011/07/12(火) 22:06:06.94ということです
0906デフォルトの名無しさん
2011/07/12(火) 22:16:30.660907デフォルトの名無しさん
2011/07/12(火) 22:17:02.20static なんだから
func();
でいいんじゃないか?
0908デフォルトの名無しさん
2011/07/12(火) 22:20:09.460909907
2011/07/12(火) 22:25:47.490910デフォルトの名無しさん
2011/07/12(火) 22:32:25.48可能です。
0911デフォルトの名無しさん
2011/07/13(水) 11:28:34.55void Print() {
PrintCore(); // ぱっと見どこで定義されている関数か分からない
this->PrintCore(); // インスタンス関数の呼び出しに見える
Hoge::PrintCore(); // クラス名を間違える可能性
}
static void PrintCore();
};
俺の場合はHogeクラス内で typedef Hoge this_class を宣言して、this_class::PrintCore() と呼び出している。
0912デフォルトの名無しさん
2011/07/13(水) 11:31:14.370913デフォルトの名無しさん
2011/07/13(水) 11:38:54.17フリー関数ならnamespace::で判るし、
別のクラスのメソッドなら前に obj. とか付くし、
static でないメソッドの中からしたら、staticかどうかなて関係ないし。
普通にPrintCore()でいいんでないのん?
0914デフォルトの名無しさん
2011/07/13(水) 12:03:06.87メンバ変数名には m_hoge や _hoge のようなプレフィックスを使わない hoge で十分
class Hoge {
private:
typedef Hoge this_class;
int value;
static int hogeValue;
};
メンバ変数 value へのアクセスは this->value を使用し
静的メンバ変数 hogeValue へのアクセスは this_class::hogeValue を使用する
という俺の宗教ですが何か
0915デフォルトの名無しさん
2011/07/13(水) 12:03:58.12使うときは一つなのはなぜですか?
0916デフォルトの名無しさん
2011/07/13(水) 12:16:56.030917デフォルトの名無しさん
2011/07/13(水) 13:38:09.31指定した型が必要とするサイズはコンパイラが知ってるんだし、
ユーザーが指定するとしたら間違える可能性もでてきちゃう。
0918デフォルトの名無しさん
2011/07/13(水) 16:57:48.00何のメリットも見つからない
0919デフォルトの名無しさん
2011/07/13(水) 17:01:17.29独り言はチラシの裏に書け
0920デフォルトの名無しさん
2011/07/13(水) 17:20:48.31やけに息が合った書き込みですね
0921デフォルトの名無しさん
2011/07/13(水) 18:07:22.91Pythonでもやってろよ
0922デフォルトの名無しさん
2011/07/13(水) 18:44:18.77それとも m_hoge 派ですか?
なにも修飾がない、ただの hoge は、確かに見たくないな
大域変数なのか、メンバ変数なのか、関数の仮引数なのか、
いちいち確かめるために時間が無駄になる
確かめる手間を省くことで、コードの可読性は上がり、読む人の負担は軽減されると思う
同じ理由から、修飾無しの foo() も可読性にやや劣ると思う
0923デフォルトの名無しさん
2011/07/13(水) 18:47:23.010924デフォルトの名無しさん
2011/07/13(水) 18:53:50.12int hoge_;
としてた
0925デフォルトの名無しさん
2011/07/13(水) 18:57:25.94全部のクラスにこんなことしてたら大変だと思うんだけど
適切な運用法をばっさり教えてくれ
0926デフォルトの名無しさん
2011/07/13(水) 19:07:19.660927デフォルトの名無しさん
2011/07/13(水) 20:13:37.20this->func1();
もありだと思うけどな。
this->data=0;
とやればデータメンバだと分かるからという理由で装飾を止めてしまうと、
ローカルメンバと衝突する可能性がでてくる。
そしてたぶん、コンパイルエラーにならないよな・・?
だから辞めた方が良い。
0928デフォルトの名無しさん
2011/07/13(水) 22:20:56.55thisを付けずにはいられない。
0929デフォルトの名無しさん
2011/07/13(水) 22:22:21.47上みたくポインタ経由で情報を取得する系の関数の場合、一般的に必ずif (buf)するもんなの?
0ならどうせ正常に動かないんだから必要ないように感じるんだけど。もちろん場合によるけども
参照も考えたけど、const&以外はどうもしっくりこなくて
0930デフォルトの名無しさん
2011/07/13(水) 22:42:49.030931デフォルトの名無しさん
2011/07/13(水) 23:01:12.500932デフォルトの名無しさん
2011/07/13(水) 23:26:04.320933デフォルトの名無しさん
2011/07/13(水) 23:28:24.940934デフォルトの名無しさん
2011/07/13(水) 23:34:37.08メンバにはm_を頭につけるだけで衝突も区別も解決するけどな
メンバを参照するときはthisとか書かずにコード保完で一発だし
0935sage
2011/07/14(木) 00:35:44.83実行結果がテキストのものと違くなってしまいます
テキストの実行結果では
Base
Derived
こうなるんですけど書き写したものを実行すると上のリンク先の実行結果になってしまう
意味がわからないので教えてください
0936デフォルトの名無しさん
2011/07/14(木) 00:53:22.76俺もよくわからないんだが、こうしたらOKだった
http://codepad.org/3fFEuUbU
0937デフォルトの名無しさん
2011/07/14(木) 01:03:58.13仮想関数を持たないクラスに対する typeid は静的な型しか返さない。
5.2.8 [expr.typeid] p3
> When typeid is applied to an expression other than an lvalue of a polymorphic
> class type, the result refers to a type_info object representing the static type of
> the expression. ...
0938デフォルトの名無しさん
2011/07/14(木) 10:08:06.99template<typename S>void operator+(S);//A
template<size_t L>void operator+(const T(&)[L]){}//B
template<>void operator+(const T*){}//C
};
template<typename T,typename S>void operator+(S,const STR<T>&);//D
template<typename T,size_t L>void operator+(const T(&)[L],const STR<T>&){}//E
template<typename T>void operator+(const T*,const STR<T>&){}//F
const char a[]="a";
const char *b=a;
STR<char>c;
c+a;//B
c+b;//C
a+c;//Eを呼びたいがC2593
b+c;//F
ポインタか配列かを区別したいのですが、グローバル演算子の方はそもそも特殊化になっていないようです。
EとFをDの特殊化として、曖昧さを解決する方法はありませんか?
0939デフォルトの名無しさん
2011/07/14(木) 10:11:16.34横からだが、情報サンクス…。
まさかこのスレで勉強になることがあろうとはw
0940938
2011/07/14(木) 11:21:31.48関数を部分特殊化のようにしたい場合は関数オブジェクトを使うようなのですが
operator+は関数オブジェクトにはできないので、
別の関数オブジェクトを作ってそれを呼ぶようにして自己解決しました。
template<typename T,typename S>struct SUB{
void operator()(S,const STR<T>&);//D
};
template<typename T>struct SUB<T,const T*>{
void operator()(const T*,const STR<T>&){}//E
};
template<typename T,size_t L>struct SUB<T,const T[L]>{
void operator()(const T(&)[L],const STR<T>&){}//F
};
template<typename T,typename S>void operator+(const S&s,const STR<T>&t){//(D)
SUB<T,S> sub;sub(s,t);
}
0941デフォルトの名無しさん
2011/07/14(木) 12:02:40.57あと、EとFみたいなのを作りたい場合は普通にオーバーロードさせればいい
BとCも同じ
template<std::size_t N> void operator+(const T[N]); // B
void operator+(const T *); // C
みたいな感じで
0942938
2011/07/14(木) 13:37:25.44しかしFが呼ばれてしまいました。
>普通にオーバーロード
Cのtemplate<>とAを消すとBが呼ばれました。
templateでない方が優先されるようなので、左辺にクラスが来る場合でも
グローバルテンプレートとして以下のようにしたところ、うまくいきました。
template<typename T>void operator+(const STR<T>&,const T*){}//C
Dに関係なくEとFはオーバーロードされているらしく、Dを消しても変わりませんでした。
(&)は消せないので逆にFをconst T*const&にするとうまくいきました。
やはり、&を外すか両方につけるかがC2593の解決方法のようですね。
Cに&が必要がないのはBがクラス内部だからか…?
これで余計な型へのオーバーロードを宣言することなくいけそうです。
ありがとうございました。
0943938
2011/07/14(木) 14:39:36.16template<size_t L>void operator+=(const T(&)[L]){}//B2
};
//template<typename T> void operator+=(const STR<T> &,const T*){}//C2
//template<typename T> void operator+=(STR<T> &,const T*){}//C3
template<typename T> void operator+=(STR<T> &,const T*const &){}//C4
+=を定義しようと、operator+と同じ型のB2とC2を追加し、コンパイルできました。
しかし、実際には+=は値を変更するのでC3のように左辺のSTR<T>からconstを取った所
C2593になってしまいました。
結局C4のように、また右辺をconst T*const &とすることで、回避しました。
以上、日記ばかりですいません。
0944デフォルトの名無しさん
2011/07/14(木) 20:34:42.16std::clog << "1";
std::cerr << "2";
std::clog << "3";
とした場合、1がバッファリングされている間に2が先に出力され、"213"となる場合があるのでしょうか?
0945デフォルトの名無しさん
2011/07/14(木) 22:32:25.88どう思う?
つーかBjarne Stroustrupを捕まえて、C++をよくしらないとか
呆れるんだけど
>「Effective C++」 は駄作でしょうか?
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1263432432
0946デフォルトの名無しさん
2011/07/14(木) 22:33:27.280947デフォルトの名無しさん
2011/07/14(木) 23:37:05.43以下のコードは、どうしてコンパイルエラーになんですか?
ttp://ideone.com/VoAl5
dp の動的な型は E なので、
仮想関数をオーバーライドしている E::f(X) が呼ばれると思ったのですが、
名前の隠蔽が何か悪さをしているのでしょうか?
0948デフォルトの名無しさん
2011/07/14(木) 23:42:22.42dp->B::f などと明示的に指定するか D 内で using B::f して見えるようにしてやってください
0949デフォルトの名無しさん
2011/07/15(金) 18:40:05.870950デフォルトの名無しさん
2011/07/15(金) 18:41:17.710951デフォルトの名無しさん
2011/07/15(金) 18:45:56.71#define self (*this)
ってやるよねみんな
0952デフォルトの名無しさん
2011/07/15(金) 18:47:28.650953デフォルトの名無しさん
2011/07/15(金) 18:49:24.990954デフォルトの名無しさん
2011/07/15(金) 19:13:06.49const Hoge &self() const {return *this;}
とか
0955デフォルトの名無しさん
2011/07/15(金) 19:17:23.790956デフォルトの名無しさん
2011/07/15(金) 19:26:53.99private:Hoge &This;
public:Hoge(): This( *this ){ This.func(); }
void func();
};
0957デフォルトの名無しさん
2011/07/15(金) 19:41:13.430958デフォルトの名無しさん
2011/07/15(金) 19:42:09.00public:
int t, e;
E(int a, int b) {
t = a;
e = b;
}
bool operator<(const E &r) {
return (t == r.t ? e < r.e : t < r.t);
}
};
int main(){
multiset<E> ms;
ms.insert(E(800, 1));
}
setの型を自作クラスにしたくて上のようにしたのですが,下記のエラーが出てコンパイル通りません.何が原因でしょうか.
stl_function.h: In member function ‘bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = E]’:
stl_tree.h:1168: instantiated from ‘typename std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_equal(const _Val&)
[with _Key = E, _Val = E, _KeyOfValue = std::_Identity, _Compare = std::less, _Alloc = std::allocator]’
stl_multiset.h:370: instantiated from ‘typename std::_Rb_tree<_Key, _Key, std::_Identity<_Key>, _Compare, typename _Alloc::rebind<_Key>::other>::const_iterator std::multiset<_Key, _Compare, _Alloc>::insert(const _Key&)
[with _Key = E, _Compare = std::less, _Alloc = std::allocator]’
code.cpp:28: instantiated from here
stl_function.h:230: error: passing ‘const E’ as ‘this’ argument of ‘bool E::operator<(const E&)’ discards qualifiers
0959デフォルトの名無しさん
2011/07/15(金) 19:44:23.210960デフォルトの名無しさん
2011/07/15(金) 21:29:57.32そのようにした意図を禿が言っているのを読んでみたいんですが、
禿本の何ページとか禿Webのどことか誰か知りませんか?
そう決めた人が禿でなければ禿以外の人でも他の禿でもいいです。
0961デフォルトの名無しさん
2011/07/15(金) 21:35:34.82ありがとう.でも自分では理解できてない・・
0962デフォルトの名無しさん
2011/07/15(金) 21:52:50.70・setに入れるときはデータがconstの状態で入れられる。
(そうしないと木が崩れるから)
・constの状態で呼べるのはconstメンバ関数だけ。
つまり比較演算子が呼べなくてコンパイルエラー
0963デフォルトの名無しさん
2011/07/15(金) 22:52:05.69>・constの状態で呼べるのはconstメンバ関数だけ。
なるほど,なんとなくわかりました.ありがとう.
0964デフォルトの名無しさん
2011/07/16(土) 12:23:52.18{
X data_[3];
public:
template <typename Y, typename Z>
friend Vector<X> operator+( const Vector<Z>& x, const Vector<Y>& y){
Vector<X> z;
for(int i = 0; i < 3; ++i) z.data_[i] = x.data_[i] + y.data_[i];
return z;
}
};
int main(){
Vector<double> x,y;
Vector<float> z;
Vector<long double> a = x + z + y;
}
のように精度が異なるVectorの足し算を行うクラスを作りたいのですがうまくいきません。
どのようにすればいいでしょうか?
0965デフォルトの名無しさん
2011/07/16(土) 13:20:26.95ほとんどでてるであろうエラーの説明になるけど
operator+でテンプレート引数の違うVectorを呼んだ場合
返り値のVector<X>をどっちにの型にしたらいいのか曖昧になってる
0966デフォルトの名無しさん
2011/07/16(土) 17:27:43.23参照カウンタを用いて管理しているそうですが、
get() メソッドで取得したポインタを使いまわした場合、
それらは管理対象外という認識でよろしいのでしょうか?
0967デフォルトの名無しさん
2011/07/16(土) 17:31:26.27そうだよ。
getしたポインタ使いまわしていても、shared_ptrの参照カウントが0になると削除されるよ。
そして、shard_ptrから所有権を剥奪するメンバ関数もない。
0968デフォルトの名無しさん
2011/07/16(土) 17:34:26.10即レスありがとうございます。
気をつけないとダメなんですね。
0969デフォルトの名無しさん
2011/07/16(土) 17:42:27.010970デフォルトの名無しさん
2011/07/16(土) 17:55:49.13つまりコピーさせないって事ですね。
ありがとうございます。
0971デフォルトの名無しさん
2011/07/16(土) 18:37:24.91割と手抜きだけど、よかったらどうぞ
ttp://codepad.org/U49icpW7
0972デフォルトの名無しさん
2011/07/16(土) 18:54:23.28そこのパフォーマンス気にするなら、
shared_ptrなんか渡さずポインタ渡しするか、または
スマポなんて使わないか、になるとおもうがなぁ。
無駄に引数が長くなるだけじゃね?const 参照なんてしたら
0973964
2011/07/16(土) 19:21:35.31レスありがとうございます。
float + double なら返り値は double、double + long doubleなら
返り値は long double 等、精度が高いほうを返すようにしたいのですけど、
自動的に実現する方法はなく、テンプレートの特殊化で、
全ての組み合わせを明示的に羅列するしかないのでしょうか?
0974デフォルトの名無しさん
2011/07/16(土) 19:33:14.07// XとYの内サイズの大きい方に合わせる
template <typename X, typename Y>
Vector<typename std::conditional<sizeof(X) >= sizeof(Y), X, Y>::type>
operator+(const Vector<X> &lhs, const Vector<Y> &rhs)
{
return Vector<typename std::conditional<sizeof(X) >= sizeof(Y), X, Y>::type>(lhs) += rhs;
}
std::conditionalが使えないなら、boost::mpl::if_cを使うか、それ相当のものを自作する
0975デフォルトの名無しさん
2011/07/16(土) 19:37:16.66template <typename Y, typename Z>
friend Vector<decltype((Y)0+(Z)0)> operator+( const Vector<Z>& x, const Vector<Y>& y){
0976デフォルトの名無しさん
2011/07/16(土) 19:40:25.21スマポの安全性もパフォーマンスも欲しいゾ
0977964
2011/07/16(土) 19:41:32.14これを機にC++0xを始めてみようと思います。教えて頂いた
コードを理解できるよう勉強してみます。
0978デフォルトの名無しさん
2011/07/16(土) 19:52:33.93引数でconst参照のshared_ptrは普通に使うと思うぞ
0979デフォルトの名無しさん
2011/07/16(土) 21:03:48.51そうなのか例えば
void fuga::func(const boost::shared_ptr<const hoge>& arg)const;
とか一瞬嫌な感覚があって・・・
まあ状況にもよるとおもうが
0980デフォルトの名無しさん
2011/07/16(土) 21:10:55.36パフォーマンスがどうでもいいところ以外でshared_ptrを使うなんて恥さらし以外のなんでもないぞ
設計ちゃんとしてナマポかユニポ使うのが技術者として最低限の良心だろ
思考放棄してとりあえずshared_ptrでいいかとか言ってるうちは永遠にアマチュア
0981デフォルトの名無しさん
2011/07/17(日) 00:08:38.09パフォーマンスがどうでもいいところじゃね?
0982デフォルトの名無しさん
2011/07/17(日) 00:10:26.460983デフォルトの名無しさん
2011/07/17(日) 00:38:23.480984デフォルトの名無しさん
2011/07/17(日) 01:17:47.24いや、業務用アプリにC++なんぞ必要ない。C#で十分だ
0985デフォルトの名無しさん
2011/07/17(日) 01:26:54.74・・・は長いので、Hogeクラスにtypedefを用意しておく
class Hoge
{
public:
typedef boost::shared_ptr<Hoge> shared_ptr;
typedef boost::shared_ptr<const Hoge> shared_ptr_const;
};
void SetHoge(const Hoge::shared_ptr & pHoge) {}
0986デフォルトの名無しさん
2011/07/17(日) 01:30:26.872時間半近く考えた結論がそれか?
0987デフォルトの名無しさん
2011/07/17(日) 08:17:12.53どうせ 0x 使うなら declval か trailing return type 使おうぜ。
0988デフォルトの名無しさん
2011/07/17(日) 10:08:07.82http://codepad.org/dLb34JI8
gccのtypeinfoは読みにくいな…
vcのは (int,float)->float
x+z+y -> class MyVec<double> と表示されるのだけど
0989デフォルトの名無しさん
2011/07/17(日) 12:52:15.68f○○k。ならどうやってomitするかteachしてくださいよメーン?
0990デフォルトの名無しさん
2011/07/17(日) 12:55:46.440991デフォルトの名無しさん
2011/07/17(日) 13:10:26.32ユーザーが呼び出す順番にルールがある場合は
どのようなデザインが望ましいですか?
0992デフォルトの名無しさん
2011/07/17(日) 13:21:47.020993デフォルトの名無しさん
2011/07/17(日) 13:24:42.40クライアントが呼び出す半順序に制限がある状態Pでは
どのようなデザインが望ましいでしょうか?
0994デフォルトの名無しさん
2011/07/17(日) 13:28:38.510995デフォルトの名無しさん
2011/07/17(日) 13:38:17.34メンバー関数に番号をつける。
クライアントはクラスから使用可能メンバー関数の番号リストを借りることが出来る。
それを見てクライアントは次に使うメンバー関数を決める。
0996デフォルトの名無しさん
2011/07/17(日) 13:58:21.470997デフォルトの名無しさん
2011/07/17(日) 13:58:22.30どんな順番で呼び出してもいいように作り直しましょう
0998デフォルトの名無しさん
2011/07/17(日) 14:14:58.020999デフォルトの名無しさん
2011/07/17(日) 14:24:24.491000デフォルトの名無しさん
2011/07/17(日) 14:25:56.0210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。