C++相談室 part97
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/07/29(日) 19:54:35.24ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part96
http://toro.2ch.net/test/read.cgi/tech/1341029267/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0002デフォルトの名無しさん
2012/07/29(日) 19:55:09.93[C++ FAQ]
http://www.parashift.com/c++-faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://en.cppreference.com/w/cpp (英語)
http://ja.cppreference.com/w/cpp (↑の日本語訳だけどまだ未完)
[Stroustrup]
http://www2.research.att.com/~bs/
[C++ International Standard]
http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50372
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。
0003デフォルトの名無しさん
2012/07/29(日) 19:55:44.26amazon 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/ (翻訳)
0004デフォルトの名無しさん
2012/07/29(日) 19:56:18.03Effective 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/
0005デフォルトの名無しさん
2012/07/29(日) 19:56:52.04/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/ 私は只の数ヲタなんかとは付き合わないわ。
. | \ ∠イ ,イイ| ,`-' | 頭が良くて数学が出来てかっこいい人。それが必要条件よ。
| l^,人| ` `-' ゝ | さらに Ann.of Math に論文書けば十分条件にもなるわよ。
| ` -'\ ー' 人 一番嫌いなのは論文数を増やすためにくだらない論文を書いて
| /(l __/ ヽ、 良い論文の出版を遅らせるお馬鹿な人。
| (:::::`‐-、__ |::::`、 ヒニニヽ、 あなたの論文が Ann of Math に accept される確率は?
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\ それとも最近は Inv. Math. の方が上かしら?
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0006デフォルトの名無しさん
2012/07/29(日) 19:58:03.81しかし、ずっと4GBでいい、とは思っていない
一応、8GBまで増やせるから、そのときが来たら8GB搭載させる
だが、現実問題として、4GBで困ってない
ぶっちゃけ2GBでも困らない
じゃあ、今のPCのメモリを2GBに減らせるのかと考えると、なんか減らしはしたくない
こうしてステマにハメられて、メモリは増加の一途をたどってきたのだ
だからこそ、あえての16GB搭載マシンを買う
それがチョイ悪オヤジの、「あえて」の外し方
0007デフォルトの名無しさん
2012/07/29(日) 20:14:40.30で?
0008デフォルトの名無しさん
2012/07/29(日) 20:15:11.470009デフォルトの名無しさん
2012/07/29(日) 20:40:25.69環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0010デフォルトの名無しさん
2012/07/29(日) 21:15:46.55メモリ2GBとかカツカツであり得ない
0011デフォルトの名無しさん
2012/07/29(日) 21:18:25.15OSはWindows2000Professionalな
0012デフォルトの名無しさん
2012/07/29(日) 21:51:24.50仮装マシンがウィンドウズなら厳しいが、リナックスならわりと大丈夫
0013デフォルトの名無しさん
2012/07/29(日) 21:55:28.99しかし、ずっとBetter Cでいい、とは思っていない
一応、C++03の仕様まで知ってるから、そのときが来たらC++03の機能まで使う
だが、現実問題として、Better Cで困ってない
ぶっちゃけCでも困らない
じゃあ、今後コードをCで書くかと考えると、なんか書きたくはない
こうしてステマにハメられて、言語機能増加をたどってきたのだ
だからこそ、あえてのC++11対応コンパイラオプションを使う
それがチョイ悪オヤジの、「あえて」の外し方
0014デフォルトの名無しさん
2012/07/29(日) 22:09:29.62しかし、ずっとWindows Meでいい、とは思っていない
一応、Windows XPまで更新できるから、そのときが来たらWindows XP搭載させる
だが、現実問題として、Windows Meで困ってない
ぶっちゃけWindows 98SEでも困らない
じゃあ、今のPCのOSをWindows 98SEに載せ替えるかと考えると、なんか載せ替えたくない
こうしてステマにハメられて、OSはバージョンアップの一途をたどってきたのだ
だからこそ、あえてのWindows Vista搭載マシンを買う
それがチョイ悪オヤジの、「あえて」の外し方
0015デフォルトの名無しさん
2012/07/29(日) 22:21:01.340016デフォルトの名無しさん
2012/07/29(日) 22:23:30.35http://www.cplusplus.com/reference/std/utility/rel_ops/
0017デフォルトの名無しさん
2012/07/29(日) 22:56:27.75!=がなにをやっても真だから気が狂いそうだったわ
0018デフォルトの名無しさん
2012/07/30(月) 09:52:40.83具体的には何がどういう理由でダメなの?
0019デフォルトの名無しさん
2012/07/30(月) 09:54:42.060020デフォルトの名無しさん
2012/07/30(月) 10:37:06.87お前のばーちゃんハイスペックだな……
0021デフォルトの名無しさん
2012/07/30(月) 11:13:28.11http://www.google.co.jp/search?q=virtual+%E3%83%87%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF+%E6%9C%AA%E5%AE%9A%E7%BE%A9
0022デフォルトの名無しさん
2012/07/30(月) 11:31:01.77ありがとう
vectorを継承するなら、デストラクタを明示的に呼び出せばいいのね
0023デフォルトの名無しさん
2012/07/30(月) 12:32:54.07問題は基本クラスのナマポでdeleteした場合、サブクラスのデストラクタが呼ばれないこと
動的削除子がサポートされているスマポを使えば問題ない
0024デフォルトの名無しさん
2012/07/30(月) 12:47:23.700025デフォルトの名無しさん
2012/07/30(月) 14:08:19.24克服できるってことじゃろうか
0026デフォルトの名無しさん
2012/07/30(月) 14:46:14.19cstdlibみたいなのある?
0027デフォルトの名無しさん
2012/07/30(月) 15:01:51.320028デフォルトの名無しさん
2012/07/30(月) 15:13:37.71仮想デストラクタがないという理由とか?
でもポインタ経由でないなら安心のような気も
というか>>21に書かれてた
0029デフォルトの名無しさん
2012/07/30(月) 15:22:30.42これは初めて知った
スマポ便利過ぎる
class A {
int* ip;
public:
A(int i = 0) : ip(new int[i]) {}
// virtual ~A() { delete[] ip; }
~A() { delete[] ip; }
};
class B : public A {
double *dp;
public:
B(int i = 0) : dp(new double[i]) {}
~B() { delete[] dp; }
};
int main()
{
A* ap = new B;
delete ap; // メモリリーク発生!
boost::shared_ptr<A> sap(new B); // 放置してもメモリリークは発生しない
}
0030デフォルトの名無しさん
2012/07/30(月) 16:04:25.36コンピュータおばあちゃんwww
0031デフォルトの名無しさん
2012/07/30(月) 16:23:57.85をエラーにする方法ってある?
0032デフォルトの名無しさん
2012/07/30(月) 16:30:11.990033デフォルトの名無しさん
2012/07/30(月) 16:50:27.77もう少しくやしく
0034デフォルトの名無しさん
2012/07/30(月) 16:54:02.960035デフォルトの名無しさん
2012/07/30(月) 17:39:30.49く、くそっ。笑ってしまったw くやしいっ…!
0036デフォルトの名無しさん
2012/07/30(月) 19:52:33.15protected継承
0037デフォルトの名無しさん
2012/07/30(月) 20:15:44.53ありがとう
これでvectorを継承してvector *a=new Bekutaをエラーに出来る
0038デフォルトの名無しさん
2012/07/30(月) 20:35:21.970039デフォルトの名無しさん
2012/07/30(月) 20:55:14.66private継承
アクセス権の変更でstd::vectorにはキャストできないが、
std::vectorのフル機能をラッピング関数なしで公開できる。
struct Example:private std::vector<int>
{
using std::vector<int>::push_front;
using std::vector<int>::push_back;
・・・以下略・・・
};
ちなみにusingは省略可。なんでusingと書けるかはしらん。
0040デフォルトの名無しさん
2012/07/30(月) 21:00:21.830041デフォルトの名無しさん
2012/07/30(月) 21:02:05.22やってみなくちゃわからない
0042デフォルトの名無しさん
2012/07/30(月) 21:02:20.55オーバーロードの面倒見る必要ないからな
0043デフォルトの名無しさん
2012/07/30(月) 22:03:51.36省略するな
てか、using宣言とアクセス宣言を混同するな
0044デフォルトの名無しさん
2012/07/30(月) 22:05:53.17したら何が困るん?
0045デフォルトの名無しさん
2012/07/30(月) 22:39:08.93見つからん。 気のせいだったかな。
0046デフォルトの名無しさん
2012/07/30(月) 22:46:58.740047デフォルトの名無しさん
2012/07/30(月) 22:47:49.38>using宣言とアクセス宣言を混同するな
???
0048デフォルトの名無しさん
2012/07/30(月) 23:02:56.69どうやら本気でわからんようだな
地味ながら右辺値参照と比肩する問題かも
0049デフォルトの名無しさん
2012/07/30(月) 23:17:14.60動作上は全く同じ仕様だよな
0050デフォルトの名無しさん
2012/07/31(火) 00:45:57.61右辺値参照が問題?
勘違いでないのなら、2つの問題をそれぞれ示してくれ。
0051デフォルトの名無しさん
2012/07/31(火) 01:52:54.39日比谷公園で行われていた反日左翼たちの集会の様子
その後、この労組を中心とした反原発デモ行進が始まった。wwwww
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1478.jpg
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1479.jpg
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1494.jpg
これで、「多様な人たちが自由に何の制約もなく参加している」とか
「組織型の運動との違いを感じ…」などと良くも言えるものだ!
7月29日 国会包囲 反原発デモに参加された一般人???の方々wwwww
日大全共闘
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1540.jpg
芝工大全学闘&明大全共闘
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1542.jpg
アジア共闘●&三里塚闘争勝手連&日米軍事同盟反対 アジア米軍総撤収
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1547.jpg
9条の会
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1582.jpg
郵政労働者ユニオン
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1588.jpg
芸大教組
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1600.jpg
緑の党
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1603.jpg
ピースボート (社民党&北朝鮮)
http://i.imgur.com/lY0nX.jpg
http://mamorenihon.files.wordpress.com/2011/05/peaceboat.jpg
今話題の滋賀県教組
http://takemikazuchi.iza.ne.jp/images/user/20120723/1875097.jpg
0052デフォルトの名無しさん
2012/07/31(火) 02:03:49.84Semper fi! Do or die!
private継承って便利やね
0053デフォルトの名無しさん
2012/07/31(火) 02:59:36.72これだけのためにboostをいますぐ入れるべき。
0054デフォルトの名無しさん
2012/07/31(火) 04:25:37.140055デフォルトの名無しさん
2012/07/31(火) 04:30:23.70そこらへんは変わらんよ
0056デフォルトの名無しさん
2012/07/31(火) 05:08:30.66アプローチの仕方が全く異なる言語を持ちだされて例えられても困る
C++はGCがなく、パフォーマンスを最重要視した言語
いわばGCに相当する作業を自分でやる
例えばリアルタイムな応答が必要なクリティカルな部分を走らせている
時に突然GCが走ってしばらく固まったりしたら致命的
ゲームなんかはそう
他にもこういう場面は多いだろう
計測機器とか
もう時間的に余裕が出来てから初めて不要なリソースを解放する
用途が違う
0057デフォルトの名無しさん
2012/07/31(火) 05:11:40.93今時そんなんで止まらないよ
0058デフォルトの名無しさん
2012/07/31(火) 06:53:39.91「GCが無いのは省いているから」でFAにしとけよ……
0059デフォルトの名無しさん
2012/07/31(火) 06:59:33.84大量に開放されるのが嫌ならできるだけ
未参照領域を作らないようにすりゃいいだけ
問題なのはアホみたいなメモリー消費量
アプリケーション起動数やスレッド数に影響するし
切迫してる場合はスライシング起こす
0060デフォルトの名無しさん
2012/07/31(火) 07:00:54.450061デフォルトの名無しさん
2012/07/31(火) 11:19:06.980062デフォルトの名無しさん
2012/07/31(火) 11:22:10.270063デフォルトの名無しさん
2012/07/31(火) 11:23:23.880064デフォルトの名無しさん
2012/07/31(火) 11:37:23.15http://oshiete.goo.ne.jp/qa/4023937.html
上の質問の解答の使い方を「何度も」実行すると
Access violationというエラーが出てしまいます。
何度も実行(キーの自動入力)できるようにするにはどうしたらよいでしょうか。
アドバイスをよろしくお願いします。
0065デフォルトの名無しさん
2012/07/31(火) 11:53:21.56再入不能な処理を別スレッドでやると何かいいことあるのか?
0066デフォルトの名無しさん
2012/07/31(火) 11:57:38.23技術的に無理な事を書かれてもねえ
0067デフォルトの名無しさん
2012/07/31(火) 12:22:05.960068デフォルトの名無しさん
2012/07/31(火) 12:28:26.99の動作が、VC++とCentOS 5 gcc で違うのね。
windows:10回コンストラクタが呼ばれる
linux:1回コンストラクタが呼ばれ、9回は初めに生成したもののコピー
これでハマッタorz。
0069デフォルトの名無しさん
2012/07/31(火) 12:53:25.59中に動的生成なメンバを持っていて自前のコピーコンストラクタが書かれてないとか?
それって何か問題ある?
0070デフォルトの名無しさん
2012/07/31(火) 12:56:23.800071デフォルトの名無しさん
2012/07/31(火) 13:17:11.86http://en.cppreference.com/w/cpp/container/vector/vector
0072デフォルトの名無しさん
2012/07/31(火) 13:31:02.29それだと潜在的なバグなわけで、どっちみちいつか問題が露呈する
と言うかvectorのメンバ関数push_back()ですらコピーコンストラクタを
呼び出すだろ
どういう事をしようとしていたんだ?
C++11の場合一時オブジェクトならムーブコンストラクタを呼び出すが
>>71
2) Constructs the container with count copies of elements with value value.
としか書いてないから実装の違いだね
0073デフォルトの名無しさん
2012/07/31(火) 13:33:20.78cppから自動的にヘッダを作るスタイルがいいのか
どっちがおすすめかしら
0074デフォルトの名無しさん
2012/07/31(火) 13:34:10.763) Constructs the container with count value-initialized (default constructed, for classes) instances of T. No copies are made.
だね
No copies are made.
だからC++11はコピーで初めに生成した値を広げる動作はしない事が保証されているのか
じゃあC++03の実装の違いとしか言いようがない
そんな事で問題が出るようなクラスの書き方をする方が間違っている
0075デフォルトの名無しさん
2012/07/31(火) 13:44:24.97shared_ptr を内包させたクラス。
コンストラクタでインスタンスを生成していたのだが、
2個目以降が1個目のコピーになると、1つのインスタンスを共有する10個の要素ができる。
vector<Hoge> hoge(10,Hoge());
>>71
visual studio 2010 vs gcc44 4.4.6
なるほど、さんくす
0076デフォルトの名無しさん
2012/07/31(火) 13:45:06.87で解決した・・が抜けた
0077デフォルトの名無しさん
2012/07/31(火) 14:06:26.27なるほどこういう罠があったからC++11ではコピーコンストラクタで初期化値を
広げるのをやめたのか
0078デフォルトの名無しさん
2012/07/31(火) 14:14:56.08高級なのに中身意識しないとバグるとかゴミやん
0079デフォルトの名無しさん
2012/07/31(火) 15:25:11.42結局のところ単にヌルチェックを省けるポインタなんだよな
0080デフォルトの名無しさん
2012/07/31(火) 15:27:52.31って作るの簡単?
0081デフォルトの名無しさん
2012/07/31(火) 15:49:06.290082デフォルトの名無しさん
2012/07/31(火) 16:34:25.280083デフォルトの名無しさん
2012/07/31(火) 16:54:37.17おれはどこにも入社出来そうもない気がしてきた
0084デフォルトの名無しさん
2012/07/31(火) 18:51:07.42厳密には文字コードを考慮すべきじゃね
0085デフォルトの名無しさん
2012/07/31(火) 19:05:17.98char16_t
0086デフォルトの名無しさん
2012/07/31(火) 19:53:22.55続きは文字コードスレで
0087デフォルトの名無しさん
2012/07/31(火) 20:05:36.150088デフォルトの名無しさん
2012/07/31(火) 22:34:08.67http://farm8.staticflickr.com/7145/6520530187_c0c80ff8a7_b.jpg
http://farm8.staticflickr.com/7013/6719110227_2855a7ef07_b.jpg
http://farm7.staticflickr.com/6188/6138002658_85eb1d2445_b.jpg
http://farm8.staticflickr.com/7205/6887664245_d57b0f4279_b.jpg
http://farm8.staticflickr.com/7037/6891009867_1095f43d34_b.jpg
0089デフォルトの名無しさん
2012/07/31(火) 22:42:17.38{
typedef T t;
typedef U u;
};
template<typename T,typename U> struct sub : public super<T,U>
{
void test()
{
u index;
sizeof( u );
}
void test(u index)//ここ
{}
};
ここでu is undefinedというエラーが出ます。何故でしょうか。
VS2008だと出ません。
0090デフォルトの名無しさん
2012/07/31(火) 23:26:28.47typename super<T,U>::uと書いてないからじゃないか?
0091デフォルトの名無しさん
2012/08/01(水) 00:10:42.34shared_ptr自体はコンテナ用件満たすけど、そいつを持ってるクラスはコンテナ用件満たしてるの?
満たしてないもんをvectorとかに入れない方がいいよ。
どうしてもいれたいなら、そのクラスをshared_ptrで来るんで入れればOK。
0092デフォルトの名無しさん
2012/08/01(水) 00:17:00.780093デフォルトの名無しさん
2012/08/01(水) 00:30:47.81template <typename T, typename U>
struct Super {
typedef T t;
typedef U u;
};
template <typename T, typename U>
struct Sub : public Super<T, U> {
void test() {
typename Super<T, U>::u index;
std::cout << sizeof(index) << std::endl;
}
void test(typename Super<T, U>::u index) {
std::cout << sizeof(typename Super<T, U>::u) << ' ' << index << std::endl;
}
};
int main()
{
Sub<double, float> ss;
Super<double, float>::u ss2 = 123.4f;
ss.test();
ss.test(ss2);
}
0094デフォルトの名無しさん
2012/08/01(水) 00:42:55.31§23.1 Container requirements
このうちboost::shared_ptr(C++11ならstd::shared_ptr)は
4 In Table 64, T is the type used to instantiate the container, t is a value of T,
and u is a value of (possibly const) T.
Table 64 Assignable requirements
expression return type post condition
t = u T& t is equivalent to u
の条件を満たさないので入れてはいけない
(代入した途端に内部状態が変化してしまう)
0095デフォルトの名無しさん
2012/08/01(水) 00:44:37.58状態が変化したところで "t is equivalent to u" を満たしているから問題ないのでは?
0096デフォルトの名無しさん
2012/08/01(水) 00:47:59.93そもそもVS2008で通るのが間違いなんですか?
0097デフォルトの名無しさん
2012/08/01(水) 00:56:19.50それはおかしい
post conditionが等価なら内部状態が変化してもいい
問題はstd::vector<Hoge> h(10); のように書いてるからでしょ
std::shared_ptrは宣言と同時にポインタの参照先を指定しなければならない
それをどこも指してないスマポを入れるからおかしくなるんだろ
0098デフォルトの名無しさん
2012/08/01(水) 00:58:40.76どこか具体的なオブジェクトを指している状態になっていなければならない
だからvectorの宣言時に大きさを指定したりresize()する事なく、push_backもしくは
push_frontで代入すれば問題が起きない
ちょっと考えてみればこの意味がわかるはず
0099デフォルトの名無しさん
2012/08/01(水) 01:14:34.94> std::shared_ptrは宣言と同時にポインタの参照先を指定しなければならない
>>98
> つまりスマポを含んだオブジェクトをコンテナに入れる時は、入れる時に既にスマポが
> どこか具体的なオブジェクトを指している状態になっていなければならない
んなわけねーだろ。
0100デフォルトの名無しさん
2012/08/01(水) 01:20:19.53最初のスマポをどこか指してる状態にしてpush_back()してresize()しても
おかしくなる可能性があるぞ
要するにresize()は使わない事と、大きさを指定する場合はデフォルトの
一時オブジェクトを指定すればいいんだろと思う
C++11はその辺何をしても問題が起きなくなってるんだろうな
0101デフォルトの名無しさん
2012/08/01(水) 01:30:11.84参照カウントを持つスマポを入れた時の挙動まで予測してなかったんだろう
それでContainer Requirementsが舌足らずなんだよ
C++11の規格票を見るとずっとその辺が厳密になっているよ
それとスマポの穴が閉じてある
この先またboostで変な物が出てくるとまた規格をすり抜ける可能性はある
0102デフォルトの名無しさん
2012/08/01(水) 01:41:20.18shared_ptr のコピーがオブジェクトを共有するのは当たり前なわけだが、
「おかしくなる」だとか「スマポの穴」だとか、お前ら何のこと言ってんの?
0103デフォルトの名無しさん
2012/08/01(水) 01:49:16.75「実装の仕方」で挙動が変わるような規格ではダメって事
0104デフォルトの名無しさん
2012/08/01(水) 02:08:48.09§23.2.4.1 vector constructors, copy, and assignment
Complexity: The constructor template <class InputIterator> vector(InputIterator
first, InputIterator last) makes only N calls to the copy constructor of T (where N is the
distance between first and last) and no reallocations if iterators first and last are of forward,
bidirectional, or random access categories. It makes order N calls to the copy constructor of T
and order logN reallocations if they are just input iterators.
とあるので、はっきりとコピーコンストラクタを呼び出すと書いてある
これは実装の違いではなく、実装の仕方を規定している
これがshared_ptrのようなオブジェクトには不都合なんだろう
resize()は
§23.2.4.2 vector capacity
void resize(size_type sz, T c = T());
6 Effects:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
となっているので問題は生じないと思われる
C++11では変わっているかと思うと
0105デフォルトの名無しさん
2012/08/01(水) 02:09:15.46C++03 では vector<T>(n) はデフォルト引数とし生成される T() の n 個のコピーになると決まっている。
「「実装の仕方」で挙動が変わる」って、何のこと言ってるの?
0106デフォルトの名無しさん
2012/08/01(水) 02:13:47.2110 Complexity: Makes only N calls to the copy constructor of T (where N is the distance between
first and last) and no reallocations if iterators first and last are of forward, bidirectional, or random
access categories. It makes order N calls to the copy constructor of T and order log(N) reallocations
if they are just input iterators.
と書いてあり変わっていない。もう少し注意深く読むと
explicit vector(const Allocator& = Allocator());
1 Effects: Constructs an empty vector, using the specified allocator.
2 Complexity: Constant.
explicit vector(size_type n);
3 Effects: Constructs a vector with n value-initialized elements.
4 Requires: T shall be DefaultConstructible.
5 Complexity: Linear in n.
vector(size_type n, const T& value,
const Allocator& = Allocator());
6 Effects: Constructs a vector with n copies of value, using the specified allocator.
7 Requires: T shall be CopyInsertable into *this.
8 Complexity: Linear in n.
とあり、やはりサイズのみを指定した場合の実装は規定されていない。最初にデフォルトコンストラクタ
で初期化したオブジェクトをコピーコンストラクタでコピーしてもいいし、n数回デフォルトコンストラクタを
呼び出しても良い。つまりC++11であってもshared_ptrを入れる場合はC++03同様注意が必要
という事になる。これは互換性を重視したために仕様を変更しなかったのだろう。
しかし>>75のような不都合が残ったままというのはやはり不安を感じる。
0107デフォルトの名無しさん
2012/08/01(水) 02:16:05.04だから、使う側が注意しないといけないわけ
vector<T>(n)でshared_ptrを入れると、参照カウントがnになった状態になる
vector<T>(n, Obj())のように明示すればn回デフォルトコンストラクタが呼び出され、
それぞれの参照カウントが1になる
それだけの事
0108デフォルトの名無しさん
2012/08/01(水) 02:26:36.11> explicit vector(size_type n);
> 3 Effects: Constructs a vector with n value-initialized elements.
> 4 Requires: T shall be DefaultConstructible.
この規定でコピーしていいわけないだろ。
0109デフォルトの名無しさん
2012/08/01(水) 02:28:14.84C++03 だったらどっちも同じ。 C++11 なら、逆じゃね?
( Obj() は T() の間違い?)
0110デフォルトの名無しさん
2012/08/01(水) 07:40:34.24だな
C++03だと vector<T>(n) は vector<T>(n, Obj()) の事になるので同じ
C++11だと vector<T>(n) はそれぞれがデフォルトコンストラクトされ、
vector<T>(n, Obj()) は Obj() がコピーされる
0111デフォルトの名無しさん
2012/08/01(水) 09:01:34.54だれかスパッと纏めて
0112デフォルトの名無しさん
2012/08/01(水) 09:27:21.87コンテナ使用禁止
0113デフォルトの名無しさん
2012/08/01(水) 09:38:30.49スマポは弱者の道具、車椅子みたいなもんだからね
コンテナは使うから許して
0114デフォルトの名無しさん
2012/08/01(水) 10:00:54.97vector<T>(n), vector::resize(n) について。
C++03 では (n, value) と同じオーバーロードがデフォルト引数 T() で呼び出されて
value の n 個のコピーからなる vector が得られた。
(ただし resize(n) は呼び出し前からあった要素はそのままね。)
C++11 での右辺値参照導入に際して、おそらくこれらの操作がそのままだと
CopyConstructible を要求することになってしまって理不尽な要求や無駄なコピーを
生じてしまうことから、 DefaultConstructible だけで使えるようにそれぞれ n だけを
受け取るオーバーロードが追加されて n 個それぞれ個別に初期化された要素からなる
vector が得られるようになった。
この変更によって、例えば >>75 のように T が内部に shared_ptr を持つような
オブジェクトの場合の shared_ptr の use_count(), unique() などについて
vector<T>(n) などの結果が変わることになってしまった。
0115デフォルトの名無しさん
2012/08/01(水) 10:34:40.550116デフォルトの名無しさん
2012/08/01(水) 10:43:24.640117デフォルトの名無しさん
2012/08/01(水) 10:52:56.49つまり悩む
0118デフォルトの名無しさん
2012/08/01(水) 11:27:58.670119デフォルトの名無しさん
2012/08/01(水) 11:54:19.76ムーブがあると大差なくなるんだっけか
0120デフォルトの名無しさん
2012/08/01(水) 13:17:57.46どんどんヘッダが大きくなって、ヘッダの意味なくね?
0121デフォルトの名無しさん
2012/08/01(水) 13:24:00.710122デフォルトの名無しさん
2012/08/01(水) 13:42:30.370123デフォルトの名無しさん
2012/08/01(水) 13:55:17.50しっかり練り直して
0124デフォルトの名無しさん
2012/08/01(水) 14:28:22.82誰かgccでムーブコンストラクタあり/なしでSTLのパフォーマンスがどの位変わったのか
テスト出来ないかな
俺の所のgccは4.7.1にしてあるので-std=c++0xがデフォルトになってしまったらしくて
テスト出来ない
0125デフォルトの名無しさん
2012/08/01(水) 18:19:23.29既存のソースをDLL化するに当たってテスト的にVisual Studio 2005にて
「C++ クラスライブラリ」と「C++ コンソールアプリ」の2つのプロジェクトを起こしてテストをしています。
ここでクラスライブラリプロジェクト側で以下のようなコードを記述しました。
typedef struct s {
int a;
} S;
namespese testdll {
public ref class Class1 {
public:
S sss;
}
}
これをビルドすると「S sss;」の記述でC4368のエラーとなってしまったので、ネットで調べてポインタで定義することにしました。
S sss; → S *sss;
これでビルドが通ったので、コンソールアプリプロジェクトに上記で作成したDLLの参照を追加し、以下の様なコードを記述しました。
using namespace testdll;
int main(array<System::Class1::String ^> ^args) {
Class1 tt;
tt.sss = new S;
}
これをビルドをするとC2248のエラーになってしまいます。
メンバ変数sssはpublicで定義しているのですが何故かprivateの扱いになってしまいアクセスすることができません。
アクセサを作成すればアクセスすることは出来るのですが、出来ればアクセサを使わずにpublicでアクセスできればと考えています。
DLL側の定義方法が悪いのか、呼び出し方が悪いのか検討がつかず困っています。
改善策をご教授いただければ幸いです。よろしくお願い致します。
0126デフォルトの名無しさん
2012/08/01(水) 20:07:32.030127デフォルトの名無しさん
2012/08/01(水) 20:50:39.530128デフォルトの名無しさん
2012/08/01(水) 21:08:27.60まずC#で書け
0129デフォルトの名無しさん
2012/08/01(水) 23:14:44.090130デフォルトの名無しさん
2012/08/01(水) 23:19:03.470131デフォルトの名無しさん
2012/08/01(水) 23:22:02.53この違いを同じコードで吸収する方法ありますか
0132デフォルトの名無しさん
2012/08/01(水) 23:26:14.290133デフォルトの名無しさん
2012/08/01(水) 23:36:25.73-std=c++98 すればいいんじゃないの?
0134デフォルトの名無しさん
2012/08/01(水) 23:57:29.58Cのヘッダは<c〜>を使わず、<〜.h>を使う。
尤もMicrosoftの規格違反糞コンパイラ使わないのが正解だがね。
0135デフォルトの名無しさん
2012/08/02(木) 00:02:17.650136デフォルトの名無しさん
2012/08/02(木) 00:03:39.19wcslenが要るところだけusing namespace stdる。
...
{ using namespace std; hoge=wcslen(...)}
...
もろちん、
> 尤もMicrosoftの規格違反糞コンパイラ使わないのが正解だがね。
なのは当然である。
0137デフォルトの名無しさん
2012/08/02(木) 00:09:50.74>Cのヘッダは
昔の本でC++のコード中に<iostream.h>とか書いてる奴あったこと思い出したw
0138デフォルトの名無しさん
2012/08/02(木) 00:13:03.190139デフォルトの名無しさん
2012/08/02(木) 00:23:27.96つ[C++/CLI]
0140デフォルトの名無しさん
2012/08/02(木) 00:41:36.79http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-372.pdf
0141デフォルトの名無しさん
2012/08/02(木) 00:49:38.40CLIでもfieldとdata memberは別物扱いだぞ
0142デフォルトの名無しさん
2012/08/02(木) 01:16:00.50ダウト
ttp://vene.wankuma.com/ecma372/04_definition.aspx
0143デフォルトの名無しさん
2012/08/02(木) 07:08:17.78∧ ゝ∧
( ´∀`) 【 旧日本陸軍の朝鮮兵に対する注意書き】
.ノ��|ソ|"\
\ノ」==ヽ!ノ
/_l _|
一、いつ、いかなる時でも唐辛子粉を食事に際し好きなだけ使わすこと。
一、絶対に頭、体を叩いてはいけない。怨みを持って復讐する気質があり、脱走の原因となる。
一、清潔な食事運搬用バケツと雑巾バケツの区別をよく教えること。
一、危険な状況下では銃を投げ捨てて哀号!と泣き出す習癖があるから、日本兵二名で一名の朝鮮兵を入れて行動せよ。
__
│ |
_☆☆☆_
( ´_⊃`) 【米軍による韓国兵の扱いマニュアル 】
( ∞ )
| | |
(__)_)
1.韓国人には強気で押せ。抵抗する場合は大声で命令しろ。 2.命令を聞かない場合は身体で解らせろ。
3.同じことをくり返す場合、犬のように何回でも同じ様に叱れ。こちらが上と言うことを身体で解らせろ。
4.理由は聞くな。どうせ大したことは言っていない。
5.身体で解らせた場合、根に持つ場合があるので、後で身辺には気をつけて行動しろ。但し、徹底的に解らせる迄、手を抜いてはいけない。
6.相手を3才児と思い、信用したり頼りにはするな。重要な仕事は任せるな。
,,,,,,,,,,,,,,,,
ミ,,,,,;露;;;,ミ
∩;`_っ´∩
ヽ / 【 旧ソ連共産党による朝鮮の扱い方 】
| |
し⌒J
1、頭痛の種になるだけだから関わるな 2、手段を選ばぬキチガイ揃いだから関わるな
3、関わるとこっちが痛い目に遭うから関わるな 4、関わってきたらウォッカ飲んで忘れようぜ
0144デフォルトの名無しさん
2012/08/02(木) 08:33:31.25C++11使わないで返値が入力で代わる関数の
返値型をtemplateみたいな方法で指定する方法ないものでしょうか
0145デフォルトの名無しさん
2012/08/02(木) 08:35:26.25出た!ネトウヨの陰謀論
0146デフォルトの名無しさん
2012/08/02(木) 08:52:17.89Cの次がなんでDじゃなくC++なのかぐらいどうでもいい
0147デフォルトの名無しさん
2012/08/02(木) 08:56:15.94Cを進めてCを返すから後置インクリメントなんだよ
0148デフォルトの名無しさん
2012/08/02(木) 10:05:14.56C++11 でも動的な型演繹はできない
auto a(int b)
{
switch(b)
{
case 0: return int();
case 1: return float();
default: return b;
}
}
decltype(a(0)) c;
0149デフォルトの名無しさん
2012/08/02(木) 11:04:13.32何とも中途半端な仕様
0150デフォルトの名無しさん
2012/08/02(木) 12:22:14.02メソッドチェーンの途中でヌルオブジェクトを返せばいいのか。
0151デフォルトの名無しさん
2012/08/02(木) 12:24:13.90nが動的に決まる場合は
無理なの?
0152デフォルトの名無しさん
2012/08/02(木) 13:03:02.79出来ればワーニング自体を無効にする方法は使いたくありません
HMENU hMenu = (HMENU)lpMeasureItemStruct->itemID;
warning C4312: '型キャスト' : 'UINT' からより大きいサイズの 'HMENU' へ変換します。
0153デフォルトの名無しさん
2012/08/02(木) 13:06:07.270154デフォルトの名無しさん
2012/08/02(木) 13:07:47.080155デフォルトの名無しさん
2012/08/02(木) 13:13:33.410157デフォルトの名無しさん
2012/08/02(木) 14:25:20.45寧ろitemIDをHMENUにしたらいいんじゃねw
0158デフォルトの名無しさん
2012/08/02(木) 14:51:46.120159デフォルトの名無しさん
2012/08/02(木) 15:53:45.91あんたがどこか遠い世界に逝けは問題が解決するんじゃないかと思う
0160デフォルトの名無しさん
2012/08/02(木) 15:57:43.32坊や、だだをこねる前に warning とは何かを確認して出直してきな
それと君が使っているコンパイラでは警告コードの 4000 番台には特別な意味があるぞ
0161片山博文MZボット ◆0lBZNi.Q7evd
2012/08/02(木) 16:02:19.790162デフォルトの名無しさん
2012/08/02(木) 16:13:38.700163デフォルトの名無しさん
2012/08/02(木) 16:14:47.480164デフォルトの名無しさん
2012/08/02(木) 17:15:03.080165デフォルトの名無しさん
2012/08/02(木) 19:00:41.87それと雑魚共はWin32APIから出てくるな
0166デフォルトの名無しさん
2012/08/02(木) 19:10:10.750167デフォルトの名無しさん
2012/08/02(木) 19:28:49.010168デフォルトの名無しさん
2012/08/02(木) 20:06:29.10オーバーロードすりゃできるだろうよ
0169デフォルトの名無しさん
2012/08/02(木) 20:43:19.120170デフォルトの名無しさん
2012/08/02(木) 20:46:44.94char value = Function( Tag<WM_DESTROY>() );
long value = Function( Tag<WM_CREATE>() );
0171デフォルトの名無しさん
2012/08/02(木) 21:26:12.350172デフォルトの名無しさん
2012/08/02(木) 22:05:23.100173デフォルトの名無しさん
2012/08/02(木) 22:55:35.41俺は女になりたい
0174デフォルトの名無しさん
2012/08/02(木) 23:10:54.99・・・が、普通の女じゃいやだ
普通の女の可愛さを偏差値50とすると51.8くらいがいい
普通より微妙に若干可愛いような気がする程度
お願いします
//昔おなべにちんこくれって言われたときにあげれば良かった
0175デフォルトの名無しさん
2012/08/03(金) 01:08:21.330176デフォルトの名無しさん
2012/08/03(金) 01:41:46.250177デフォルトの名無しさん
2012/08/03(金) 02:35:08.120178デフォルトの名無しさん
2012/08/03(金) 03:24:03.80http://www.nicovideo.jp/watch/sm18497988
8月19日 フジデモ一周年 お台場フジテレビ抗議デモ 告知動画
http://www.nicovideo.jp/watch/sm18468199
【告知】8・19フジデモ一周年inお台場
http://www.nicovideo.jp/watch/sm18413040
かつての「視聴率王」も今は昔――フジテレビに異変が起きている。
2004年から7年間、年間視聴率3冠王に君臨していたが、昨年、日本テレビにその座を奪われたのに始まり、
オダギリジョーが主演した今年4月期のドラマ「家族のうた」は、視聴率3%台で打ち切り。
さらに4〜6月期の平均視聴率はテレビ朝日にも抜かれ、3位に。7月には「3冠王を逃したため」(フジテレビ関係者)、
局長やプロデューサーなどが大幅に入れ替わるテコ入れがなされたが、"迷走"は止まらない。
その一例が情報番組「とくダネ!」だという。
言わずと知れた小倉智昭がメーンキャスターを務める朝の看板番組だ。
同局の人気アナ、ナカミーこと中野美奈子の退社に伴い、
7月からキャスターに抜擢されたのがタレントの菊川怜だったが、その評判が芳しくない。
「同じ時間帯では、日テレの『スッキリ!!』と『とくダネ!』が視聴率を競い、これまではフジが優勢でした。
週5回の放送で負け越しが続くなんてことはほぼなかったのですが、菊川に代わった翌週から、1勝4敗が2週続きました。
扱うニュースなどにもよるので一概にキャスターの責任にはできませんが、菊川が原因だという声がもっぱらです」(番組関係者)
一方、菊川の起用と同時期にあった人事異動が業界で臆測を呼んでいる。情報制作局長や情報制作センター室長、
番組のチーフプロデューサーらが軒並み交代したのだ。テレビ局では、長く続いた番組を終わらせたり、
「大物」キャスターやタレントを降板させたりする際に、局側も相応の立場の人間が異動するのが慣例とされている。
「大物の降板などと同時に異動する局もあるが、フジは必ずしもそうではない。
今度の人事異動は、小倉さんの降板をにらんだもの、という声があります」(同)
もしかして、小倉さん、最後の夏!?
▽週刊朝日
http://www.wa-dan.com/article/2012/07/post-968.php
かたつむりはそれでも二人だそーです、ひとりはリスクがやっぱりでかいのか?
0180デフォルトの名無しさん
2012/08/03(金) 08:27:34.35カタツムリに聞いて来い
0181デフォルトの名無しさん
2012/08/03(金) 09:10:05.370182デフォルトの名無しさん
2012/08/03(金) 12:07:28.33でかいよ
繁殖スピードと個体数の少ないカタツムリみたいな生き物は
遺伝子同士の掛け合わせで強化していかないと間に合わない
ウイルスみたいに繁殖スピードが速くて個体数の多い生き物は突然変異でも間に合うから
自己増殖でOK
0183デフォルトの名無しさん
2012/08/03(金) 12:18:04.96♂と♀のインターフェースだけ多重実装しろよ。
0184デフォルトの名無しさん
2012/08/03(金) 12:30:05.410185デフォルトの名無しさん
2012/08/03(金) 13:49:16.11子供産めるようになるのかなwktk
0186デフォルトの名無しさん
2012/08/03(金) 14:46:35.830187デフォルトの名無しさん
2012/08/03(金) 14:59:39.510188デフォルトの名無しさん
2012/08/03(金) 15:14:04.090189デフォルトの名無しさん
2012/08/03(金) 15:14:53.51VC11がもうすぐ出るからそしたら流れが変わる
0190デフォルトの名無しさん
2012/08/03(金) 19:25:57.79♂から♀へキャスト→股の棒・胸毛等が無くなり中性的になる
♂と♀を多重継承→ふたなり
♂を継承し♀にあるメゾットを一部追加→男の娘・オカマ
♀を継承し♂にあるメゾットを一部追加→男装女子・オナベ
全然違うぞ
0191デフォルトの名無しさん
2012/08/03(金) 19:30:50.030192デフォルトの名無しさん
2012/08/03(金) 19:59:21.270193デフォルトの名無しさん
2012/08/03(金) 20:03:07.620194デフォルトの名無しさん
2012/08/03(金) 20:46:48.060195デフォルトの名無しさん
2012/08/03(金) 22:31:47.38絶対に継承にはならないよね。冗談とは言え男女を継承で解決しようとか
程度が知れるわぁ・・・。
0196デフォルトの名無しさん
2012/08/03(金) 22:38:33.780197デフォルトの名無しさん
2012/08/03(金) 22:39:12.430198デフォルトの名無しさん
2012/08/03(金) 23:45:11.150199デフォルトの名無しさん
2012/08/03(金) 23:55:52.77Return value optimization
したい
例えば
std::vector<double>
my_push_back(std::vector<double>& v,double &x){
//return std::vector(v).push_back(x)// Return value optimizationにできない
std::vector vv(v);
vv.push_back(x);
return vv;
}
なんとかReturn value optimizationにするにはどうすればいいのでしょうか
0200デフォルトの名無しさん
2012/08/03(金) 23:58:07.230201デフォルトの名無しさん
2012/08/03(金) 23:58:28.640202デフォルトの名無しさん
2012/08/03(金) 23:59:39.170203デフォルトの名無しさん
2012/08/04(土) 01:07:39.12std::map<> だと片方しか検索できないのですが、
自分でmapを2個用意して、それっぽいのを作るしかないでしょうか?
何か良い方法あったらおしえてください
0204デフォルトの名無しさん
2012/08/04(土) 01:12:40.470205デフォルトの名無しさん
2012/08/04(土) 01:25:34.55ありがとう 尻貸すよ
0206デフォルトの名無しさん
2012/08/04(土) 12:02:30.83#include <stdafx.h>
は、本来のプリプロセッサの仕様的には
#include "stdafx.h"
の方が適切だと思うわけだが(VSの「クラスの追加」とかで出てくるスケルトンコードもそうなっている
まあどっちであっても(たぶん無条件にカレントの.pchから探そうとしているから)動くし、
プリコンパイル済みヘッダーとかローカルな仕様なんで、そういう書き方も許されるのだと納得しようと思えばできるが
0207デフォルトの名無しさん
2012/08/04(土) 12:10:15.92そうでないヘッダは h 文字列
0208デフォルトの名無しさん
2012/08/04(土) 13:21:10.52if(p) p->are()->sore();
みたいなコードでif文とかうざいので、
piyo.search("fuga")->p->are()->sore();
としたいときには、search()の戻り値がどんなときでも
ヌルポにならないことを保障すればいいんだけど
これって作法的にはどうなの? 下品なやり方?
0209デフォルトの名無しさん
2012/08/04(土) 13:22:03.920210デフォルトの名無しさん
2012/08/04(土) 13:24:44.620211片山博文MZボット ◆0lBZNi.Q7evd
2012/08/04(土) 13:31:30.51... are(...) {
if (this == NULL) { return NULL; }
...
}
... sore(...) {
if (this == NULL) { return }
...
}
0212デフォルトの名無しさん
2012/08/04(土) 13:33:33.67びっくりするほど無能でびっくりした
どうやってare()にたどりつくんだよ
0213デフォルトの名無しさん
2012/08/04(土) 13:33:35.360214デフォルトの名無しさん
2012/08/04(土) 13:36:32.81・何もできないラッパーを返す
・何もできない基底を返す
設計上、どっちがいいの?
気分的には何もしないラッパーよりも何もしない基底の方がいい気がする
派生部品を基底で返すのって良くない気がしない?
0215デフォルトの名無しさん
2012/08/04(土) 13:58:48.56最近になって、両方作っとけばいいことに気づいた。
おれはてんさいかもしれん。
0216デフォルトの名無しさん
2012/08/04(土) 14:08:11.57実体渡しを作らないからてんさいではない。
0217デフォルトの名無しさん
2012/08/04(土) 14:11:46.700218デフォルトの名無しさん
2012/08/04(土) 14:16:58.35単なる参照なんだけどポインタを渡す羽目になることってあるだろ
unko( string &s ) にポインタchinkoを渡すときに
unko( *chinko )って書くのはなんかキモイ
0219デフォルトの名無しさん
2012/08/04(土) 14:24:32.36つ例外
0220デフォルトの名無しさん
2012/08/04(土) 14:26:14.00Maybeはc++でスマートに書けないのかな
0221デフォルトの名無しさん
2012/08/04(土) 14:46:26.06string*とかのナマポを持ってる方がキモイ
0222デフォルトの名無しさん
2012/08/04(土) 14:59:12.73無きゃ無いで何もしない というコードなので、例外はいらん
0223デフォルトの名無しさん
2012/08/04(土) 14:59:53.93生ポじゃなくても同じような事象ありえるだrぽ
0224デフォルトの名無しさん
2012/08/04(土) 15:19:36.10なら>208のようにif文を使うのがわかりやすい
もしif文を書かねばならない箇所が多くなるなら、
それは検索機能のコードが一箇所にまとまっていないという別種の問題に思える
piyo.search("fuga")が"fuga"を見つけられなかった場合例外を投げる、でも一応動くが
もし"fuga"を見つけられないというのがありふれた事象なら、piyo.search()を直接または間接に
呼ぶ側が、例外が来るのか、途中の階層で捕捉されるのかを常に意識せざるを得ないからウザさは減らない
また、例外のスローはポインタ1個返すだけの関数リターンより遅いし、unwindは魔法だし、
捕捉する側では例外オブジェクト別の分岐コードが吐かれるとかでパフォーマンス的にも損をする
0225デフォルトの名無しさん
2012/08/04(土) 15:24:50.59ありがとう。
検索コードが散らばるというか、たくさんあるのが前提なコードなので
piyo.search2("fuga")->are()->sore();
2の方を使ったらヌルポオブジェクトを返すようにした。
0226デフォルトの名無しさん
2012/08/04(土) 16:55:50.02std::vector<double>
// std::vector<double> & //にするとうまくいかない
my_push_back(const std::vector<double>& v,const double &x){
std::auto_ptr<std::vector<double> > pv(new std::vector<double>(v) );
pv->push_back(x);
return *pv;
}
std::vector<double> v;
v.push_back(1.1);
std::vector<double> v2(my_push_back(v,2.2 ));
std::cout << v2[0] << " " << std::endl;//ちゃんとした数値じゃない
0227デフォルトの名無しさん
2012/08/04(土) 17:15:41.75という関数を呼び出すときに、 chinko を刹那的に作りたいんだけど
unko( hoge dummy ) と書くとエラーになる。
0228デフォルトの名無しさん
2012/08/04(土) 17:42:41.33virtual void func();
}
class B : public A{
void func();
}
って感じでオーバーライドして、その上で
vector <A> vec;
vec.push_back(B())
vec[0].func();
っていう呼び出し方するとB::func()じゃなくてA::func()が呼ばれます
どうにかしてB::func()の方を呼びたいんですがいい方法ないでしょうか
0229デフォルトの名無しさん
2012/08/04(土) 17:46:25.25virtualやめるかB::func()
0230デフォルトの名無しさん
2012/08/04(土) 18:16:06.97vector<A> である限り無理
0231デフォルトの名無しさん
2012/08/04(土) 18:24:07.030232デフォルトの名無しさん
2012/08/04(土) 18:48:47.29BのサイズがAと違ったらどうなるんこれ
0233デフォルトの名無しさん
2012/08/04(土) 18:52:06.08push_backする時にスライシングが起きてるのか
ポインタで保持しないとだめだな
0234デフォルトの名無しさん
2012/08/04(土) 18:54:03.45A a(B());
a.func();
がスライシングを起こさず正常に動いて、かつB::func()が呼ばれるような言語を探すことだね。
0235デフォルトの名無しさん
2012/08/04(土) 19:00:12.39public:
virtual void func() {
std::cout << "A" << std::endl;
}
};
class B : public A {
public:
void func() {
std::cout << "B" << std::endl;
}
};
int main()
{
std::vector<A> vec;
std::vector<A*> vecp;
vec.push_back(B());
vec[0].func();
vecp.push_back(new B);
vecp[0]->func();
delete vecp[0];
}
0236デフォルトの名無しさん
2012/08/04(土) 19:06:33.220237デフォルトの名無しさん
2012/08/04(土) 19:23:08.30知ってるけど使わなかった
0238デフォルトの名無しさん
2012/08/04(土) 19:24:20.32構文上はともかくとして、
原理上配列に実体を置く方法なら
どの言語であろとダメだろ
0239デフォルトの名無しさん
2012/08/04(土) 19:32:08.06ソレ使ってまともに組上げた事無いのに信心だけはいっちょまえて感じの
0240デフォルトの名無しさん
2012/08/04(土) 19:35:00.01ほら泣けよ、みんな慰めてくれるぞ。
0241デフォルトの名無しさん
2012/08/04(土) 19:36:59.970242デフォルトの名無しさん
2012/08/04(土) 19:44:10.58pgr
0243デフォルトの名無しさん
2012/08/04(土) 19:52:51.940244デフォルトの名無しさん
2012/08/04(土) 19:56:36.33マルチスレッドなんて必要悪だろちょっと処理に時間がかかれば
画面が真っ白になるような、そんなソフトばっか作ってんのか。
0245デフォルトの名無しさん
2012/08/04(土) 20:09:52.390246デフォルトの名無しさん
2012/08/04(土) 20:10:40.940247デフォルトの名無しさん
2012/08/04(土) 20:13:02.280248デフォルトの名無しさん
2012/08/04(土) 20:13:51.040249デフォルトの名無しさん
2012/08/04(土) 20:24:48.50なんの考えもなしに安全に倒したいならもうC系列を使う意味がない
もっと安全で書きやすい洗練された言語を使えばいい
0250デフォルトの名無しさん
2012/08/04(土) 20:25:37.430251デフォルトの名無しさん
2012/08/04(土) 20:28:14.21低級言語を扱う資格無し
0252デフォルトの名無しさん
2012/08/04(土) 20:31:38.230253デフォルトの名無しさん
2012/08/04(土) 20:35:37.92普通は必要なパフォーマンスを出しつつ高級機能を使いたいからC++使ってる
0254デフォルトの名無しさん
2012/08/04(土) 20:43:43.90使わないといけないのは設計が破綻してる事が多いし。
俺はboostを使う上でどうしようもない時以外は極力避けてるよ
0255デフォルトの名無しさん
2012/08/04(土) 20:47:46.40夏休みのガキじゃないなら具体例挙げられるよな。
0256デフォルトの名無しさん
2012/08/04(土) 20:56:48.42これ何回も聞いたけど何故なのかいつも説明がないよね
0257254
2012/08/04(土) 20:57:10.23規模が大きくなるとバグの温床になる。
他の手段で実現できないかをまず検討。
なるべく継承じゃなくてコンポジションで実現できないかと同じくらい気をつけてる。
ちなみに254以外は俺じゃないからしらない
0258デフォルトの名無しさん
2012/08/04(土) 20:58:46.78あとは、自動変数とスマポで済む。
・インタープロセス
・生配列のイテレーション用
・Cの関数を使う場合
0259デフォルトの名無しさん
2012/08/04(土) 21:00:20.28理屈じゃなく何があったか事実を書けよ
机上だけの問題なら原発は絶対安全ですぐらいどうでもいい
0260デフォルトの名無しさん
2012/08/04(土) 21:04:46.720261デフォルトの名無しさん
2012/08/04(土) 21:07:52.29スマートポインタにすることで、かえって管理方法を明示できる側面もあるよ(色々なスマートポインタがあるから)
かくいう自分は最近モバイル開発ばかりだからスマートポインタ使ってないけど
0262デフォルトの名無しさん
2012/08/04(土) 21:14:24.83アホだなー
0263デフォルトの名無しさん
2012/08/04(土) 21:19:13.59スマートポインタは管理放棄じゃなくて、自動管理で済むって話。
スマートポインタを使った場合に発生するバグがあるというのなら、その例を挙げてみてよ。
0264デフォルトの名無しさん
2012/08/04(土) 21:19:53.96なぜモバイル開発だということがスマートポインタを使わなくなる理由になるの?
0265デフォルトの名無しさん
2012/08/04(土) 21:20:05.04それはない
被災3県、戻らぬ外国人観光客 放射能不安、円高も追い打ち
ttp://www.sankeibiz.jp/business/news/120724/bsd1207240503003-n1.htm
0266デフォルトの名無しさん
2012/08/04(土) 21:20:42.410267デフォルトの名無しさん
2012/08/04(土) 21:24:38.07GCの有る言語しか開発に使わせてもらえないからだろう
0268デフォルトの名無しさん
2012/08/04(土) 21:25:01.54c++慣れしていないプログラマがかわるがわる投入されるからということと
うちのような中小ゲームデベロッパではunityが幅きかせてきてそもそもc++のコードをあまり書かなくなってきた
0269デフォルトの名無しさん
2012/08/04(土) 21:30:03.840270デフォルトの名無しさん
2012/08/04(土) 21:38:45.46そんな本筋の外の部分に論外だのなんだのと言われてもな。
>>264からだけを読んで誤解してない?
0271デフォルトの名無しさん
2012/08/04(土) 21:40:43.410272デフォルトの名無しさん
2012/08/04(土) 21:41:06.99これで答えられれば一旦話がまとまるだろ
0273デフォルトの名無しさん
2012/08/04(土) 21:47:52.30お前はあとがきだけを読んで小説の中身を判断する人間か
0274デフォルトの名無しさん
2012/08/04(土) 21:51:13.96元レスの論旨をあえて無視して噛み付いてみただれかさんの存在が論外
0275デフォルトの名無しさん
2012/08/04(土) 21:58:52.05「論外」を悪口の一種かなんかだと思ってるのか?
単に、他の言語の話は議論の対象にならない、と言ってるだけなんだけど。
0276デフォルトの名無しさん
2012/08/04(土) 22:03:49.200277デフォルトの名無しさん
2012/08/04(土) 22:08:41.91誤解させたのなら悪かったよ。しばらく黙っとく。
0278デフォルトの名無しさん
2012/08/04(土) 22:09:21.78循環参照とか?(照れ
0279デフォルトの名無しさん
2012/08/04(土) 22:11:56.730280デフォルトの名無しさん
2012/08/04(土) 22:37:59.530281デフォルトの名無しさん
2012/08/04(土) 22:40:07.62スマポは危険
ナンミョウホウレンゲキョ
ナンミョウホウレンゲキョ
0282デフォルトの名無しさん
2012/08/04(土) 22:42:14.50ナマポ使いが宗教に見えて仕方ない
0283デフォルトの名無しさん
2012/08/04(土) 23:05:53.89それでいいじゃないの
0284デフォルトの名無しさん
2012/08/04(土) 23:10:23.69ここで、スマポを使うように言う奴らは何なの?どこから金をもらってるの??
0285デフォルトの名無しさん
2012/08/04(土) 23:13:18.500286デフォルトの名無しさん
2012/08/04(土) 23:21:54.750287デフォルトの名無しさん
2012/08/04(土) 23:24:06.76メモリポインタだろ;
どっちかというとスマポ推進派だが
スマポはマルチコア環境できちんと動作させられるようなスマポ
(参照カウントが更新される度に他コア固有キャッシュをフラッシュしたりスヌープする必要がある
は
パフォーマンス的にナマポにかなり劣るのでは
0288デフォルトの名無しさん
2012/08/04(土) 23:25:35.13適当なクラス
Hoge* hoge;
現要素数
int Elements=0;
※配列の最後尾にひとつ追加する時
new(hoge + Elements) Hoge();
Elements++;
※配列の最後尾をひとつ削除する時
Elements--;
delete(hoge + Elements);
0289デフォルトの名無しさん
2012/08/04(土) 23:27:04.15そのへんがトレードオフだよね
0290デフォルトの名無しさん
2012/08/04(土) 23:33:34.62やれるもんならやってみろ
0291デフォルトの名無しさん
2012/08/04(土) 23:34:51.11できるよ
0292デフォルトの名無しさん
2012/08/04(土) 23:40:43.78スレッド間でそんなに排他ロック呼び出しながら通信するか?
あと、スレッド間通信はスマポ経由じゃなくメンバー変数の実体で良くね。
スレッド間でスマポを使うとしたらスレッド全体を管理してるオブジェクトをスマポに突っ込むぐらい。
0293デフォルトの名無しさん
2012/08/04(土) 23:44:35.09その状態と同じ動作するプログラムが生ポインタ使って簡単になるとは思えないな。
0294デフォルトの名無しさん
2012/08/04(土) 23:46:06.33普通<memory>にあるunchecked_uninitialized_copyとか
uninitialized_xxxx系関数で処理する。
0295デフォルトの名無しさん
2012/08/04(土) 23:56:13.46お前の中でスマポ=参照カウントかよ
0296デフォルトの名無しさん
2012/08/04(土) 23:56:29.76hoge の確保サイズはどうやって決めるの?確保サイズ以上に追加されたらどうするの?
っていうか vector 使え。
0297デフォルトの名無しさん
2012/08/04(土) 23:57:49.880298デフォルトの名無しさん
2012/08/05(日) 00:00:15.70俺は「スマポ極力使うな」派で、「ナマポ派」じゃないよw
>>263
管理放棄ってのは、メモリのnew/deleteの話ではなく、設計上の意味合い。
「スマートポインタの管理者」の話で、もう1つ上のレイヤーの話。
インスタンスには単一の管理者が居るという設計にした方がシンプルだと思う。
これの不具合の具体例は、コードが難読になる程度。じわじわくる。
0299デフォルトの名無しさん
2012/08/05(日) 00:01:40.73なりそうな気がするよ、程度にしか読めないんだが
0300デフォルトの名無しさん
2012/08/05(日) 00:05:58.720301デフォルトの名無しさん
2012/08/05(日) 00:12:58.95大半の人がそう。気軽にスマポをぶん回す。
新卒相手の場合は、設計をまず見直すように言う。
0302デフォルトの名無しさん
2012/08/05(日) 00:13:37.980303デフォルトの名無しさん
2012/08/05(日) 00:14:47.69つまり所有権の共有が必要ないところで所有権共有のためのスマートポインタを使うな
って言ってるんだよね?そりゃそうだね。
だったら shared_ptr とか「所有権共有のためのスマートポインタ」とかちゃんと言え。
「スマートポインタ」でひとくくりにするな。
0304302
2012/08/05(日) 00:14:51.700305デフォルトの名無しさん
2012/08/05(日) 00:15:13.46クラスとか変数とかってある?
0306デフォルトの名無しさん
2012/08/05(日) 00:15:47.200307デフォルトの名無しさん
2012/08/05(日) 00:16:32.82例外処理とかめんどくさすぎるし
0308デフォルトの名無しさん
2012/08/05(日) 00:16:34.73"STL" が何を指しているのかよくわからんが、 C++11 には標準ライブラリ <atomic> があるよ。
0309287
2012/08/05(日) 00:17:03.99参照カウンタの一貫性を複数コア間で保つためには一般論としては重い排他ロックか、
キャッシュスルーアクセスが要るが、どっちにせよ数百オーダーのクロックサイクルを消費する
もっとも、スヌープを高速で行う特殊なハードウェアが用意されていればその限りではないが
IAにそんなものがあるのかは知らん(ていうか無いっぽい
>293
ナマポなら上記対策が不要なシチュではプログラマの責任の下で上記対策を省けるが、
使用環境制限のない汎用スマポだと無条件にコア間同期が行われてしまうのではないか
(同一コア内のスレッドセーフのみ保証される軽量なスマポでも選択でき無い限りは
>295
おk
続けて
0310デフォルトの名無しさん
2012/08/05(日) 00:18:56.92>>308
ありがとう。おれ、atomic、おぼえた。
0311デフォルトの名無しさん
2012/08/05(日) 00:21:07.54スマポに対する排他コストじゃなくて、スレッド上での排他一般を
コストが問題になるほどするか?って書いたんだけど。
0312デフォルトの名無しさん
2012/08/05(日) 00:22:26.66この人みたいな使い方なら保持者以外弱参照でいい気がするなぁ
0313デフォルトの名無しさん
2012/08/05(日) 00:23:49.48プログラマの責任が増えたるんなら難しくなってるってことだな。
っていうかそもそも、なるべく共有オブジェクトへのアクセスを
減らすだろうし、そうすれば効率面でもたいして差は出ない。
共有オブジェクトへのアクセスがガンガン入ってる状態で
アクセスひとつひとつの効率が〜とか、いったい何を目指してるの?
って話になる。
0314287
2012/08/05(日) 00:36:22.75スマポの中で行われる排他の話をしているのであって、
スマポに対する排他の話ではないにょろよ
>313
>っていうかそもそも、なるべく共有オブジェクトへのアクセスを
>減らすだろうし
これはごもっとも
コピーできるものはスレッドローカルにした方が速いし問題も少ない
>共有オブジェクトへのアクセスがガンガン入ってる状態で
>アクセスひとつひとつの効率が〜
ああすまん、スマポの参照カウンタの同期が必要、というのはスマポの破棄時のみであって、
スマポを介した他オブジェクトへのアクセスはナマポとあんまり変わらない(コア間同期不要)だな
自己解決しました☆
0315デフォルトの名無しさん
2012/08/05(日) 00:38:40.62誤:スマポの破棄時
正:スマポの生成、破棄、所有オブジェクトが変わる(代入等)のいずれかのとき
0316デフォルトの名無しさん
2012/08/05(日) 00:50:30.82総合商社の丸紅が建設を計画している日本全域の太陽光発電所に、
向こう4年間で約50万キロワット分の太陽光モジュールを供給することで
丸紅側と合意したと明らかにした。近く本契約を締結する。
供給されるモジュールは全てハンファソーラーワンの製品で、
売上額は6000億ウォン(約416億円)に達すると見込まれる。
日本への太陽光モジュールの供給が本格化したのは、
東日本大震災が発生した昨年3月以降だ。
ハンファグループは震災後、鳩山由紀夫元首相の支援要請に応じて
太陽光発電システムなど10億ウォン相当の支援を実施。
これを機に金升淵(キム・スンヨン)グループ会長が日本を訪れ、
野田佳彦首相や丸紅の朝田照男社長と面会し、太陽光発電事業での提携を協議した。
http://japanese.yonhapnews.co.kr/headline/2012/08/02/0200000000AJP20120802003300882.HTML
>ハンファグループは震災後、鳩山由紀夫元首相の支援要請に応じて
>太陽光発電システムなど10億ウォン相当の支援を実施。
>これを機に金升淵(キム・スンヨン)グループ会長が日本を訪れ、
>野田佳彦首相や丸紅の朝田照男社長と面会し、太陽光発電事業での提携を協議した。
0317デフォルトの名無しさん
2012/08/05(日) 01:01:43.68boostもしらないのか? shared_ptrは排他制御のアリナシ選択できるぞ。
0318デフォルトの名無しさん
2012/08/05(日) 01:02:40.31>スマポの中で行われる排他の話をしているのであって、
>スマポに対する排他の話ではないにょろよ
そういう話じゃなくて、実用上影響が極めて小さくねって話よ。
スレッド上での10分の1の時間をスマポの排他に費やすんならそりゃ問題だが
固定で2μ秒しか消費しないなら気にする必要が無いでしょ。
0319デフォルトの名無しさん
2012/08/05(日) 01:05:23.52寿命管理に気を使わなくていいスマポで組んでる中に、使用者全員が寿命管理を確実に行わなければならない
ナマポが入ってきたらマジ悪夢。 1コだけでもしゃれにならん。
使うならどっちかに統一下ほうがいいし、どう考えてもスマートポインタベースで、どうしても必要な場合のみ
スマートポインタで寿命管理をしつつ生ポインタも取り出して扱うべき。
0320デフォルトの名無しさん
2012/08/05(日) 01:16:34.28どうせスマポ以外も妥協しまくりの糞コード書くんだろ
0321デフォルトの名無しさん
2012/08/05(日) 01:17:51.32weak_ptrで渡すと、コードが少し冗長になっちゃうのが嫌なんだよな
それでも使うべきなのだろうか
0322デフォルトの名無しさん
2012/08/05(日) 01:24:04.20C++でスマポ使うのは開発期間短縮のためだよ。低品質でも納期優先なks仕事ばかりなのさ。
>>321
独立したモジュールとかリソースから使い始めてみるといいよ。とくに寿命管理が面倒くさいヤツ。
生ポと相互乗り入れしなきゃ、並列に使うのはさほど問題はない。
0323デフォルトの名無しさん
2012/08/05(日) 01:36:10.06ナマポはクラスで蓋をすればぜんぜん臭くせずに済ませることもできる(カプセル化)
ていうかスマポ自体その実現方式の一つであるとも言える
大域オブジェクトやSTLのコンテナ要素の管理をスマポに統一するのはそこそこ良い考えだが
あーまあいいや納期までにちゃんと動いて問題が無いものができるなら何だってよろしい
0324デフォルトの名無しさん
2012/08/05(日) 01:40:08.21無駄なコストって、何のこと言ってるんだ?
0325デフォルトの名無しさん
2012/08/05(日) 02:18:04.26shared_ptrがナマポにフタしてくれてるんだがねww
0326デフォルトの名無しさん
2012/08/05(日) 02:36:26.28そう書いてるだろ
0327デフォルトの名無しさん
2012/08/05(日) 03:36:08.940328デフォルトの名無しさん
2012/08/05(日) 04:09:58.460329デフォルトの名無しさん
2012/08/05(日) 04:13:32.89boost::ptr_vector使ってしまった
ptr_vectorの中みてみたらstd::auto_ptrとか使ってるし
並列にしたらバグが出まくるってことでいいのでしょうか
0330デフォルトの名無しさん
2012/08/05(日) 04:17:19.03「並列にする」の意味もわからんしauto_ptrを中で使ってたらなんだと言うのか。
0331デフォルトの名無しさん
2012/08/05(日) 04:40:35.15バグがあるかもしれないけど無理矢理書いてみた
普段何気なく使っているvectorの裏側が覗けたような気分になる
http://ideone.com/0EdOx
0332デフォルトの名無しさん
2012/08/05(日) 08:49:22.47そりゃコンテナのたぐいはなんであれバグるだろうよ
0333デフォルトの名無しさん
2012/08/05(日) 14:34:24.070334デフォルトの名無しさん
2012/08/05(日) 16:04:34.72struct Color {
enum Color_type {
red = 0, ...
}
}
ってなっててShape::set_color(Color col)というメソッドに
s1.set_color(Color::red)
って呼び出しできるのはなぜでしょうか?
set_color()の引数はColorオブジェクトのはずなのに
何で列挙のint型整数を渡せるのですか?
0335デフォルトの名無しさん
2012/08/05(日) 16:20:27.86えっ?渡せないでしょ?
持ってる版が違うのか、ストラウストラップの本でその箇所をみつけられなかったけど
0336デフォルトの名無しさん
2012/08/05(日) 16:24:20.53>何で列挙のint型整数を渡せるのですか?
まず、Color_typeはint型ではない。Color_type→intの暗黙の型変換は行われない
その上でだが、たぶんColor構造体にColor_typeからColorを生成するコンストラクタ
Color::Color(Color_type col)とかが定義されてんジャネーノ
(ストラウストラップの本は引っ張り出していないが、VS2008では(引用コードに抜けているセミコロンをいくつか追加と)
上記コンストラクタ追加でコンパイルが通る
ちなみにColor_typeがもしクラスか構造体なら、Color_typeにColorへのユーザー型変換が定義されている可能性もある
今回はColor_typeが列挙型なのでその可能性はないが
0337デフォルトの名無しさん
2012/08/05(日) 16:24:54.68ColorにColor_type(か、同様のもの)を取るコンストラクタない?
0338デフォルトの名無しさん
2012/08/05(日) 16:26:52.15コンストラクタColor(Color_type)が定義されてるから渡せる
0339デフォルトの名無しさん
2012/08/05(日) 16:28:36.860340デフォルトの名無しさん
2012/08/05(日) 16:38:51.50ストラウストラップのプログラミング入門の本でした。
>まず、Color_typeはint型ではない。Color_type→intの暗黙の型変換は行われない
>コンストラクタColor(Color_type)が定義されてるから渡せる
いまいちわかってないのですが、Color::redと書いたときに
Color(Color_type)のコンストラクタが呼ばれて自動的にColorオブジェクトが
作られるってことでしょうか?
これは、enumがColorクラス内に書いてあるから可能なのでしょうか?
列挙子は、int型を割り振るものだと思い込んでいたもので。
>つかちゃんと説明されてるじゃん
すみません、見てみたいので場所を教えていただけないでしょうか。
0341デフォルトの名無しさん
2012/08/05(日) 16:44:34.04s1.set_color(c1);
これだとColorのコンストラクタはenumのColor_type型をとり、
set_color()は、Colorオブジェクトをとる
ならすぐに納得できたのですが・・・
s1.set_color(Color::red);
だとset_color()がColor_type型をとることになってしまい
型エラーになりそうな気がするのですが・・・
0342デフォルトの名無しさん
2012/08/05(日) 16:51:09.47これは変換コンストラクタと言うみたい
0343デフォルトの名無しさん
2012/08/05(日) 16:52:32.72Color(Color_type)はColor_typeからColorへの変換であるので
コンパイラによる暗黙の変換がされるということ。
この辺りの変換規則は少し分かりずらいけど覚えるしかない。
p.398にColor作成のためコンストラクタを利用してるというhintが
書かれているけど変換規則が分からないと意味が掴めないかも。
0344デフォルトの名無しさん
2012/08/05(日) 16:55:30.44簡単のため関連するシンボルの公開属性が全部public:でnamespaceも共通である(全シンボルが問題なく見える)として、
1. Color_typeからColorを生成するコンストラクタColor::Color(Color_type col)が定義されている
2. 上記コンストラクタがexplicitつきでない
場合、
s1.set_color(Color::red);
という呼び出しは、
s1.set_color(Color(Color::red));
として解決され得る、だったハズ、
暗黙の型変換絡みはいろいろややこしい
0345デフォルトの名無しさん
2012/08/05(日) 17:00:58.80ヒントにさらっと書いてあったのがこのことだとわかりませんでした。
とりあえず暗黙の型変換で置き換えられるというのはわかったので
納得して先へ進もうと思います。
ありがとうございました。
0346デフォルトの名無しさん
2012/08/05(日) 17:41:05.54OpenMPよりもパフォーマンス出せる例というと
どんな場合がありますか?
0347デフォルトの名無しさん
2012/08/05(日) 21:02:40.05スマートポインタで実現されていることを自前でそれぞれやるのを推奨するようなアホな書き込みだってことだろ
0348デフォルトの名無しさん
2012/08/05(日) 21:09:13.19スマポはポインタ一つを一つの管理者が管理するから冗長で無駄だらけ
そもそもスマポでくるんでもくるまなくてもどちらにせよオブジェクトをなんらかの目的で管理するシステムを書くのだからそのシステムに寿命管理も組み込めば済む話だよね
0349デフォルトの名無しさん
2012/08/05(日) 21:10:44.600350デフォルトの名無しさん
2012/08/05(日) 21:21:34.54胸が熱くなるな。
0351デフォルトの名無しさん
2012/08/05(日) 21:23:44.670352デフォルトの名無しさん
2012/08/05(日) 21:40:17.260353デフォルトの名無しさん
2012/08/05(日) 21:45:55.37MPIとかスレッドプールじゃね
0354デフォルトの名無しさん
2012/08/05(日) 21:46:36.11個別管理で無駄が生じるケースも稀だし、その無駄が有意な差として顕在化することもさらに稀だろう。
個別管理の無駄によって性能要件を満たせなくなったのなら自前管理を書いてもいい。
ただし計測環境と結果をコメントで添えたうえでな。
0355デフォルトの名無しさん
2012/08/05(日) 21:47:01.37スマポつっても場面場面で答えは違うし
十分もあれば新しいのかけてパフォーマンス上がるんだからめんどくさがらずに書くべき
0356デフォルトの名無しさん
2012/08/05(日) 21:48:01.45>>348と全く関係ないけど1つのクラスで機能1つだけってどんな状態?
0357デフォルトの名無しさん
2012/08/05(日) 21:51:36.400358デフォルトの名無しさん
2012/08/05(日) 21:58:10.76インスタンスの生成消滅サイクルが早いときやソートを頻繁に行うときとか無視出来ない
0359デフォルトの名無しさん
2012/08/05(日) 22:03:31.73つ 去勢手術
0360デフォルトの名無しさん
2012/08/05(日) 22:03:36.98ソートを頻繁に行うとは?
Codepadに貼り付けて速度測ってくるから具体例を書いてくれ
0361デフォルトの名無しさん
2012/08/05(日) 22:14:48.91空間効率なのか時間効率なのか、時間効率だとすればどの操作について言ってるのか?
0362デフォルトの名無しさん
2012/08/05(日) 22:15:51.480363デフォルトの名無しさん
2012/08/05(日) 22:28:40.76再発名や自前の管理コード書くのだるいからって文脈なんだから
0364デフォルトの名無しさん
2012/08/05(日) 22:29:58.79ゲームとか作ればわかる
0365デフォルトの名無しさん
2012/08/05(日) 22:31:05.66スマポは両方クソだからな
0366デフォルトの名無しさん
2012/08/05(日) 22:34:46.28作れば判るじゃなく、具体的コードを示してくれ
0367デフォルトの名無しさん
2012/08/05(日) 22:45:49.15auto_ptr, unique_ptr は空間効率も時間効率も生ポインタと変わらないんだが。
0368デフォルトの名無しさん
2012/08/05(日) 22:46:47.79ならshared_ptrと言え。「スマポ」で括るな。
0369デフォルトの名無しさん
2012/08/05(日) 23:00:41.59面倒
0370デフォルトの名無しさん
2012/08/05(日) 23:01:19.27ダウト
0371デフォルトの名無しさん
2012/08/05(日) 23:01:38.590372デフォルトの名無しさん
2012/08/05(日) 23:02:43.06疑うんなら差が出るコードを作ってみろよ。
0373デフォルトの名無しさん
2012/08/05(日) 23:03:26.86削除子使えば悪くなるのは当然だろ
0374デフォルトの名無しさん
2012/08/05(日) 23:07:29.69グラフィック処理してるが基本はプロファイラー
実測なしで判断しようがない
問題箇所だけなら50行も掛からんだろ
それぐらい渋るな
0375デフォルトの名無しさん
2012/08/05(日) 23:11:58.42使わないでも酷い状況になってると思うがw
0376デフォルトの名無しさん
2012/08/05(日) 23:13:48.540377デフォルトの名無しさん
2012/08/05(日) 23:16:20.30削除子使ってもサイズ変わらんぞ。
http://ideone.com/Fs05r
struct MyDelete { void operator () (int* p) const; };
static_assert(sizeof(std::unique_ptr<int, MyDelete>) == sizeof(int*),"");
0378デフォルトの名無しさん
2012/08/05(日) 23:19:52.16アホか
0379デフォルトの名無しさん
2012/08/05(日) 23:24:37.26373の「削除子使えば」がこれと違うんなら、説明してもらわねばわからん。
つーか、削除子要らない普通の delete ならパフォーマンス違わないのは
認めてるってことでいいの?
0380デフォルトの名無しさん
2012/08/05(日) 23:29:26.42コンパイルのパフォーマンス最悪だろ
0381デフォルトの名無しさん
2012/08/05(日) 23:41:43.61あー <memory> クソ重いよな。 <unique_ptr> とか <allocator> とか分けて欲しい。
で、 >367 は認めるってことでいいの?
0382デフォルトの名無しさん
2012/08/05(日) 23:47:21.300383デフォルトの名無しさん
2012/08/05(日) 23:49:24.72デリータによるが?
0384デフォルトの名無しさん
2012/08/05(日) 23:53:22.15どんなデリータの話をしてる?状態持ち?
それは生ポインタを使うとどんなコードになるのか、考えて言ってるのか?
0385デフォルトの名無しさん
2012/08/06(月) 00:00:01.14ローカルなアロケーターもたせると参照の複製が全部に必要になる
集中管理なら実体一つで十分
スマポ終わったな
0386デフォルトの名無しさん
2012/08/06(月) 00:17:47.06それなら確かにデリータ付きの unique_ptr は効率悪くなるな。
それでもって「スマポ効率悪い」とかいうのはおかしいけど。
0387デフォルトの名無しさん
2012/08/06(月) 00:52:13.020388デフォルトの名無しさん
2012/08/06(月) 00:53:47.190389デフォルトの名無しさん
2012/08/06(月) 01:01:57.12全体の8割は速度どうでもいいんだから、本当に気になる2割で
ナマポを気をつけて使えばいい
0390デフォルトの名無しさん
2012/08/06(月) 01:14:28.680391323
2012/08/06(月) 05:17:10.27別に漏れは>323においてナマポにクラスで蓋をできると言っただけであって、
蓋をする手段の中でスマポを使うことまで否定したつもりはないにょ
(コンストラクタ内での例外でリソースリークする危険性を完全に封じるのにauto_ptr<T>ぐらいは使うし
また、一般にナマポ p = new T(); をスマポ p(new T());に変えることはだいたい正義なことはわきまえておりますにょ
しかしたとえばナマポ配列において、配列の破棄日時≦要素の破棄日時が保証されたコードが既存であるときに、
いちいちstd::vector<スマポ<ナマポの指す型> >に書き換えて計算量増大のリスクを犯すよりは
std::vector<ナマポ>ぐらいにしといて外から要素のナマポが一切見えないようにクラスで蓋をすることを選ぶわ
とかいろいろ〜
(なおこのような改造の場合、コンストラクタ内例外への対処としてスマポ<ナマポの指す型>を使うわけにはいかず
そこは専用のdeallocatorを書く、しかしクラスで蓋をする。結果的にスマポの出番無し、というケースがしばしばある
0392デフォルトの名無しさん
2012/08/06(月) 05:41:08.73なんだ・・・スマポ使いかよ・・・
0393デフォルトの名無しさん
2012/08/06(月) 06:25:26.800394デフォルトの名無しさん
2012/08/06(月) 14:30:28.67軽量スマポの場合、std::vector<ナマポ>とstd::vector<スマポ<ナマポの指す型> >で計算量の違いって本当にあるか?
そのケースだと俺もナマポ使うだろうけど。
0395デフォルトの名無しさん
2012/08/06(月) 14:39:14.600396デフォルトの名無しさん
2012/08/06(月) 14:55:49.14自分以外の誰かが触るか、開発期間が長期化するか、とか
そのあたりの速度以外の観点で使うかどうか決めるわ
0397デフォルトの名無しさん
2012/08/06(月) 19:56:27.04ゲームなんか作らんから判らんわ〜
コーディックの保守してるけどスマポ自体がボトルネックになったこと無いわ〜
フレームを跨ぐ動体の追跡とかでソート使うけど
対象判定処理の方がよっぽど時間がかかってスマポで削った僅かな時間で
どうにか出来そうとか思ったことないわ〜
0398デフォルトの名無しさん
2012/08/06(月) 21:46:15.260399デフォルトの名無しさん
2012/08/06(月) 22:01:27.950400デフォルトの名無しさん
2012/08/06(月) 22:19:13.360401デフォルトの名無しさん
2012/08/06(月) 22:22:11.97こういうジャンルではスマポうんぬんは確かに響くと思う
0402デフォルトの名無しさん
2012/08/06(月) 22:24:47.72ゆとりたっぷりの富豪プログラミングできる人が羨ましいわ
0403デフォルトの名無しさん
2012/08/06(月) 22:25:40.50本格的にやるならビット演算入れるし
構造体やクラスレベルの処理より
コンテナや配列操作に時間掛けるほうが多いだろ
0404デフォルトの名無しさん
2012/08/06(月) 22:37:35.16盤面の有無状態が表せるしな。
コマの種類も10種類しかいらないから4bitでいい。
コマの種類と盤面の状態、手持ちを一つの配列にすりゃ
コンパクトでかなりの並列性が得られる。
便利な時代になったもんだよ。
0405デフォルトの名無しさん
2012/08/06(月) 22:38:00.00わらかすな。
0406デフォルトの名無しさん
2012/08/06(月) 22:40:28.50ただ、「マトモに組める人」と「底辺」の効率の差は、10倍なんてもんじゃないんだけどね。
0407デフォルトの名無しさん
2012/08/06(月) 22:42:31.45あの程度のものを整数型1つでひとコマとか
構造体1個でひとコマとかやってんの?
0408デフォルトの名無しさん
2012/08/06(月) 22:44:10.890409デフォルトの名無しさん
2012/08/06(月) 22:44:56.66今の将棋プログラムが、その程度の「当たり前の効率化」をやってないとでも思ってるの?
「ビット演算で効率化することを思いついた俺ってかっこいい」って?
0410デフォルトの名無しさん
2012/08/06(月) 22:46:20.030411デフォルトの名無しさん
2012/08/06(月) 22:47:50.380412デフォルトの名無しさん
2012/08/06(月) 22:49:42.83処理消費が全体で65%近くになるから
小手先だけで10倍近く処理が縮む
枝が増えればキャッシュミス増えて速度も安定しないし
0413デフォルトの名無しさん
2012/08/06(月) 22:50:30.41当たり前の話なのになんで突っかかってんの?
知らなかったの?
0414デフォルトの名無しさん
2012/08/06(月) 22:52:08.29三流実測厨は黙ってろ
0415デフォルトの名無しさん
2012/08/06(月) 22:52:18.89詰で30分掛かってた所が1分足らずに改善したこともあった。
0416デフォルトの名無しさん
2012/08/06(月) 22:53:06.49値渡しと参照渡しの違いが分からないまま走ってる人もいるんじゃないの。
0417デフォルトの名無しさん
2012/08/06(月) 22:56:24.82>本格的にやるならビット演算入れるし
ビット演算を使う程度のことが「本格的にやる」に含まれると
そう考えている人がいることに、まさに驚愕したよ。
そんな世界、全然知らなかったから。
0418デフォルトの名無しさん
2012/08/06(月) 22:58:23.090419デフォルトの名無しさん
2012/08/06(月) 23:02:13.44何が言いたかったの?
0420デフォルトの名無しさん
2012/08/06(月) 23:02:59.32本格的にやらないなら配列で済ませるよ?
0421デフォルトの名無しさん
2012/08/06(月) 23:04:51.87グラフで繋ぐわ。やってて面白い。
0422デフォルトの名無しさん
2012/08/06(月) 23:05:22.840423デフォルトの名無しさん
2012/08/06(月) 23:11:00.79本格的じゃなくてもビット演算使ってちまちま作る人か
0424デフォルトの名無しさん
2012/08/06(月) 23:12:58.020425デフォルトの名無しさん
2012/08/06(月) 23:42:52.41>そう考えている人がいることに、まさに驚愕したよ。
>そんな世界、全然知らなかったから。
簡単な要件でもビット演算使うのが常識とかいう思考勘弁してほしいわ
0426デフォルトの名無しさん
2012/08/06(月) 23:51:46.12ひでえコードだぞ
compiler intrinsicsに置き換えた方が良いと思う
0427デフォルトの名無しさん
2012/08/06(月) 23:52:32.86お前らにはその心意気が足りん
正しい正しくないじゃ無いんだよこの業界
上司がナマポ教なら部下も改宗しないとダメ
それができないなら解雇だな
0428デフォルトの名無しさん
2012/08/06(月) 23:56:19.61コンパイラー次第だろ
プロファイラーで改善が見られれば十分
0429デフォルトの名無しさん
2012/08/06(月) 23:59:56.46俺は>>417じゃないけど、それは単に君のレベルが論外に低いからだって。
ビット演算なんかそんな気張って使うようなものかよ。
非常識過ぎる。
0430デフォルトの名無しさん
2012/08/07(火) 00:06:56.600431デフォルトの名無しさん
2012/08/07(火) 00:08:51.140432デフォルトの名無しさん
2012/08/07(火) 00:22:07.79ビットフラグだの符号の取り出しだのその程度なら解るが
速度求めてないのに一般に配列で済むような物をビット演算するとか無いわ
気張ると改善に時間の無駄だろ
0433デフォルトの名無しさん
2012/08/07(火) 00:31:52.67筋さえ通りゃ金次第で何でもやってのける命知らず
不可能を可能にし 巨大なプロジェクトを粉砕する
0434デフォルトの名無しさん
2012/08/07(火) 01:18:07.84最近はその辺は全部自動なのか
0435デフォルトの名無しさん
2012/08/07(火) 01:35:28.050436デフォルトの名無しさん
2012/08/07(火) 01:50:34.96わけのわからん個人的な思い込みを一般常識的に考えるのはやめよう。
0437デフォルトの名無しさん
2012/08/07(火) 04:35:57.700438デフォルトの名無しさん
2012/08/07(火) 05:11:31.30テクニックってどんななの?
0439デフォルトの名無しさん
2012/08/07(火) 11:10:20.43中身がdoubleのときのdouble同士の四則演算は
doubleのを使ってほしいし
中身がstringのときはstringのを使ってほしい
今はoperatorを乗っ取ってif文で分岐してるけど
異種間のときだけ変換を手助けすればすむようにしたい
0440デフォルトの名無しさん
2012/08/07(火) 11:16:05.03そうですか。
0441デフォルトの名無しさん
2012/08/07(火) 11:48:13.12そうなんです。
0442デフォルトの名無しさん
2012/08/07(火) 11:54:25.07頑張ってくださいね。
0443デフォルトの名無しさん
2012/08/07(火) 12:50:37.38はい。
0444デフォルトの名無しさん
2012/08/07(火) 12:51:25.860445デフォルトの名無しさん
2012/08/07(火) 13:08:28.06自前で並列化を全て制御した方がパフォーマンス上がるのはごく普通のこと。
もっとも、下手にやるならOpenMPの方がマシってのはあるけど。
下手な人がアセンブラで書いたってコンパイラにすら負けるという事態がよくあるように。
0446デフォルトの名無しさん
2012/08/07(火) 19:06:06.74type_traints
0447デフォルトの名無しさん
2012/08/07(火) 20:25:01.54単にMPIに変えただけでも速くなる
0448デフォルトの名無しさん
2012/08/08(水) 01:19:14.48最近プログラムの高速化について調べているのですが
最近のCPUはどんどん高速化していって、キャッシュサイズ等も増えてきているが
メモリはパスの互換性の問題等から速度は昔とあまり変わっていないので
速いプログラムを書くにはメモリとあまりやりとりせずにCPUのキャッシュに乗せるのが
有効とあったのですが、プログラムでCPUのキャッシュに乗せるというのがイメージできません。
コードで明示的にキャッシュに乗せる事は出来るのでしょうか?それとも、キャッシュにのるサイズのデータなら
自動的にキャッシュを使われるようになっているのでしょうか?
0449デフォルトの名無しさん
2012/08/08(水) 01:21:25.630450デフォルトの名無しさん
2012/08/08(水) 01:26:03.98キャッシュの仕組み調べてみれば判ると思うよ。
使用するメモリがキャッシュサイズ以下で連続していれば乗っかってアクセススピードが改善される。
0451デフォルトの名無しさん
2012/08/08(水) 01:46:26.080452デフォルトの名無しさん
2012/08/08(水) 05:25:15.070453デフォルトの名無しさん
2012/08/08(水) 06:57:12.62100万回とかそれ以上の計算をCPUのキャッシュサイズ超える配列と
キャッシュサイズに収まる配列でやって測ってみりゃいいだろ
0454デフォルトの名無しさん
2012/08/08(水) 08:47:15.960455デフォルトの名無しさん
2012/08/08(水) 14:18:40.06時間が掛かるって事だぜ
だから一概に速くなるとは言えない
小規模なループなら速くなるだろうけど、メモリを広くランダムにアクセスするような
プログラムではむしろメモリの速度とレイテンシの低さが効いてくる
0456デフォルトの名無しさん
2012/08/08(水) 14:55:38.870457デフォルトの名無しさん
2012/08/08(水) 15:38:41.430458デフォルトの名無しさん
2012/08/08(水) 17:07:30.410459デフォルトの名無しさん
2012/08/08(水) 17:15:20.170460デフォルトの名無しさん
2012/08/08(水) 17:18:43.03最後に静的const 動的const
まとめてconst変数ということを付け加えて
質問を終わらせていただきます。
0461デフォルトの名無しさん
2012/08/08(水) 21:46:50.11動的const =lvalue
ってことでいいの?
0462デフォルトの名無しさん
2012/08/08(水) 22:46:10.19用語の意味を知りたいなら正しい用語を使え。動的const, 静的constなんか無い。
それからconstは右辺値しかない。const_castでconst外せるが、外したらそれはもうconst変数じゃない。
0463デフォルトの名無しさん
2012/08/08(水) 23:30:23.86マジで!?
0464デフォルトの名無しさん
2012/08/09(木) 00:47:36.34static変数(非const)の用途ってホントねぇなぁ。
シングルトンだのオブジェクトのカウントだの方法論だけはあるが
実際何に使うかってのが全然ない。
ファクトリー用のホルダーに使おうかと思ったが
影響範囲がデカすぎる。何かしら使おうとすると影響範囲の広さがガンになる。
0465323
2012/08/09(木) 01:29:41.09別に計ったわけではないが、
100万要素のstd::vector<T>が100万1要素に増えたとき、
Tのコピコンが100万回呼ばれて、その後Tのデストラクタが100万回呼ばれるわけじゃん?
さらにT*なら1要素8バイトで住むところが、shared_ptr<T>あたりだと一気に16バイトじゃん?
0466デフォルトの名無しさん
2012/08/09(木) 01:37:15.13ユニポなら問題ないじゃん?
0467デフォルトの名無しさん
2012/08/09(木) 01:59:26.99コピコンもデストラもナマポより時間コスト大でねえが
つまり、複数のユニポが同一のアドレスを指さない、という規則からすれば、
コピコンでコピー元は所有権を失わねばならないから、0にでもせざるを得ないので、0にするオペレーションが1回、
デストラで0かどうか判定して、0でないときのみヒープ開放という条件分岐が1回、
それぞれ増えるんではないの
0468デフォルトの名無しさん
2012/08/09(木) 02:20:45.673次キャッシュのご利益は、マルチコア構成においてコア間でデータの一貫性を保つのに要する時間を
短縮できるところにある(外部メモリからでなく、3次キャッシュから2次キャッシュをfillすれば良いので)
インテルかどっかが試験的に48コアとか作ってたと思うが、あれは3次キャッシュはあっても
3次から2次へのfillは自動では行われない
上で思わずIAにスヌープを高速で行う特殊なハードウェアが用意されていないみたいなことを書いたが
正確ではなかったかも試練、orz
0469デフォルトの名無しさん
2012/08/09(木) 02:39:32.36そのウンコみたいなコードはちょっと手を入れたほうがいいんじゃね?
0470デフォルトの名無しさん
2012/08/09(木) 08:00:10.03ポインタは複製が作れてなんぼだろ
パフォーマンスが同等でもユニポの利用シーンは限られてくる
0471デフォルトの名無しさん
2012/08/09(木) 08:01:41.640472デフォルトの名無しさん
2012/08/09(木) 08:32:21.68int const x; で const な左辺値ができる。何かの間違いだろ。
0473デフォルトの名無しさん
2012/08/09(木) 08:34:50.08それはエラーだ。
0474デフォルトの名無しさん
2012/08/09(木) 08:43:14.43その考察は正しいと思うけど、実際にはそれで増える処理時間がネックになることは
ほとんど無いだろうから、そこを疑って計測もせずに生ポインタを使うという選択には
ならない。
0476デフォルトの名無しさん
2012/08/09(木) 08:55:46.12ライブラリ制作ではナマポか最悪でもユニポにしたほうがいい
0477デフォルトの名無しさん
2012/08/09(木) 09:00:05.640478デフォルトの名無しさん
2012/08/09(木) 09:08:35.23実際もっとも代表的なスマポがshared_ptrだろ
いい略称もないしスマポといったら暗黙にshared_ptr
ほかのスマポはわかるように書く
これがベストなのは言うまでもない
0479デフォルトの名無しさん
2012/08/09(木) 09:10:38.550480デフォルトの名無しさん
2012/08/09(木) 09:14:30.26お前ん中ではな
0481デフォルトの名無しさん
2012/08/09(木) 09:17:06.33いやいや、常識です
0482デフォルトの名無しさん
2012/08/09(木) 09:23:28.500483デフォルトの名無しさん
2012/08/09(木) 09:24:46.40世間にもっと目向けてみ?
ひきこもってちゃ何も分からないよ?
普通スマポって言ったらまずshared_ptrを思い浮かべるからな
0484デフォルトの名無しさん
2012/08/09(木) 09:30:26.590485デフォルトの名無しさん
2012/08/09(木) 09:31:43.47仮にそうだとしてさ、効率の議論をしてるそばで効率特性のまったく違うものを
ごっちゃにするような呼称を使うのはダメだろ。
0486デフォルトの名無しさん
2012/08/09(木) 09:53:16.41ごっちゃになってないよ
スマポ→shared_ptr
ユニポ→unique_ptr
ナマポ→生ポインタ
auto_ptrは議論に含めない
標準ならこれで十分だし今は非標準の話はしてないでしょ
0487デフォルトの名無しさん
2012/08/09(木) 09:59:22.34だから基本はauto_ptr(C++11ではunique_ptr)
shared_ptrは利便性とコストのトレードオフを考えてから使うもので
代表的なわけが無い
0488デフォルトの名無しさん
2012/08/09(木) 10:04:25.16まさに お前ん中ではな としか言いようが無いなw
0489デフォルトの名無しさん
2012/08/09(木) 10:08:32.07論理的に考えろバカ
標準でポインタといったらshared_ptr,unique_ptr,*の三種類だ
そしてunique_ptrはユニポ、*はナマポと使い分けてる
残ったスマポは同じく残った一つのshared_ptrをさす以外にないだろ
理系じゃないやつには一から説明しないとわからないか?
0490デフォルトの名無しさん
2012/08/09(木) 10:10:55.84unique_ptr ∈ スマートポインタは事実であり、「スマポ」は
スマートポインタのことだろうというコンセンサスのもと
「スマポ」が unique_ptr を除外するような分類は通じない。
0491デフォルトの名無しさん
2012/08/09(木) 10:11:02.14機能の問題じゃない
歴史的経緯からいってスマートポインタっていったら思い浮かべなきゃいけないのはまずLoki::SmartPtrかboost::shared_ptrなんだよ
そこから知名度で絞ってboost::shared_ptrが来るだろ?
それを標準で置き換えたstd::shared_ptrがスマポの代名詞になるのが当然の流れだ
0492デフォルトの名無しさん
2012/08/09(木) 10:13:47.30論理的に考えろバカ
混乱するという指摘がある中でカタカナ3文字の略称にこだわる必要がないだろ
0493デフォルトの名無しさん
2012/08/09(木) 10:13:58.01お前はそんなんだから友達いないんだよ
日常的なコミュニケーションレベルの話で、
重箱の隅つついてこれは数学的には〜だから〜無い〜ハイ論破〜っていまどき小学生でも言わないよ?
何時何分何秒地球が何回まわった時?みたいな言葉遊びレベルにも劣る
0494デフォルトの名無しさん
2012/08/09(木) 10:15:30.06混乱してるのは身勝手な俺理論で自爆してる奴だけ
常識的な感覚持って素直に「スマポっていったら普通sharedだよね〜」って受け入れれば済む話
0495デフォルトの名無しさん
2012/08/09(木) 10:16:53.36unique_ptr ⊂ Smart pointer
論理的()
>>491
最初にC++の標準として採用されたのはstd::auto_ptr
歴史的()
>>493
最後はレッテル貼りかw
馬鹿の極みだな
0496デフォルトの名無しさん
2012/08/09(木) 10:17:32.73なんだお前、論理的に考える理系じゃなかったのかよwww
0497デフォルトの名無しさん
2012/08/09(木) 10:21:47.01そんなんじゃ日常生活にも困るレベルだべ?
0498デフォルトの名無しさん
2012/08/09(木) 10:24:18.690499デフォルトの名無しさん
2012/08/09(木) 10:25:58.71機能的な包含関係じゃなくて
今は識別子での関係を議論してんだよカス
int hoge; long fuga;
だからhoge ⊂ fugaだぜぇ〜的なあほなこと言ってるのがお前な
最初に(爆笑)
お前は物事の最初だけしか見ないのかよwwwwwwそのあとどうなった?黒歴史に認定されただろうがwwwww
お前の言い分が通るなら歴史的に天動説が最初だから天動説が正しいんだよ〜〜〜〜って言ってるようなもん。完全なる白痴wwwww
レッテル張り?何言ってんだ冷静にお前を評価しただけ
韓国人は屑って、当たり前のこと言って、レッテル張り乙って反論された気分だわwww
0500デフォルトの名無しさん
2012/08/09(木) 10:28:22.290501デフォルトの名無しさん
2012/08/09(木) 10:32:20.990502デフォルトの名無しさん
2012/08/09(木) 10:32:37.89もしかしてunique_ptrに置き換えられたことを言ってるのだろうか
もしそうなら初心者丸出しだが
0503デフォルトの名無しさん
2012/08/09(木) 10:38:19.680504デフォルトの名無しさん
2012/08/09(木) 10:38:37.91何言ってんだこいつ
0505デフォルトの名無しさん
2012/08/09(木) 10:57:17.200506デフォルトの名無しさん
2012/08/09(木) 11:06:02.74どうしてもスマポ使いたいあほがいた場合にもナマポからの乗り換えなら簡単だし
逆にスマポからナマポに乗り換えるのは面倒が多い
スマポで書いたコードは再利用しにくく、再利用を繰り返すとスマポ使用コードがどんどん拡大していく
そしてauto_ptrからunique_ptrへの乗り換え、boostからstdへの乗り換えが同時多発的に起こるとその不都合が目に見えて表れてくる
boost::shared_ptrを返すファクトリを再利用しようとしたのに、新しいプロジェクトではstd::shared_ptrやstd::unique_ptrを使うルールでやっていて、変換作業が追加されてだるい、といったことがそこかしこで起こるんだ
でもナマポで書いたファクトリだったらならstd::shared_ptrやstd::unique_ptrを、あるいはboost::shared_ptrを義務付けたプロジェクトでもたやすく再利用できる
0507デフォルトの名無しさん
2012/08/09(木) 11:13:37.45auto_ptrは初期のムーブセマンティクスと言えるもの
C++11でムーブセマンティクス及び構文を整理した結果
コピーセマンティクスでムーブを行うauto_ptrと齟齬が起きた
しかしauto_ptrを直接修正すると既存コードがコンパイル出来なくなるため
齟齬が無いよう修正した実装を別の名前unique_ptrで提供して
auto_ptrを非推奨とすることになった
http://ideone.com/cb4Ie
auto_ptrをunique_ptrに置き換えた上で、左辺値からムーブしている箇所に
std::moveを付加する必要がある
0508デフォルトの名無しさん
2012/08/09(木) 11:20:21.03チゲーよauto_ptrはSTLでまともに使えねーからぶっちされたんだよ
その時点でauto_ptrは黒歴史認定されてboost::shared_ptrかそれに相当するスマポへ移行してたんだよ
unique_ptrへの置き換えなんてのは後付けの理由の一つでしかない
0509デフォルトの名無しさん
2012/08/09(木) 11:21:55.55生ポインタでいいってことは単に new した( delete しないといけない)ポインタ返すだけで
いいってことだとして、それなら std::auto_ptr 使っとけば boost::shared_ptr, std::unique_ptr,
std::shared_ptr のどれにも簡単に変換できるから別に困らないよ。
0510デフォルトの名無しさん
2012/08/09(木) 11:24:50.94> チゲーよauto_ptrはSTLでまともに使えねーからぶっちされたんだよ
それが「コピーセマンティクスでムーブを行うauto_ptrと齟齬が起きた」なんだろ。
> その時点でauto_ptrは黒歴史認定されてboost::shared_ptrかそれに相当するスマポへ移行してたんだよ
コンテナに入れるなってことになっただけで、それ以外では普通に使えたよ。
0511デフォルトの名無しさん
2012/08/09(木) 11:26:24.41あふぉか
auto_ptrじゃカスタムデリータつかえんだろ
ポインタはすべてnew/deleteとかどんだけ〜
>>510
×普通に使えていた
○不便に目をつぶり慎重に取り扱っていた
0512デフォルトの名無しさん
2012/08/09(木) 11:29:13.89「コンテナに入れるな」以外でauto_ptrの何が不便だったの?
0513デフォルトの名無しさん
2012/08/09(木) 11:30:12.72http://ideone.com/AZ2sV
ナマポ版、B()未実装
http://ideone.com/dA56A
ナマポ派の人、これのB()でa,b,cにnewする
例外安全なコードを書いてみてくれないか?
0514デフォルトの名無しさん
2012/08/09(木) 11:31:18.61確かにカスタムデリータが要るならauto_ptrは使えない。
ならunique_ptr相当のものが要るな、って話になるだけ。
生ポインタにはならない。
0515デフォルトの名無しさん
2012/08/09(木) 11:45:25.86こんなくだらない問題だして何がしたいの?
http://ideone.com/YD9A6
0516デフォルトの名無しさん
2012/08/09(木) 11:53:09.68も書いとけよw
0517デフォルトの名無しさん
2012/08/09(木) 11:53:39.68出題者でもないしそのコードがまったくダメだとも言わないが、代入2回になってるのは気になるな。
unique_ptrなら初期化で済む。
0518デフォルトの名無しさん
2012/08/09(木) 11:54:46.01それを言うならコピーとかムーブとかも・・・
やっぱ生は無いな、実際。
0519デフォルトの名無しさん
2012/08/09(木) 11:55:54.30ナマポだとそういううっかりがあるんだな
0520デフォルトの名無しさん
2012/08/09(木) 11:56:13.67new使用箇所全部そのように書いてるなら問題無いよ
単に手間じゃ無い?って思っただけ
0521デフォルトの名無しさん
2012/08/09(木) 12:02:48.42そこは気になったけど
コメント欄部分を書き変えろという意図に解釈したから書かなかったんだよ
>>517
代入二回が気になるのは代入処理がカプセル化されて見えないオブジェクトだけだろ
ポインタで気にする奴なんかいねえしそもそもnewのコストにまぎれてポインタ代入なんか気にもならんわ
>>520
大した手間じゃないだろ
コンパイル時間とタイプする時間天秤にかけたらタイプしたほうが得とすぐに気がつく
0522デフォルトの名無しさん
2012/08/09(木) 14:22:28.670523デフォルトの名無しさん
2012/08/09(木) 14:44:27.980524デフォルトの名無しさん
2012/08/09(木) 17:31:10.40出たら出たで荒れていそうだけどなこのスレ
0525デフォルトの名無しさん
2012/08/09(木) 17:44:39.04今よりかはまともになる気がする
自作PC,ハード,ソフト,linux,ゲ製とか強制IDなのにな
0526デフォルトの名無しさん
2012/08/09(木) 19:15:04.720527デフォルトの名無しさん
2012/08/09(木) 19:23:41.800528デフォルトの名無しさん
2012/08/09(木) 19:24:44.200529デフォルトの名無しさん
2012/08/09(木) 19:28:08.320530デフォルトの名無しさん
2012/08/09(木) 19:34:18.660531デフォルトの名無しさん
2012/08/09(木) 19:36:03.270533デフォルトの名無しさん
2012/08/09(木) 19:44:13.540534デフォルトの名無しさん
2012/08/09(木) 19:54:01.370535デフォルトの名無しさん
2012/08/09(木) 21:07:31.35それも右辺値だろ。
0536デフォルトの名無しさん
2012/08/09(木) 21:12:05.94初期化リスト使ってないのがイラッとする
B():
a( 0 ),
b( 0 ),
c( 0 )
try
{
a = new A(1);
b = new Er();
c = new A(2);
}
catch(...)
{
delete c;
delete b;
delete a;
throw;
}
0537デフォルトの名無しさん
2012/08/09(木) 21:16:08.87こういう人て自分で何も考えられないアホなんだろうな
形だけ覚えて中身をなにも理解してない
そして感情論だけで批判する
仲間にいたら最悪だな
0538デフォルトの名無しさん
2012/08/09(木) 21:23:14.51批判じゃなくて批難な
0539デフォルトの名無しさん
2012/08/09(木) 21:37:26.50ポインターでも普通初期化リストで初期化する癖が付くもんだと思うが
あるときは、初期化リストあるときはコンストラクター内みたいな
一貫性が無く汚いコード書いてんのかねぇ。
それともよく知らずバグをはらんだコードを書き続けてただけか
0540デフォルトの名無しさん
2012/08/09(木) 21:57:23.48メンバーで例外出るとしてもポインタはコンストラクタ内初期化でも全く問題ないが?
お前はいったい何を言ってるんだ
0541デフォルトの名無しさん
2012/08/09(木) 22:02:00.820542デフォルトの名無しさん
2012/08/09(木) 22:35:58.480543デフォルトの名無しさん
2012/08/09(木) 22:48:57.470544デフォルトの名無しさん
2012/08/09(木) 22:51:19.340545デフォルトの名無しさん
2012/08/09(木) 22:55:35.260546デフォルトの名無しさん
2012/08/09(木) 23:15:54.03それ未定義動作ね。
15.3 p10
"Referring to any non-static member or base class of an object in the handler for a
function-try-block of a constructor or destructor for that object results in undefined behavior."
0547デフォルトの名無しさん
2012/08/09(木) 23:17:54.54コンパイル時間とタイプする時間とを秤にかけるとはなかなか面白い考察だが、
コンパイル時間の方には読み手が安全性を確認する手間も乗せてやってくれ。
0548デフォルトの名無しさん
2012/08/09(木) 23:20:16.34大人しくPHPやjavaから業界に潜り込もうか
vc++ばっかでg++なんて尚更に見たことない
0549デフォルトの名無しさん
2012/08/09(木) 23:36:16.52へぇ〜function-try-blockって実際使ったことなかったけど
こんな実行順序だったのか、知らなかった
http://ideone.com/e9puX
0550デフォルトの名無しさん
2012/08/09(木) 23:47:04.58>vc++ばっかでg++なんて尚更に見たことない
お前だけだ、安心しろ。
0551デフォルトの名無しさん
2012/08/10(金) 01:31:33.87問題はちょっとあるケースがある
メンバa,b,cの初期化リストを省略すると、宣言順でデフォコンが呼ばれ、
その後コンストラ本体で代入が行われるべきものと解釈される
この無駄は、a,b,cに代入演算子が定義されている場合、最適化で除去され難い
C++の最適化でおおっぴらに呼び出し回数の削減が認められているのはコンストラ(コピコン含む)だけ
代入は、普通の関数扱い(呼び出しに副作用がないと無条件に仮定することは認められない)から
よほど賢いコンパイラでないと呼び出しを削減したり、他の呼び出しとの順序を変えたりはしないし、
できない
0552デフォルトの名無しさん
2012/08/10(金) 01:34:32.28ポインタの話なのに「代入演算子が定義されている場合」は無いだろう。
0553デフォルトの名無しさん
2012/08/10(金) 01:35:21.590554デフォルトの名無しさん
2012/08/10(金) 01:37:02.64これも議論の余地があり、たしかにinlineであれば一般論としては
副作用の危険性もへったくれもなく関数呼び出しを除去してデータフロー最適化を利かせられるが、
初期化リストにおいては
本当にデータフロー最適化して(たとえば)aのコンストラクタが呼ばれたとみなすタイミングが不分明になると、
例外発生時にaを構築済みとみなしてデストラクタを呼ぶべきか、
未構築とみなして呼ばざるべきか、コンパイラに判断できなくなりかねないので
普通のコンパイラは初期化リストとそれ以外の間でコードを混ぜるような最適化まで踏み込まない
0555デフォルトの名無しさん
2012/08/10(金) 01:45:36.800556デフォルトの名無しさん
2012/08/10(金) 03:55:11.92PHPはゴミだから論外
0557デフォルトの名無しさん
2012/08/10(金) 07:33:02.79みんなg++の求人って見かけるもんなの?
0558デフォルトの名無しさん
2012/08/10(金) 08:15:35.19template<typename T>
class first
{
typedef T* pointer;
};
template<typename T>
class second
{
typename first<T>::pointer p;
};
int main()
{
second<int> i;
i.p; // error!
}
fixお願いします。
0559デフォルトの名無しさん
2012/08/10(金) 08:32:04.87なんのエラー?
無いメンバ使うなよ
0560デフォルトの名無しさん
2012/08/10(金) 08:36:15.36structにするかpublic:を付ける
http://ideone.com/mTEH0
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/
0561デフォルトの名無しさん
2012/08/10(金) 08:43:53.83ありがとうございます。
0562デフォルトの名無しさん
2012/08/10(金) 11:24:46.78C++の仕事はよくみかける
VC++の仕事は今はもうみかけない
0563デフォルトの名無しさん
2012/08/10(金) 12:35:16.14私の部署の案件は、gcc(含む派生版)8割、VC++1割、C#.net1割だ。
0564デフォルトの名無しさん
2012/08/10(金) 14:12:11.050565デフォルトの名無しさん
2012/08/10(金) 14:15:08.18待遇とアクセス方法は?
0566デフォルトの名無しさん
2012/08/10(金) 14:23:48.24ゲーム以外でつかってるところってあるのかな
0567デフォルトの名無しさん
2012/08/10(金) 15:29:11.50興味本位で聞きますけれど、c++がバリバリ書けるって、どんなレベルを指すのでしょうか?
デバドラとかコンパイラが書けるレベル?Linuxカーネルやapacheのコミッタとか?
それと、GUI周りって一般的には何が使われているんですか?motif?
guileなんかも書けた方が良い?
0568デフォルトの名無しさん
2012/08/10(金) 15:30:52.110569デフォルトの名無しさん
2012/08/10(金) 15:36:28.11コンパイラ
Linuxカーネル
apache
motif?
guile
自分が難しいと思ってる単語必死に並べたんだろ。
生暖かくスルーしてやりなよ。
0570デフォルトの名無しさん
2012/08/10(金) 15:59:46.20macの一部はc++で書かれているって、どっかの名無しが言ってた
>>569
難しいとは思わないが知ってる単語ならべただけなことは否定しない
てか、linuxなんて組込み、制御の他に何か使うような場面なんてあるの?
0571デフォルトの名無しさん
2012/08/10(金) 16:05:42.04gdbじゃSTLのvectorなんか整形してくれないし、pythonかguileぐらいは弄れないと仕事にならんでしょ
0572デフォルトの名無しさん
2012/08/10(金) 16:24:45.590573デフォルトの名無しさん
2012/08/10(金) 16:27:57.17君には聞いてないし、そもそも仕事で使ってないでしょ
0574デフォルトの名無しさん
2012/08/10(金) 16:30:19.590575デフォルトの名無しさん
2012/08/10(金) 16:36:22.25おまえ専門卒だろw
0576563
2012/08/10(金) 16:37:38.51待遇は交渉次第。案件つきで来てくれたら優遇できると思う。
組み込み、通信系、数値演算、画像処理からちょっとしたGUIまで。
他人の書いたソースを理解してチューニングしたり移植したりできれば、
ライブラリは都度覚えればいい。
ってところかな。
0577デフォルトの名無しさん
2012/08/10(金) 16:54:47.85情報を提供、ありがとうございました。もっと趣味で使い込んでから転職で移ろうと思います。
0578デフォルトの名無しさん
2012/08/10(金) 17:02:43.430579デフォルトの名無しさん
2012/08/10(金) 17:25:36.48なんちゃってーゲハハ
0580デフォルトの名無しさん
2012/08/10(金) 17:32:24.05うるせーしね
0581デフォルトの名無しさん
2012/08/10(金) 18:10:32.91禿同
0582デフォルトの名無しさん
2012/08/10(金) 18:21:35.18time.hにしかないものとctimeにもあるものと
両方読むときに困るわ
0583デフォルトの名無しさん
2012/08/10(金) 18:59:21.04全部流し込みたいんだけど、
ifs >> ofs
ってやったらエラーになったんだけど、なんで?
0584デフォルトの名無しさん
2012/08/10(金) 19:03:01.630585デフォルトの名無しさん
2012/08/10(金) 19:08:02.470586デフォルトの名無しさん
2012/08/10(金) 19:15:46.340587デフォルトの名無しさん
2012/08/10(金) 20:16:31.25>>のオーバーロードにstd::ofstreamを取る関数がない
やるなら
std::istreambuf_iterator<char>(std::cin) iic;
std::istreambuf_iterator<char> iiend;
std::ostreambuf_iterator<char>(std::cout) oic;
std::copy(iic, iiend, oic);
とか
なぜistream_iteratorの代わりにistreambuf_iteratorを、ostream_iteratorの代わりに
ostreambuf_iteratorを使うのかはやって見れば分かる
速度の問題
ただし実装依存なので必ずしも速くなる保証はない
1文字ずつの入出力の必要性がなく、先読み、まとめて書き込みが可能なために
最適化されていれば速くなるって事
0588デフォルトの名無しさん
2012/08/10(金) 20:45:27.39http://ideone.com/UD5eJ
0589デフォルトの名無しさん
2012/08/10(金) 21:00:23.550590デフォルトの名無しさん
2012/08/10(金) 23:05:45.33ctime = time.h では?
0592デフォルトの名無しさん
2012/08/10(金) 23:41:27.68お前は一行目しか読めないのか
0593デフォルトの名無しさん
2012/08/10(金) 23:46:30.22だってQは頭が悪いのに「俺様は頭がいいぜ」と自分で自分を褒めるしかない
自己愛性パーソナリティ障害患者ですから
0594デフォルトの名無しさん
2012/08/11(土) 00:10:41.51ありがとう
0595591 ◆QZaw55cn4c
2012/08/11(土) 06:51:05.10>>592
へえ、ctime の実体と time.h に差異があるんですね。手元の環境のctime 自身にも
This is the C++ version of the Standard C Library header @c time.h,
* and its contents are (mostly) the same as that header,
と mostly と書いてあるくらいですね。
time.h をインクルードしたときも、名前空間は std:: になるのでしょうか?
0596デフォルトの名無しさん
2012/08/11(土) 09:16:53.37linuxのデバドラはCだが
c++でトライバ書かれたオープンソースのOSなんて恐くて使えない
0597デフォルトの名無しさん
2012/08/11(土) 09:38:37.990598デフォルトの名無しさん
2012/08/11(土) 09:41:32.300599デフォルトの名無しさん
2012/08/11(土) 09:44:58.93そりゃドライバにSTLを使う奴はそうそういないだろ
0600デフォルトの名無しさん
2012/08/11(土) 09:46:14.26Cも書けるしC++の便利なところも使える
0601デフォルトの名無しさん
2012/08/11(土) 09:48:51.440602デフォルトの名無しさん
2012/08/11(土) 10:01:23.10単に C と同じように使うなら、そのまま C 使うだろ。
カーネルまで C++ で書き直すならいざ知らず、ドライバだけ C++ なんてありえない。
0603デフォルトの名無しさん
2012/08/11(土) 10:03:33.48linuxカーネルのコンパイラはgccだからbetter C的な部分はCでも書けるし
0604デフォルトの名無しさん
2012/08/11(土) 12:12:30.97あとテンプレート使いたい
まぁ、CRTが使えない場合はCRT依存の機能が全く使えないんだけど
カーネルモードならいざ知らずユーザーモードドライバーなら
CRT使えるからわざわざC使う道理もない
0605デフォルトの名無しさん
2012/08/11(土) 12:28:20.22extern "C" を書くのが面倒臭いから
デバイスドライバは主にストラテジー部分とI/Oハンドラに分けられる
要するにデータをセットして後はハードウェアからの割り込みを待つわけだが、
こういう処理を書くのにそもそもC/C++だと面倒くさい
最も低レベルの部分は今でもアセンブラを使っている
だが、それ以外の部分はC/C++で十分であり、そうなると問題はC++の
名前マングリング(関数の多重定義を既存のリンカで実現するために使われ
ている技法)が問題になる
だから extern "C" でCで書いた部分とリンクが必要になるが、それが面倒臭い
だから全部C++でCライクに書いてしまう
OSのAPIならほとんどコールバックを使用しているのでC++の方がむしろ都合が良い
0606デフォルトの名無しさん
2012/08/11(土) 12:40:49.66横槍だがextern "C"ってちまちまかかんでも
ブロックで書けるだろ。そんなに面倒か?
0607デフォルトの名無しさん
2012/08/11(土) 12:42:41.71Cで書けばextern Cも糞もない
0608デフォルトの名無しさん
2012/08/11(土) 12:43:48.96C++でCの機能だけを使って書いた物とリンクする場合の手間がいらないだろうって
話をしているのに
なぜわざわざ余計な手間を掛けて機能が違わないCを使う必要があるんだ?
0609デフォルトの名無しさん
2012/08/11(土) 13:11:50.88適切に処理できる奴がまだないからジャネーノ、
カーネルモードデバッガ様が言語処理系依存のマングリング規則を解決せねばならない義理も無いし、
それと、必ずしも解決不能な問題ではないが、C++のブートローダ(相当のランタイム)はCよりちょっとめんどくさい
0610デフォルトの名無しさん
2012/08/11(土) 13:20:38.08正しくブレークポイントをかけたりステップ実行できるとか
どんだけ未来だよ、と個人的には思う
言い忘れたが、C++流デバッグのためにはメソッド呼び出しにおける暗黙の第一引数thisとか、
ポインタ渡しの言い換えに過ぎない参照渡しもぜひデバッガ─側で解決してほしいし
0611デフォルトの名無しさん
2012/08/11(土) 13:40:50.18今時割り込み処理ごときでアセンブラって、どんな環境なんだ?
0612デフォルトの名無しさん
2012/08/11(土) 13:55:40.21(えっ?!)
0613デフォルトの名無しさん
2012/08/11(土) 14:06:52.910614デフォルトの名無しさん
2012/08/11(土) 14:27:49.30なんだって?割り込み処理がC言語の規格に入っているって?それは初耳
何なに?OSを使えばいいって?そのOSから呼び出されるのがデバイスドライバ
なんですけど
それをどう書くかという話なんですが
0615デフォルトの名無しさん
2012/08/11(土) 14:38:21.350616デフォルトの名無しさん
2012/08/11(土) 14:40:56.950617デフォルトの名無しさん
2012/08/11(土) 14:41:00.27【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/
0618デフォルトの名無しさん
2012/08/11(土) 14:44:45.80>611は割り込みハンドラをCの関数として書くと言っているんですが…
0619デフォルトの名無しさん
2012/08/11(土) 14:47:17.35だからそれがどうしてCの規格の話になるんだ。
そんなの例えば組み込みの世界じゃ昔から当たり前。馬鹿かよまったく。
俺はよく知らないが、WindowsのDDK(今は名称変わってると思ったが)でも
とっくにアセンブラは必用がなくなっていると聞くが。
0620デフォルトの名無しさん
2012/08/11(土) 14:52:07.55それにC++じゃなくてCの話ならなおさらスレ違い
0621デフォルトの名無しさん
2012/08/11(土) 14:55:20.95本当に低レベルな奴は gcc の __interrupt__ 属性とか
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
Linux/Windows とかの OS なら ddk とかのフレームワークがあるので、
Cだけで用が足りることも多いよ。
マジでレスしてるなら、相当勉強不足だから、Windows DDK のドキュメントとか
Linux デバイスドライバのソースでも読むことをお勧めする。
0622デフォルトの名無しさん
2012/08/11(土) 14:56:11.64>そんなの例えば組み込みの世界じゃ昔から当たり前。
えっ?!
割り込みハンドラの初段からCの関数だったりしたら、一般に割り込みの度に半分ぐらいのレジスタが破壊されるぞ…
(確かに処理系依存の呼び出し規約の話であって、純粋はC言語規格からはそれるが
0623デフォルトの名無しさん
2012/08/11(土) 14:59:49.91・どんだけレジスタ破壊し捲くってんだよ
・どんだけレジスタ少ないんだよ
どっちで突っ込もうかw
0624デフォルトの名無しさん
2012/08/11(土) 15:02:48.71高水準wプログラマは黙ってろよwww
0625デフォルトの名無しさん
2012/08/11(土) 15:08:16.96だからそれは環境依存
0626デフォルトの名無しさん
2012/08/11(土) 15:08:57.58いい加減馬鹿自慢は見苦しい。
0628デフォルトの名無しさん
2012/08/11(土) 15:10:13.36環境に依存せずに書けるかどうかなんていう前提条件は誰もつけてない。
君以外は。
どっか病気なんじゃないの君。
0629デフォルトの名無しさん
2012/08/11(土) 15:16:42.31GCCの__interrupt__属性などを使って初めて素のCの関数で割り込みハンドラが書けるわけだが
Understand?
0630デフォルトの名無しさん
2012/08/11(土) 15:19:02.76何を訳のわからんことを言ってるんだ。
マジで病気だろあんた。
0631デフォルトの名無しさん
2012/08/11(土) 15:19:59.52>何を訳のわからんことを
はいこの問題を論ずる資格無し
0632622
2012/08/11(土) 15:26:54.81↓ここの表7-2とか
http://www.altera.co.jp/literature/hb/nios2/n2cpu_nii51016_j.pdf
「呼び出し元で保存される汎用レジスタ」r8〜r15は呼び出し元が保存義務を負うが、
割り込みハンドラは呼び出し元が無く、割り込み信号でいきなり呼ばれる点が通常の
(つまり、呼び出し規約を遵守するコンパイラが想定する)関数呼び出しとは異なる
そんなシチュで素のCの関数が呼ばれたら、表7-2で言えばr8〜r15が割り込みの度に破壊される
__interrupt__属性はこの呼び出し規約を割り込みハンドラ向けに変更するもの
0633デフォルトの名無しさん
2012/08/11(土) 15:34:20.21だからどんな環境よ? [>>611]
って書いてあるんだが、頭大丈夫か?
0634デフォルトの名無しさん
2012/08/11(土) 15:50:27.550635デフォルトの名無しさん
2012/08/11(土) 16:12:14.04システムコール側のソフトウェア割り込み(SWI)ハンドラ
OSから呼ばれる割り込みハンドラ(Linuxのシグナル,Windowsの構造化例外)
で話が噛み合ってない気がする
0636デフォルトの名無しさん
2012/08/11(土) 16:17:43.15> システムコール側のソフトウェア割り込み(SWI)ハンドラ
> OSから呼ばれる割り込みハンドラ(Linuxのシグナル,Windowsの構造化例外)
なんて持ち出すアホは君以外にはいないと思う。
0637デフォルトの名無しさん
2012/08/11(土) 16:18:53.68きっと相手はそれをわかっていて、文脈上の環境をすり替えたに違いない!
って相互に考えてると思われ
0638デフォルトの名無しさん
2012/08/11(土) 16:27:02.780639デフォルトの名無しさん
2012/08/11(土) 16:33:42.33割り込みハンドラーのエントリーポイントとでも言うならわかるが、
ドライバのエントリってOSによって意味違うから、いきなり使う奴は
多分ドライバ書いたことが無いアホ。
Windows のドライバエントリ
http://support.microsoft.com/kb/102989/ja
0640デフォルトの名無しさん
2012/08/11(土) 16:38:52.29特にUSBは両方共使っていて複雑だしモードも多いし
0641デフォルトの名無しさん
2012/08/11(土) 16:42:46.43割り込みベクタって書いた時点で分かるだろアホ
0642デフォルトの名無しさん
2012/08/11(土) 16:59:05.58お前のアホさ加減かよ (w
0643デフォルトの名無しさん
2012/08/11(土) 17:01:11.88ドライバの関数って普通はカーネル経由で呼ばれて、レジスタは気にする必要無いんじゃないの?
__interrupt__ってそのカーネルを書くときに使うやつじゃないの?
I/O用の関数をカーネルが持ってる場合はアセンブリ無くてもドライバ書けるんじゃないの?
0644デフォルトの名無しさん
2012/08/11(土) 17:04:18.72どこのレベルで話しているか知らんけど、USB プロトコルはポーリングしか使ってないぞ。
インタラプト転送モードってあるけど、デバイス側から非同期で割り込みが上げられるわけじゃないよ。
※ 3.0 は知らんので、3.0 にあるならスマン。
0645デフォルトの名無しさん
2012/08/11(土) 17:05:45.61分からないならいいよアホw
0646デフォルトの名無しさん
2012/08/11(土) 17:07:04.43転送完了した時に割り込みで知らせてんだよアホ
あんたのマシンに何のOSが入ってるかは知らんが、Widowsならリソース見てみろや
ちゃんとUSBの割り込みがあるだろうが
単なる飾りだと思ってんのか?
0647デフォルトの名無しさん
2012/08/11(土) 17:07:20.90せめてOSぐらい書かないと、ドライバって千差万別だから、知ったか君が自分の知ってるOSの
話し始めて収拾付かなくなるぞ。
って、このスレの流れ見てもわからない奴に説明してもしょうがないか。
0648デフォルトの名無しさん
2012/08/11(土) 17:09:14.68「USB プロトコル」って文字が見えないのかよ…
0649デフォルトの名無しさん
2012/08/11(土) 17:11:07.73捨て台詞乙。
0650デフォルトの名無しさん
2012/08/11(土) 17:15:11.25Linuxで、出来ればWindows(XP以降どれでも)もおながいします
0651デフォルトの名無しさん
2012/08/11(土) 17:15:23.65新規ハードだったらどうなるだよ。
0652デフォルトの名無しさん
2012/08/11(土) 17:16:55.17ああUSBプロトコルはポーリングだな
だからバースト転送なんか行うと(外付けHDDとか)CPU負荷が半端ない
もっともUltra DMAを使ってるSATA IDEもUSBほど負荷は高くないが似たようなもんだけど
0653デフォルトの名無しさん
2012/08/11(土) 17:21:32.85>>621
>> Windows DDK のドキュメントとか
>> Linux デバイスドライバのソースでも読むことをお勧めする。
0654デフォルトの名無しさん
2012/08/11(土) 17:21:49.31割り込みベクタに設定するドライバ側の割り込みハンドラのエントリポイント
割り込みベクタの話に>>639のURLを出してくる時点でただの文盲
0655デフォルトの名無しさん
2012/08/11(土) 17:23:34.90>だからバースト転送なんか行うと(外付けHDDとか)CPU負荷が半端ない
何がだからかは知らんが、今時 USB のポーリングに CPU が関与する奴なんて
相当珍しいぞ。
0656デフォルトの名無しさん
2012/08/11(土) 17:23:48.21大雑把な説明も無理?
0657デフォルトの名無しさん
2012/08/11(土) 17:24:04.71SATAでも専用ボードを差してる奴は勝手にHDDとコントローラの間でハンドシェイク
するので時々CPUが指示を与える(セクタ番号とか)だけなんでSCSIに近いな
事実SATAカードを差すとSCSIカードとして認識される
0658デフォルトの名無しさん
2012/08/11(土) 17:26:12.62> 割り込みベクタに設定するドライバ側の割り込みハンドラのエントリポイント
だったら、初めからそう書けばいいだけの話。
> 割り込みベクタの話に>>639のURLを出してくる時点でただの文盲
適当な言葉使うから馬鹿にされてるだけだよ。
0659デフォルトの名無しさん
2012/08/11(土) 17:28:19.88文盲がよく言うww
0660デフォルトの名無しさん
2012/08/11(土) 17:28:59.58ポーリングにCPUが関与するとは言ってないだろ
だが転送の時にCPUがI/Oに直接携わっている割合が多いから外付けHDDはCPU負荷が高い
嘘だと思うなら「外付けHDD CPU負荷」でぐぐってみろ
粗悪なドライバのために泣いてるユーザーが多い事がわかるから
0661デフォルトの名無しさん
2012/08/11(土) 17:30:49.50大雑把には、>>643 の理解であってるよ。
そういう風にするために、色々設定とかが必要だけど。
0662デフォルトの名無しさん
2012/08/11(土) 17:33:10.92それは、USB がポーリングがどうかには関係が無い。
データ転送に CPU を使うかどうかの問題。
ごっちゃにするなよ。
0663デフォルトの名無しさん
2012/08/11(土) 17:34:21.10http://pc.watch.impress.co.jp/docs/column/interface/20100902_390904.html
この当たりよく読んどけよ
USB2.0がいかにオーバーヘッドが高いか、そしてUSB3.0でそれがどのように改良されて
CPU負荷を減らす事に成功しているか分かる
0664デフォルトの名無しさん
2012/08/11(土) 17:42:44.52> いきなりCPU負荷がガンと上がってしまい、むしろ使い勝手が落ちてしまうという経験をしたことがある
しょぼい機器持ってるアホ記者の記事貼って何をしたいんだ?
0665デフォルトの名無しさん
2012/08/11(土) 17:44:04.94回答ありがとう
そういうやり方でドライバを作るのってマイナー?
最初に興味持った>>611-614の流れがそんな感じだったので
※自分は勿論ドライバ開発経験無し
0666デフォルトの名無しさん
2012/08/11(土) 17:45:05.93最悪の状況を想定しとけって話だよ
自分の所でだけ動けばいいってそれ仕事人の態度じゃないぞ
0667デフォルトの名無しさん
2012/08/11(土) 17:50:39.05今時普通にCだけでドライバ作ってる。
(もちろん、全てではないが。)
>>612-614 は、無視していい。
0668デフォルトの名無しさん
2012/08/11(土) 17:52:09.94どんな範囲で何ができればよいかは常に有限
0669デフォルトの名無しさん
2012/08/11(土) 17:52:12.78> 自分の所でだけ動けばいいってそれ仕事人の態度じゃないぞ
別にそいつのシステムの保守請け負ってるわけじゃないし、どうでもいいよ。
0670デフォルトの名無しさん
2012/08/11(土) 17:58:30.95ありがとう
0671デフォルトの名無しさん
2012/08/11(土) 18:41:38.330672デフォルトの名無しさん
2012/08/11(土) 18:43:50.00キイッ >612を無視していいリストに含めんなハゲ
>611に対する反応としては>612で全く正しい
0673デフォルトの名無しさん
2012/08/11(土) 18:47:48.89>>612
0674デフォルトの名無しさん
2012/08/11(土) 19:11:21.10アセンブラや低レベルができますってのはオプションなんじゃない?
言語自体はアセンブラの方が簡単な希ガス
0675デフォルトの名無しさん
2012/08/11(土) 20:47:38.54レジスタとかフラグとか常に考えないといけないし、同じ事をするのに
C/C++で一行で書ける事が何十行になったりする
0676デフォルトの名無しさん
2012/08/11(土) 21:48:48.771つにまとめれないのでしょうか
template<typename T1, typename T2>
f(const T1 & t1,const T2 & t2
,typename boost::enable_if<boost::is_arithmetic<T1> >::type* = 0
,typename boost::enable_if<boost::is_arithmetic<T2> >::type* = 0
){...
template<typename T1, typename T2>
f(T1 & t1,const T2 & t2
,typename boost::disable_if<boost::is_arithmetic<T1> >::type* = 0
,typename boost::enable_if<boost::is_arithmetic<T2> >::type* = 0
){...
0677デフォルトの名無しさん
2012/08/11(土) 22:10:11.27馬鹿には無理
0678デフォルトの名無しさん
2012/08/11(土) 22:22:39.26template<typename T1, typename T2>
void f( T1 && t1, T2 &&t2 ){}
でまとめられる予感。
0679デフォルトの名無しさん
2012/08/11(土) 22:43:43.53inline
void fsub(T1 & t1,T2 &t2 ){...}
template<typename T1, typename T2>
void f(consy T1 & t1,const T2 &t2 ){f_sub}
0680デフォルトの名無しさん
2012/08/11(土) 23:07:35.99重すぎて大変。
0681デフォルトの名無しさん
2012/08/14(火) 01:15:28.72その何十行をマクロ化することに燃えてた時代もあったな。
0682デフォルトの名無しさん
2012/08/14(火) 02:26:21.55今ではcompiler_intrinsicsとなって固まったけどな
こいつが吐くコードがまたたまにバカみたいに無駄の多いコードで
0683デフォルトの名無しさん
2012/08/14(火) 06:09:57.73アセンブリでマクロ書けるんだっけ?
MASM はかける。今はmlはMS(V)C に付属しているんですか?
0685デフォルトの名無しさん
2012/08/14(火) 07:07:46.580686デフォルトの名無しさん
2012/08/14(火) 14:45:40.82c,dはaとbの長さがあります
aとbの長さzとは*aをa[0] ,a[1],...と分解して
さらにa[0],[1],...を2進数列で分解してx_1,.......,x_32, y_1,...........
と分解したとき2進数列のz番目以下の値は定義されていることをいいます。
このときaのcまでの値後ろにbのdまでの値を付け加えたeを作りたいんですけど、
eに対してもまたfを付け加えてgを作ったりしなければなりません。
このときa,b,e,fのデータ構造を全て同じなものに書き換えて効率のよいものにしたいのですけど
どのようにしたらいいですか?
0687デフォルトの名無しさん
2012/08/14(火) 14:49:10.690688デフォルトの名無しさん
2012/08/14(火) 15:00:42.32説明が判らん。
cはポインタaの長さがある。
これだけでもう、ちんぷんかんぷんだ。
まして、bは整数型でaとは型が違うのに同じように扱うのか?
それに、*aをa[0], a[1],... と分解するってどういうことだ?
*aがそれすなわちa[0]なのに分解とはどういうことだ?
データ構造を効率化するよりも先ず、他人に説明できる方が重要だぞ。
0689デフォルトの名無しさん
2012/08/14(火) 16:34:14.14全然わからんw
現状で精一杯のコードをさらせば、誰かが最適化してくれるんじゃね
0690デフォルトの名無しさん
2012/08/14(火) 17:01:02.05std::shared_ptr, std::unique_ptrが標準であるので,それを使えばよい.
また,これらのスマートポインタは「オーバヘッドがゼロ」であるため,生ポインタを使うときとくらべてもパフォーマンスに遜色はない.
なので,使える環境があるなら積極的に使えばよい.
ってマジなの?オーバーヘッドゼロってどういう原理?
0691デフォルトの名無しさん
2012/08/14(火) 17:10:17.28>686は、intを32 bitと仮定しており、aやbの長さzは、aやbが指すint型配列のビット数、
ただし「2進数列のz番目以下の値は定義されている」とあるから、zは32 の倍数とは限らない(定義のされ方次第
という具合に、zはaやb形式のビット列の正味のビット数を指す
こう考えれば
>このときaのcまでの値後ろにbのdまでの値を付け加えたeを作りたいんですけど、
の意味は明らかで、aが指す配列の先頭cビットと、bが指す配列の先頭dビットを連接したビット列eを作りたい、の意
0692デフォルトの名無しさん
2012/08/14(火) 17:11:58.970693デフォルトの名無しさん
2012/08/14(火) 17:18:28.67dynamic_bitsetにはappend()ってメソッドがあるのか
奇っ怪なコンテナだな
確かに標準のstd::bitsetじゃ大きさ固定だし
0694デフォルトの名無しさん
2012/08/14(火) 17:29:54.93スマポ一神教の糞どもがスマポを布教しようと嘘で勧誘してんだよ
オウム真理教の麻原が空を飛べるとかいうのと同じぐらいの嘘っぱち
だからそんな邪教には手を出さず生ポインタをつかうべきそうするべき
0695デフォルトの名無しさん
2012/08/14(火) 17:32:41.70std::unique_ptr<T>はともかく、
std::shared_ptr<T>については、ナマポ+参照カウンタ(か何か)が必要なので、空間のオーバーヘッドゼロ(ナマポと同じメモリ消費)というのはちと怪しい
空間のオーバーヘッドがゼロでないということは、代入やコピーはナマポより遅くなりかねない
(まあ代入やコピーの時間がナマポと同じになる実装が全く不可能かというとそうでもないが
また、とうぜんながら構築や破棄は素のnew/deleteよりは遅い
ただ、スマポが保持するTのオブジェクトへのアクセスの時間オーバーヘッドは、最適化がちょっとがんばればゼロになる
と思う
0696695
2012/08/14(火) 17:35:29.96>(まあ代入やコピーの時間がナマポと同じになる実装が全く不可能かというとそうでもないが (695)
これはないわ、実装を工夫してスマポ本体のサイズをナマポと同じにできても、
代入やコピーの際に所有権に関する処理(委譲や参照カウンタの更新とか何か)があるので
どうしてもナマポの代入よりは遅くなるハズ
0697デフォルトの名無しさん
2012/08/14(火) 17:38:43.93(virtual destructor不要)
でもあれだけの機能を備えつつメモリをナマポの倍しか使わないとか優れもの
0698デフォルトの名無しさん
2012/08/14(火) 17:45:12.52カウントはアトミック操作だからどうしても時間かかる
boostのほうならマクロでOFFにできるけど
0699デフォルトの名無しさん
2012/08/14(火) 18:05:48.57302 :デフォルトの名無しさん [sage] :2012/05/25(金) 17:04:43.03
shared_ptrはともかくunique_ptrは消費メモリもオーバーヘッドも生ポインタと変わらんと思う
303 :デフォルトの名無しさん [sage] :2012/05/25(金) 17:23:15.50
生成と破棄x30000000、sizeof比較
int*: time: 2.13s
http://ideone.com/2tLcx
std::unique_ptr<int>: time: 2.13s
http://ideone.com/wtba4
std::shared_ptr<int>: time: 4.41s
http://ideone.com/UDuJE
sizeof:
http://ideone.com/EtftU
> sizeof(int*) = 4
> sizeof(std::unique_ptr<int>) = 4
> sizeof(std::shared_ptr<int>) = 8
0700デフォルトの名無しさん
2012/08/14(火) 19:49:46.110701デフォルトの名無しさん
2012/08/14(火) 19:57:55.84所有権が移るような代入もそんなに使わないから俺はスマポメイン
所有権の無い参照としてのポインタは当然ナマポだから
全体としてはナマポ方が多いけど
0702デフォルトの名無しさん
2012/08/14(火) 20:02:24.67ポインタではなく自動変数を使えば良い
�Aスコープを超えて寿命があるがしっかりと所有権が管理されてプログラマの支配下にある場合
むしろプログラマの管理から意図せずして所有権を奪いかねないunique_ptrではなく生ポインタを使うべきである
�Bスコープを超えて寿命が在り、なおかつ共有するオブジェクトが多くプログラマに管理しきれない場合
shared_ptrを使うべきである
以上の考察からunique_ptrに存在価値はほぼない
0703デフォルトの名無しさん
2012/08/14(火) 20:05:00.370704デフォルトの名無しさん
2012/08/14(火) 20:10:12.92ユニポは意図しないと所有権が移動しないようになってるけど
0705デフォルトの名無しさん
2012/08/14(火) 20:12:48.89�Aは何でナマポだと解決するの?
0706デフォルトの名無しさん
2012/08/14(火) 20:21:19.860707デフォルトの名無しさん
2012/08/14(火) 20:21:25.47bool operator==(const B& lhs, const B& rhs);
を定義し、なおかつBの派生クラス(公開属性で派生)Dのオブジェクトx, yについては
x == y
と書いても上のoperator==()が呼ばれないようにしたいんですが、何かいい方法無いでしょうか
やっぱり bool operator==(const D& lhs, const D& rhs);を定義して、
ただし例外でも投げるみたいな作りにしないといけないんですかね…
0708デフォルトの名無しさん
2012/08/14(火) 20:22:54.97�Aでボロが出てるぞ
0709デフォルトの名無しさん
2012/08/14(火) 20:36:40.16デストラクタってのは見えないコードなんだよ
プログラマが支配者の環境ではそんな悪魔が入り込む余地はないほうがいいんだよ
0710デフォルトの名無しさん
2012/08/14(火) 20:38:49.74Dの等価演算子を宣言だけして未定義にすればいい
0711デフォルトの名無しさん
2012/08/14(火) 20:40:35.89こんな感じ?
http://ideone.com/M0fbC
http://ideone.com/9wI7R
特殊化をコンパイルエラーにさせる場合って普通どう書くんだっけ?
0712デフォルトの名無しさん
2012/08/14(火) 20:42:55.260713デフォルトの名無しさん
2012/08/14(火) 20:47:04.12struct D : B { };
bool operator == (B const & a, B const & b) { return a.i == b.i; }
bool operator == (D const & a, D const & b);
int main(void) {
B b;
D d;
b == b;
// d == d;
return 0;
}
0714デフォルトの名無しさん
2012/08/14(火) 20:50:45.94Bの派生全て呼ばれないようにしたいのか
それともDだけなのか
0715707
2012/08/14(火) 20:56:50.71なるほどごもっともです。Dの等値比較をやろうとするとリンクエラーになるからわかるというわけですね
>>711
コンパイル時エラーの起こし方が超クールっすね
おまけにB以外のクラスの等値比較が全部エラーになるというあたりがGJですな
だいたい>710のやり方で実用上ほぼ問題無いのですが、基底クラスB一つに対して
派生クラスが大量にある場合、派生クラスのoperator==()の宣言忘れがあったりすると怖いですね、、
まあ派生関係の子についてもらさずやっておけば、孫以下は安心みたいですが、、
0716デフォルトの名無しさん
2012/08/14(火) 21:07:46.200717デフォルトの名無しさん
2012/08/14(火) 21:08:56.65bool operator==(const D& lhs, const B& rhs);
bool operator==(const D& lhs, const D& rhs);
たぶん意図しているだろう挙動を得るには宣言が3つ必要だから忘れるなよ
0719デフォルトの名無しさん
2012/08/14(火) 22:03:17.20まあ等値演算させたくないDをBから公開属性で派生するのはやめるのが吉ですかそうですか、
等値演算以外のシチュでDからBへの型変換を希望するときのために、明示的型変換(にほぼ近い)メソッドをDに設ける。
B& D::GetB(); とか。(ユーザー定義型変換にexplicitが書けて、かつコンストラクタ呼び出し回数の最適化がきちんと利けばればクールなんですがね…orz
というわけで、>710で凌ぎつつ、様子を見てGetB()を設ける方向でいこうかと
>>717
Dの等値比較を見たコンパイラは引数にB,D混在な宣言より先に
bool operator==(const D& lhs, const D& rhs); の宣言を探し、
それがあればそれを使うのでB,D混在バージョンの宣言は不要なはず
(ていうかそもそもC++コンパイラって、暗黙の型変換の介在で呼び出し可能な全ての引数の組み合わせを全部チェックするんでしたっけ…
0720デフォルトの名無しさん
2012/08/14(火) 22:16:29.57能力の包含関係でいうとBはDに含まれてないといけない
まあ理想だからすべてがそうなるとはならないんだけどね
0721デフォルトの名無しさん
2012/08/14(火) 22:31:24.160722デフォルトの名無しさん
2012/08/14(火) 22:36:48.62DとBの比較も禁止したいんだろ?ってこと
0723デフォルトの名無しさん
2012/08/14(火) 22:51:30.37意図を明確にするためには全部書いたほうがいいんだろうなあ
0724デフォルトの名無しさん
2012/08/14(火) 22:54:27.890725デフォルトの名無しさん
2012/08/14(火) 23:18:03.89> 所有権の無い参照としてのポインタは当然ナマポだから
当然参照だろ?何言ってるんだ?
0726デフォルトの名無しさん
2012/08/14(火) 23:23:07.46DはBをprivate又はprotected継承してusingでメンバを公開するのはどうだろうか
アップキャストが出来なくなるからoperator==が呼ばれないと思う
0727デフォルトの名無しさん
2012/08/14(火) 23:34:06.510728デフォルトの名無しさん
2012/08/14(火) 23:44:13.73ttp://codepad.org/jAqgVmxh
Bへのアップキャストはしたい、けれどもBのイコール演算子を適用したくないってのはもう設計ミスってる気がする
0729デフォルトの名無しさん
2012/08/14(火) 23:47:36.920730デフォルトの名無しさん
2012/08/14(火) 23:48:31.48と関係ないつっこみ
0731デフォルトの名無しさん
2012/08/14(火) 23:56:56.440732デフォルトの名無しさん
2012/08/14(火) 23:58:32.65そんな事無い
virtualは親クラスのポインタや参照から呼ぶときにvtblを参照して飛ぶもので少なくともvirtualじゃないとオーバーライド出来ないとかでは無い
以下実証コード、あと子クラスがオーバーライドを提供する場合はusing宣言が要らなかったことを訂正
ttp://codepad.org/pxdDc7Wb
0733デフォルトの名無しさん
2012/08/15(水) 00:12:28.680734デフォルトの名無しさん
2012/08/15(水) 00:31:18.94なるほど親クラスの関数が仮想関数でありかつ型が一致していないとオーバーライドではないので>>732で言ったことは間違いだと
今まで誤った解釈をしていたわありがとう
0735デフォルトの名無しさん
2012/08/15(水) 01:12:48.03http://codepad.org/l7ZHi7GZ は教科書どおりで初心者としてよく理解できるのですが、
基底クラスを private で継承したとき、
http://codepad.org/FzZmEaBe (?)
http://codepad.org/DlFN6fRN (???)
がコンパイルできない理由がわからないでいます。
基底クラスを private で継承したとき main() からみえないものはなにでしょうか?
よろしくお願いいたします。
0736デフォルトの名無しさん
2012/08/15(水) 02:59:26.440737デフォルトの名無しさん
2012/08/15(水) 03:30:43.850738デフォルトの名無しさん
2012/08/15(水) 06:58:22.91template< class Derived > bool B::operator==( const Derived& rhs );
template< class Derived > bool operator==( const Delived& lhs, const B& rhs );
これじゃだめだったか?
0739デフォルトの名無しさん
2012/08/15(水) 06:58:28.45関係ないけどこれエラー行が分かり辛いな
実際のエラー箇所はLine 41なのに
0740デフォルトの名無しさん
2012/08/15(水) 07:14:04.14設計ミス設計ミス簡単に言うたかてな〜;;
・operator==(lhs, rhs)は、lhsとrhsの実体が同一である限り真偽が一貫しているべきである(さもないと予想外のシチュでバグを生じる
・オブジェクトは状態を持つ。これは、operator==(lhs, rhs)が、lhsとrhsの実体が同一であっても
一貫性を保たない(時とともに真偽が変わる)ような設計が言語思想上禁止まではされていないことを意味する
オブジェクトの状態変更を禁止して、全部オブジェクトの新規生成に置き換えるのはパフォーマンスに響くケースもある
(真に一貫性を強制したければ、関数型言語でも使うわ
・Bをpublic継承するD(複数種類ある)は一般にBにない追加データメンバをもち、そのうちの一部は時とともに状態を変えてD同士の==にも影響する
・この場合、時間とともに変化する追加データメンバを持ってしまったDのopeator==(D, D)狙い撃ちで禁止するのが最も近道
C++の自由度の高さの中から全ての要件とプログラマの立場からの希望を満たす設計をひねり出すのは
なかなかに時間と根気を要する仕事でありまして、後者はしばしば後回しにされがち
ていうか設計のための設計はイラン、というのが管理する立場の平均的意識であるハズ
>>722
説明不足でもうしわけなかったが、BからDを継承する際に追加されたデータメンバの時間変化が問題なので、
BとDの比較は特に問題は無い
0741デフォルトの名無しさん
2012/08/15(水) 07:23:40.33実行時例外にするとかよくあることだしな
実行時よりコンパイル時に分かる方がいい
0742デフォルトの名無しさん
2012/08/15(水) 08:06:08.77確かに Line 41 を表示しないのは手抜きだな。
Visual Studio 2010 だとこんなかんじ。
------ ビルド開始: プロジェクト: Test, 構成: Debug Win32 ------
main.cpp
main.cpp(41): error C2247: 'B::hiddendisplay' はアクセスできません。'D' は 'private' で 'B' からの継承で使われています。
main.cpp(15) : 'B::hiddendisplay' の宣言を確認してください。
main.cpp(20) : 'D' の宣言を確認してください。
main.cpp(5) : 'B' の宣言を確認してください。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
0743デフォルトの名無しさん
2012/08/15(水) 08:38:24.76http://ideone.com/4LHUo
0744デフォルトの名無しさん
2012/08/15(水) 08:55:23.90Visual Studio 2008/2010で通らないでつД`;)
0745デフォルトの名無しさん
2012/08/15(水) 09:09:17.96引数が多すぎます、既定のパラメを指定できません、って怒られたわ。
それじゃと思い、テンプレート引数上でenable_ifを使ったら、
そういうの使えるの、classだけだから。関数はダメって怒られた。
0746デフォルトの名無しさん
2012/08/15(水) 09:29:51.370747デフォルトの名無しさん
2012/08/15(水) 09:33:49.950748デフォルトの名無しさん
2012/08/15(水) 09:38:05.680749デフォルトの名無しさん
2012/08/15(水) 10:01:06.780750デフォルトの名無しさん
2012/08/15(水) 13:08:02.36おしえてください。
0751デフォルトの名無しさん
2012/08/15(水) 13:08:18.230752デフォルトの名無しさん
2012/08/15(水) 13:20:13.740753デフォルトの名無しさん
2012/08/15(水) 13:27:14.780754デフォルトの名無しさん
2012/08/15(水) 13:39:10.28これから登場するかもしれない選択肢まで含めて網羅することは不可能。
一般的なものを挙げることは可能だが、それなら普通に検索すればいい。
0755デフォルトの名無しさん
2012/08/15(水) 13:56:58.43まずあなたが知っているものを挙げてください
0756デフォルトの名無しさん
2012/08/15(水) 16:17:44.730757デフォルトの名無しさん
2012/08/15(水) 16:50:12.02うんこに金箔つけてもうんこはうんこ
0758デフォルトの名無しさん
2012/08/15(水) 17:03:51.45うんこを塗りつけるんだから逆じゃね?
0759デフォルトの名無しさん
2012/08/15(水) 17:37:51.99うんこをビニールぶくろに入れてしまえばたやすく処理できる
これがカプセル化です
0760デフォルトの名無しさん
2012/08/15(水) 17:47:18.100761デフォルトの名無しさん
2012/08/15(水) 17:49:03.490762デフォルトの名無しさん
2012/08/15(水) 17:49:30.890763デフォルトの名無しさん
2012/08/15(水) 21:07:40.870764デフォルトの名無しさん
2012/08/15(水) 21:11:28.68ナマポもらって突っ走ればいいじゃん
0765デフォルトの名無しさん
2012/08/15(水) 21:26:14.91shared_ptr とかで、「誰かが今参照してマース」 というのを
確認する手段ってある?
0766デフォルトの名無しさん
2012/08/15(水) 21:33:02.34>>736
ありがとうございます。おっしゃるとおり「基底B から派生Dが導出されている」ことがmain() からみえないとすれば納得できます。
継承の書式における private/protected/public はメンバのアクセス制御だけではないのですね。
0768デフォルトの名無しさん
2012/08/17(金) 01:07:58.90std::wstring r1 = L"3445";
std::wcout << r1 << std::endl;
std::wregex wr2(L"(.)\1+");
std::wstring fmt2(L"x");
std::wstring r2 = std::regex_replace(r1,wr2,fmt2);
std::wcout << r2 << std::endl;
実行結果
3445
3445
任意の数字列にて、同じ数字が連続するものを"x"に置換したいのです。
この場合"3x5"になって欲しいんですが、何故マッチしないのでしょうか?
0769デフォルトの名無しさん
2012/08/17(金) 01:47:38.28君さ、これは恥ずかしいことになってるぞ。
L"(.)\1+" → L"(.)\\1+"
正規表現のエスケープシーケンスとC++の文字列リテラルのエスケープシーケンスで
二重にエスケープシーケンスでワケワカになっちゃうのは分かるけどさ。
0770デフォルトの名無しさん
2012/08/17(金) 02:29:05.87oh...
確かに。
ありがとうございました!
0771デフォルトの名無しさん
2012/08/17(金) 04:49:16.840772デフォルトの名無しさん
2012/08/17(金) 04:56:19.20Ret foo(...){...
return ret;}
template<typename Ret...>
void foo_cps(Ret &ret ,...){...
ret=... ;
}
関数の返値を2通りの扱いできるようにしてるのだけど
同じ定義を2回,毎回書くのバカらしい
何かよい方法ないでしょうか
0773デフォルトの名無しさん
2012/08/17(金) 05:30:20.410774デフォルトの名無しさん
2012/08/17(金) 10:50:41.79上のリンクにあるようなコンストラクト時にストリームを受け取り、デストラクト時にそのストリームにログを出力するクラスを作っています
ここでもしそのストリームが例外を投げるとしたらデストラクタで例外を投げることとなってしまい、危険なコードになってしまいます
なので、リンクのようにデストラクタにおいては例外を握り潰し、その代わりとして例外発生時にそれを伝播させる関数を作ることで対処しようと思いました
この他にデストラクタで例外を投げてしまうことへの対処法は有るのでしょうか、お聞かせ願いたいです
0775デフォルトの名無しさん
2012/08/17(金) 11:01:25.48格安iPhoneEラーニング(学習動画多数あり)
http://tinyurl. com/7wj77om
コワーキングスペースJP
http://tinyurl. com/76vdrny
コワーキング帳
http://tinyurl. com/brzs486
javaやlinuxは手間がかかる 一人でやるには手間がかかりすぎる 手間がかからないで一人で開発できて
人の多いところで直接販売できる仕組みが提供されているメーカ製言語だけやる ずばりiphone またはWindow 8 Metro App Store C#
やるならメーカー製の言語 洗練された仕様 脆弱性が少なく 開発ソフトが優れ 課金ライブラリ アップデートライブラリが提供されていて 情報、書籍が多く開発しやすい
奴隷になりたければオープン系をやればいい 時間がかかり 人は多く 仕事の取り合い 足の引っ張り合い 脆弱性が多く 互換性がなく 癖があり 大規模開発中心
詳細設計しかできない体になって年取ってぽいだ 独立もできない 手間のかかりすぎる仕様だから
派遣屋 IT経営者はその方が喜ぶ 大規模分割開発では使い捨てても独立はできまい 嫌なら辞めろ 代わりはいくらでもいる
若い派遣営業は舐めた態度をとってくる ひどいピンハネ
オープン言語、日本独自開発 言語・フレームワーク ガラパコ携帯 javascript html5 android java linux python rubyやnode.jsとかやめとけ
メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る
コンパイルできないからパクられ 直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ
0776デフォルトの名無しさん
2012/08/17(金) 11:02:11.45Objective-CやC#を覚えるとサーバーサイドからクライアントサイドまでカバーでき人の多い場所でソフトを売る権利を得られる
仕事や趣味でObjective-CやC#をやっておけば派遣切りされても会社辞めることになってもソフトを売って生きていける それはセーフティーネットになる
WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみ C#は自分用業務支援ツールとして使える
例えばPHPでWEBアプリを作っていて管理者画面はC#(EXEアプリ)で作るとかなり早く作れる(Smartyなんか使うよりもかなり早くだ)
C#のソースを出さなければWEBアプリの著作権も守れる ASP.net(C#)+管理EXEアプリ(C#)+iPhone
C#マーケット Windows8 Metroアプリ WindowsPhone Surface PS Vita Xbox360 iPhone(mono使用)
iPhoneマーケット iPhone iPad 予定 iTv iCar i (家電製品)
地方に安い土地を買いコンテナ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィス・コワーキングで収入を得ながらそこでアプリを開発する
http://tinyurl. com/7pb2yaa
http://bit. ly/iLIpJa
iPhoneはヤフオク脱獄iphoneで 15kで買える IIJmio,イオン.BB.exite,DTIで月千円程度で利用できる
0777デフォルトの名無しさん
2012/08/17(金) 11:03:27.01ばーか^^
0778デフォルトの名無しさん
2012/08/17(金) 11:06:01.16void close(){
if(closed){return;}
closed=true;
output();
}
~Logger(){
try{close();}catch(...){}
}
close呼び出しは必須でなく推奨扱いにして使う側に任せる
0779デフォルトの名無しさん
2012/08/17(金) 11:54:57.62資金500万の使い方すら頓珍漢もいいとこ何もわかってない
言ってる内容から察するに
こいつ自身にとって独立が自らの問題になったことはない
0780デフォルトの名無しさん
2012/08/17(金) 12:50:41.81感動した
0781デフォルトの名無しさん
2012/08/17(金) 12:55:39.570782デフォルトの名無しさん
2012/08/17(金) 12:58:52.81あとは朝マックのあれ
0783デフォルトの名無しさん
2012/08/17(金) 13:12:06.87ハッシュから連想できるもの
0784デフォルトの名無しさん
2012/08/17(金) 13:15:33.910785デフォルトの名無しさん
2012/08/17(金) 13:15:59.760786デフォルトの名無しさん
2012/08/17(金) 13:16:42.540787デフォルトの名無しさん
2012/08/17(金) 13:16:42.710788デフォルトの名無しさん
2012/08/17(金) 13:20:28.090789デフォルトの名無しさん
2012/08/17(金) 13:24:54.820790デフォルトの名無しさん
2012/08/17(金) 13:45:45.990791デフォルトの名無しさん
2012/08/17(金) 13:51:19.660792デフォルトの名無しさん
2012/08/17(金) 14:19:54.260793デフォルトの名無しさん
2012/08/17(金) 15:48:28.25と思って最初に浮かんだのはヴァッシュだったorz
0794デフォルトの名無しさん
2012/08/17(金) 16:09:45.04それから連想するのが ADAYINTHELIFE だな
0795デフォルトの名無しさん
2012/08/17(金) 16:10:43.460796デフォルトの名無しさん
2012/08/17(金) 16:17:00.17ライブアライブのハッシュを忘れるなよ
先に出たのはあっちだぞ
0797デフォルトの名無しさん
2012/08/17(金) 18:18:03.79やはりそれが最善でしょうか
ありがとうございました
0798デフォルトの名無しさん
2012/08/17(金) 18:26:46.97明示的に処理する関数を用意することは当然として
デストラクタでのエラー処理の挙動は外から与えるように作ればよい
文脈によってエラー処理の方針は常に変化するのであるからクラス側で固定するべきではない
0799デフォルトの名無しさん
2012/08/17(金) 20:27:40.50なるほど
しかしそのクラスはテンプレートクラスで、どのような例外が投げられるかは全く分かりません
またそのクラスは頻繁に生成破棄を繰り返すので動的に関数を持ち運ぶのは出来ればしたくないです
静的に処理するにはどのような方法が有るでしょうか
0800デフォルトの名無しさん
2012/08/17(金) 20:41:08.04そういう場合はポリシーを使いましょう
0801デフォルトの名無しさん
2012/08/17(金) 21:10:13.170802デフォルトの名無しさん
2012/08/17(金) 21:10:46.56何が便利(どう使えばいい)か教えてくれ。
キャストできないときに NULL が返るのは分かったが、
別に NULL チェックがしたいわけじゃないし、
キャストするときは大抵基底で判別してからやらない?
キャストしまくってポインタが返ってきたものだけ処理するとか…そんな書き方するのか…?
0803デフォルトの名無しさん
2012/08/17(金) 21:14:49.310804デフォルトの名無しさん
2012/08/17(金) 21:15:25.340805デフォルトの名無しさん
2012/08/17(金) 21:17:52.530806デフォルトの名無しさん
2012/08/17(金) 21:24:17.56ハンドラで例外を受け取って後で再スローという手も
//close
void f1(){
Logger<T> lg(st);
lg.put();
lg.close(); // throw
}
void f(){
f1();
f2(); //実行されない
}
―――――――――
//handler
void f1(){
ExHandler h;
{
Logger<T> lg(st, h);
lg.put();
}
h.checkThrow(); // throw
}
void f(){
f1();
f2(); //実行されない
}
0807デフォルトの名無しさん
2012/08/17(金) 21:26:31.11ずっとC言語キャストばっか使ってたから、今の仕事でC++キャストを強制されて、すげーストレスなんだ…。
他のキャストはとりあえず分かったフリをしたが、dynamic_cast だけはこんな仕様必要か?って思ってしまったんだ。
とりあえず我慢してC++キャスト使っていくよ…。
…アンダーバーとか面倒じゃないのかねぇ。
0808デフォルトの名無しさん
2012/08/17(金) 21:30:18.60開発段階でそんなコードはぜんぶ潰すように心がける
0809デフォルトの名無しさん
2012/08/17(金) 21:31:31.28> dynamic_cast だけはこんな仕様必要か?
リップマン先生も同じこと言ってたし
0810デフォルトの名無しさん
2012/08/17(金) 21:32:50.16キャストは少ないほどよい
キャストは基本的に悪
悪い事はめんどくさい事しないとできないようにしよう
というのがC++の文化
だからキャストはだらだら長くてださい予約語を割り当てた
Cスタイルキャストも仕様から除外したかったが互換性のために仕方なく残した
0811デフォルトの名無しさん
2012/08/17(金) 21:33:42.36そもそもすげーストレスになるほどキャストを使っているという状況が
おかしいのではないか?
0812デフォルトの名無しさん
2012/08/17(金) 21:35:17.440813デフォルトの名無しさん
2012/08/17(金) 21:44:07.100814デフォルトの名無しさん
2012/08/17(金) 21:50:37.38やっと動き出した仕事なので、書きまくってる訳じゃないです。
ファイル読み込みでポインタいじらにゃいかんところで使ってたぐらいです。
ストレスってのは、今までの書き方ができないストレスかなぁ。
>>812の通りで無駄に長くて、変な文字打たせて、揚句ソースは汚くなるし、
やってることは変わらないというのがどうにもね…。
0815デフォルトの名無しさん
2012/08/17(金) 21:50:43.42STLにおけるアロケータのような仕組みはポリシークラスというのですね、勉強になりました
しかしポリシーを用いてもスローされる例外の種類が分からない以上適切な処理を行うのは難しいと思うのです
解決策としてはストリームを渡すことによってそのストリームの状態を使ってエラー処理してもらう事になるのでしょうか
0816デフォルトの名無しさん
2012/08/17(金) 22:09:03.82数年ぶりに来たけど、まだあって安心した。
0817デフォルトの名無しさん
2012/08/18(土) 00:16:16.84同じ型だとコンパイルの自動型推論(ポリモアフィズム?)でおかしくなるので
struct mypair: std::pair
{};
を作った。
継承なんてしてるせいで実行速度減らないか心配
std::pairをそのまま使った方が速度は速い?
0818デフォルトの名無しさん
2012/08/18(土) 01:43:02.650819デフォルトの名無しさん
2012/08/18(土) 05:33:48.25D&E読めば書いてあるがRTTIの一環で考案された。
基本的には派生クラスの機能を使用する時も仮想関数でキャストしなくてもいいようにするはずだが、
時には特定の派生クラスの型情報がいる時もあり、そういう場合にdynamic_castでダウンキャストする。
他の機能もそうだがこういう余分な機能は必要になった時に使えばいいのであって必要なければ使わなくてもいいんだ。
0820デフォルトの名無しさん
2012/08/18(土) 11:43:22.13タグとして使うならあるいわ・・・
if( dynamic_cast< Attribute< true, true, true >& >( object ) )
{
return object.Something();
}
else
{
return object.Example();
}
0821デフォルトの名無しさん
2012/08/18(土) 12:10:57.660822デフォルトの名無しさん
2012/08/18(土) 12:13:06.820823デフォルトの名無しさん
2012/08/18(土) 12:22:52.540824デフォルトの名無しさん
2012/08/18(土) 13:44:08.120825デフォルトの名無しさん
2012/08/18(土) 13:54:10.32{
std::puts( "No. So I'm japanese." )
}
0826デフォルトの名無しさん
2012/08/18(土) 20:50:04.530827デフォルトの名無しさん
2012/08/19(日) 08:55:26.16消滅しないよね?
0828デフォルトの名無しさん
2012/08/19(日) 09:25:12.440829デフォルトの名無しさん
2012/08/19(日) 10:49:45.89比較演算子を仮想関数にしたいのですが、下のように書いても、引数の型が違うため、動的結合になってくれません。
(下記プログラムでは派生クラスが一つしかありませんが、実際には多数あります。)
仕方ないので、基本クラスのoperator==だけを定義し、そこで実行時の型を判定して型に応じた処理をさせているのですが、
これだとオブジェクト指向の意味が半減するような・・・。こういう場合、どう書くのが一般的なのでしょうか?
class Base
{
public: virtual bool operator==(const Base& obj) const
{
cout << "基本クラスの処理\n";
return true;
}
};
class Delived : public Base
{
public: virtual bool operator==(const Delived& obj) const
{
cout << "派生クラスの処理\n";
return Base::operator==(obj);
}
};
int main()
{
Delived d1, d2;
Base *pB1 = &d1, *pB2 = &d2;
if(*pB1 == *pB2) { } // Baseクラスしか呼ばれない
return 0;
}
0830デフォルトの名無しさん
2012/08/19(日) 11:08:11.11改めてプログラムを眺めていて気付いたのですが、派生クラスの演算子を
virtual bool operator==(const Delived& obj) const
ではなく
virtual bool operator==(const Base& obj) const
とすればうまくいきそうです。(試してみたところ、うまく動いています。)
派生クラスの演算子なのに基本クラスの参照で引数を受け取るのは何だか変な気持ちですが。。。
もし考え違いをしているようでしたらご指摘くださればありがたいです。
0831デフォルトの名無しさん
2012/08/19(日) 11:28:25.53どうしても==で派生まで比較したいならこんな感じかねぇ
でもvirtualで実装した演算子は混乱を招くから一部の便利なパターンを除いてお勧めしないよ
自分が作るなら
operator == はvirtualにしないでスライシング&等価判定にして
派生まで含めた完全な等価判定はvirtual Equalsを直接呼び出す風に書くけど
0832デフォルトの名無しさん
2012/08/19(日) 12:12:35.05貼っていただいたソース拝見しました。確かにこれなら派生分を含めて判定可能ですね。
わざわざ完全なソースまで作っていただき、ありがとうございます!
ところで、「一部の便利なパターン」とは、どんなパターンなのでしょうか?
もしよろしければ、後学のために教えていただけると嬉しいです。
0833デフォルトの名無しさん
2012/08/19(日) 12:55:52.55プークスクスクスそれは当たり前であって、
同一シグネチャのメソッドの振る舞いがオブジェクトによって変わるというのが多態性だというのに、
シグネチャ自体を最初からBaseとDelivedで相違させて多態とかYOUは何をしたかったのか
また、>830の処置で一見多態を実現できたとしても、Delived::operator==(const Base& obj)の中で
objが本当はどのクラスなのか特定して適切な比較演算を行うという難事業が待っておる
>831の最後のようなやり方でも、Equals()がconst Base&を引数としてとる限りは同じ話
dynamic_castでも使わないことには解決しない
0834デフォルトの名無しさん
2012/08/19(日) 12:57:33.810835デフォルトの名無しさん
2012/08/19(日) 13:05:25.59このケースでは dynamic_cast 相当の関数を自作だってできる(>>833 にはできなさそうに見えるが)
0836デフォルトの名無しさん
2012/08/19(日) 13:07:29.830837デフォルトの名無しさん
2012/08/19(日) 13:13:12.88dynamic_cast相当の機能をプログラマが書いても良いが、
未来におけるDelivedの潜在的設計者全員にそれを強制する仕組みが別途要るわけだが
>835クンには設計センスがないね〜
一方ロシアはoperator==()を仮想関数などにせず、Equals()も設けず、dynamic_castも使わずに解決した
0838デフォルトの名無しさん
2012/08/19(日) 13:13:13.670839デフォルトの名無しさん
2012/08/19(日) 13:17:13.05必要に応じてってだけで強制することには全然ならないんだが =0; はともかく
0840デフォルトの名無しさん
2012/08/19(日) 13:23:51.69=0;は実体化できないのだからdynamic_castのしくみで比較できなくとも実害アリマセンネー
それはともかく、わざわざ藻前は仮想関数テーブルのアドレスをプログラマに算出させるのか
それとももっと原始的な方法をとって、Delivedが追加される度にクラス識別コード一覧の定義ファイルをメンテナンスせねばならないつくりにしたいのか
0841デフォルトの名無しさん
2012/08/19(日) 13:26:54.810842デフォルトの名無しさん
2012/08/19(日) 13:27:56.02kwsk
0843デフォルトの名無しさん
2012/08/19(日) 13:28:46.73識別コードって GUID のことか? これまた全然いらないし
0844デフォルトの名無しさん
2012/08/19(日) 13:30:22.990845デフォルトの名無しさん
2012/08/19(日) 13:42:36.630846デフォルトの名無しさん
2012/08/19(日) 13:46:19.64ハイおしまい
0847デフォルトの名無しさん
2012/08/19(日) 13:48:48.88dynamic_cast相当の機能は少なくとも型の互換性情報をオブジェクト内に埋め込まねば始まらない
C++のdynamic_castは、仮想関数を1つ以上持つオブジェクトに必ず埋め込まれている
仮想関数テーブル(vtable)のアドレスをそれに利用している
>識別コードって GUID のことか? これまた全然いらないし
上記のように互換性情報の埋め込みが全くいらないというdynamic_castはありえない
識別コード不要のテクニックとして、構造体の先頭に構造体サイズを持たせ、その大小で、
キャスト可能か否か判定する方法が存在はするが、既存フィールドの順序を厳格に保たねばならないなど、
コンパイラが責任をもてない規則が増える
>>845
>837の最後の1行が藻前にはそう見えるのかそうか…達者でな
0848デフォルトの名無しさん
2012/08/19(日) 13:51:32.99炎上質問法はもう流行らないから
0849デフォルトの名無しさん
2012/08/19(日) 13:51:41.43生成時の(ていうか、一般にvtableへのポインタとかあるので生成直前の、が正しい)領域全体のゼロクリアをお忘れなく
0850デフォルトの名無しさん
2012/08/19(日) 14:06:53.92まず virtual の外から見た使い方くらい押さえろよ
この流れはそれだけで充分だぞ
0851デフォルトの名無しさん
2012/08/19(日) 14:57:43.14単にdynamic_cast使ったほうが早くね?
インライン化されて条件が消え失せてくれることもあるし
bool Delived::operator == ( const Base &base )
{
if( !dynamic_cast< Delived* >( &base ) ) return false;
// 他
}
0852デフォルトの名無しさん
2012/08/19(日) 15:06:06.48ここではoperator == ( const Base &base )がvirtualなので、
operator==()に与えられる引数の型(真 or Delivedのどれか)を
コンパイル時に真に一意に決定できる場合にしかインライン化されない
当然そのときはdynamic_castも最適化で除去されるわけで、
dynamic_castを使ったら速くなる、というのは偽のような気がするが
0853デフォルトの名無しさん
2012/08/19(日) 15:15:30.71bool Compare( const Base &left, const Base &right )
{
return left == right;
}
if( !Compare( Delived(), Base() ) )
{
std::puts( "Not equal" );
}
MSのコンパイラーならこういうコードはインライン化されて
最終的にstd::putsだけになる。インライン展開される機会って
そんなに少なくないから十分じゃないか?
0854デフォルトの名無しさん
2012/08/19(日) 15:18:58.54static void * GetTypeID(void) { static int i ; return &i ; }
};
struct Base {
virtual void * GetTypeID(void) const = 0 ;
virtual bool operator == (Base const & obj) const = 0 ;
} ;
struct Derived1 : Base {
/* override */ void * GetTypeID(void) const { return TypeInfo<Derived1>::GetTypeID() ; }
/* override */ bool operator == (Base const & obj) const {
if(this == &obj) return true ;
if(TypeInfo<Derived1>::GetTypeID() != obj.GetTypeID()) return false;
return CompImpl(static_cast<Derived1 const &>(obj)) ;
}
bool CompImpl(Derived1 const & obj) const;
}
これがほぼ最強やな
0855デフォルトの名無しさん
2012/08/19(日) 15:23:48.67/* override */ void * GetTypeID(void) const { return TypeInfo<Derived1>::GetTypeID() ; }
/* override */ bool operator == (Base const & obj) const { return TypeInfo<Derived1>::GetTypeID() == obj.GetTypeID() && *this == static_cast<Derived1 const &>(obj) ; }
bool operator == (Derived1 const & obj) const { return this == &obj || /* ry */ ; }
};
いやこうだな
0856デフォルトの名無しさん
2012/08/19(日) 15:25:23.980857デフォルトの名無しさん
2012/08/19(日) 15:28:36.39それ以前にdynamic_castじゃ簡潔に書けないよ
ためしに一回書いてみ?
typeid(組み込みか自作か)の比較が必要になってくるから
0858デフォルトの名無しさん
2012/08/19(日) 15:33:31.84最初にdynamic_castとか言い始めたアホは誰だよ
0859デフォルトの名無しさん
2012/08/19(日) 15:35:36.280860デフォルトの名無しさん
2012/08/19(日) 15:39:12.82どういう事?派生と一致するとマズイって事かい?
0861デフォルトの名無しさん
2012/08/19(日) 15:46:48.95普段実行時型なんて使わんからホントにできんのかちょっとこんがらがってきた
0862デフォルトの名無しさん
2012/08/19(日) 15:55:08.26みんな同意のうえで話してるの?
等値の条件に型の一致を必要とするなら typeid の比較が当然なんだろうけどさ、片方が一方の
派生である場合に基底部分だけの一致で等値とみなすことも考えられるよね? dynamic_cast を
使うって言う人はたぶん後者で考えてるよね?
0863829
2012/08/19(日) 16:26:12.94>>833
キャストが必要であるにしても、最初に自分が採っていたやりかた(基本クラスですべての処理をする)に比べると随分すっきりする
ので、よしとします。
>>839
基地がたくさんあって、配達をされた内容によって基地ごとに処理をわけたかったんですwww
非常にお恥ずかしい。
>>862
皆さんほどC++に詳しくないので、あまり議論についていけてないのですが。。。
基本クラスは抽象クラスで、基本クラスの実体を生成することはありません。
また、実際の運用上、配達…じゃなかった、派生クラスAのオブジェクトと派生クラスBのオブジェクトを比較するといったような、
異なる派生クラスどうしを比較することもありません。
よって、たとえば>>830の方法で処理する場合、派生クラスの比較処理は、自分の型に強制的にキャストして比較してやればうまくいきます。
念のために、別の派生クラスのオブジェクトが渡された場合にエラーとなるよう、何らかの処理は入れるつもりですが。
0864デフォルトの名無しさん
2012/08/19(日) 16:31:29.48>派生である場合に基底部分だけの一致で等値とみなすことも考えられるよね? dynamic_cast を
>使うって言う人はたぶん後者で考えてるよね?
別に。つかむしろ話は反対で、operator==()を仮想関数とするという残念な基本構想のため、
dynamic_castでも使わねば
virtual bool Delived::operator==(const Base& obj)
というシグネチャに従い、Delivedクラスである*thisと、Baseクラスにアップキャストされたobjの比較しかできませんよ、みたいなノリ
0865829
2012/08/19(日) 16:39:00.42異なる派生クラスどうしでの比較は起こりえますです。
いずれにせよ、派生クラスの比較演算子の中で、異なる型が来た場合は同値でないと判断させればいいですね。
その方法がdynamic_castなのか別の方法なのかは、今回の質問の意図からは外れますので、あまり気にしません。
0866デフォルトの名無しさん
2012/08/19(日) 16:59:45.22残念なのでしょうか? 本来はどうすべきなのでしょうか?
ちなみに今回やりたいことは、以下のようなことです。
作成したいのは、一種のドローソフトのようなものです。ワードの図形描画機能とかIllustratorに近いものを想像してください。
図形にはいろいろ種類があります。たとえば直線や円や四角のような(実際にはちょっと違うのですが、まあ似たようなものです)。
「図形」クラスが基本クラスで、「直線」等が派生クラスです。
ユーザーは、キャンバス内に複数の図形を描画できます。
プログラムでは、それらは図形クラスのポインタを集めたコンテナ(ただの配列ですが)で保持しています。
ユーザーが描画処理を開始する前にバックアップとしてコンテナのコピー(深いコピー)を作成しておき、編集完了操作後に、バック
アップしたコンテナと編集されたコンテナとで比較を行って、変更されていた場合は「変更されているが保存するか?」という確認を
表示します。
コンテナの比較は、保持している図形の個数が等しいかどうかをまず判定し、等しい場合は、その中に保持されている個々の図形の
比較演算子を順次呼び出すことで比較をおこないます。
コンテナが保持しているのは基本クラスであるところの「図形」クラスのポインタなので、if(*pBase1 == *pBase2) のような比較が
発生します。
このような内容なのですが、operator==()を仮想関数にしないとすれば、どうするのが適切なのでしょうか?
初心者的な内容だと思いますが、良い方法があればご教示くださいませ。
0867デフォルトの名無しさん
2012/08/19(日) 17:01:39.71違う型は等値でないとしていいならtypeidの比較でFAだな。
dynamic_castだと指定の型とその派生型を区別しないから不適。
0868デフォルトの名無しさん
2012/08/19(日) 17:10:20.79各クラスの operator == は普通に同じ型の引数を取るものを定義。
で、 virtual bool Equals() const = 0 は各クラスで typeid を確認した後に *this == ...
とすれば自然な気がする。
この実装部は型が違うだけになるんで、基底クラスにテンプレートで置いとけば少し楽が
できるだろう。派生クラスを定義するのが限られた範囲なら、宣言まで含めてマクロにしても
いいかもしれない。
0869デフォルトの名無しさん
2012/08/19(日) 17:15:35.49if( typeid( *this ) != typeid( base ) ) return false;
で良いわけか。これなら孫クラスからDelived::operator==( base )呼び出しても使えるな。
あとtypeidって結局v_tableに展開されるんだよな。いちいちID持つより速いだろうね。
if( *this->v_table != base.v_table ) return false;
0870デフォルトの名無しさん
2012/08/19(日) 17:19:12.490871デフォルトの名無しさん
2012/08/19(日) 17:30:25.44なんでわざわざEqualsとoperator==で二重定義するのか判らん
0872デフォルトの名無しさん
2012/08/19(日) 17:32:24.14中身が違うからだよ
0873デフォルトの名無しさん
2012/08/19(日) 17:41:12.360874デフォルトの名無しさん
2012/08/19(日) 17:49:09.01Equals()の引数が空なの書き損じミスらしいがw
>>871
非virtualなbool Delived::operator==(const Delived& obj);を書けば、そちらはtypeidの比較が明白に不要で
かつvtableが介在しない分、コンパイラがちょっとがんばるだけでインライン展開も思いのまま
円と円とか、四角と四角、を比較する場合は a == bと書いて最適なコードが生成される
どれかの図形とどれかの図形の比較のときは、プログラマにEquals()を呼んでもらう、みたいなノリ
(C#のガイドラインではoperator==()から結局Equals()を呼んでるが、これはおそらくJITだからあまり効率に響かないのであろう
0875デフォルトの名無しさん
2012/08/19(日) 17:52:46.85同意見
「残念な基本構想」を強いて挙げるなら operator == がメンバという点くらいだが
これだけ延々と話すほどの情報量はない
0876デフォルトの名無しさん
2012/08/19(日) 17:52:53.20こういう2重ループをまとめたライブラリーみたいなの、ないのでしょうか
0877デフォルトの名無しさん
2012/08/19(日) 17:56:27.97関数にまとめればおしまいだろうしアプリごとの都合がいろいろ入りそうだし、ないんじゃないかな。
0878デフォルトの名無しさん
2012/08/19(日) 18:06:44.46>866はぎりぎりセーフだが、typeidの一致確認後、Delivedとしての内容の一致比較まで踏み込む場合は>868でFA
つまり、Baseや派生クラスとの比較を担保するvirtualなEquals()と、同一のDelived同士の比較のみ担保する非virtualなoperator==()の構成で正しい
さもないと、Baseおよびその派生クラス全てからfriendされ、巨大なif文とともに全てのDelived同士の比較ロジックを内臓する
巨大なoperator==(const Base& a, const Base& b)を書く羽目になる
長くなってサーセン;
0879デフォルトの名無しさん
2012/08/19(日) 18:14:15.92普通仮想関数でも引数の型が決まってりゃインライン展開されるよね。
>>853 みたいな話で。
そのへんどう考慮してんの?
0880デフォルトの名無しさん
2012/08/19(日) 18:15:08.80もし「画像」の二重ループのさせ方が表記上一定の構文で良く、
それに対して呼び出すべき処理も表記上一定の構文で良くて記号のみ変わるようなら
テンプレートでFA、なのでは
二重ループ処理を関数にまとめる、でも良いが、そうすると呼び出すべき処理を関数ポインタで渡さねばならず、
実行速度上多少不利かもしれない
(すくなくともインライン展開の出る幕は完全に無くなってしまう
0881デフォルトの名無しさん
2012/08/19(日) 18:15:15.640882デフォルトの名無しさん
2012/08/19(日) 18:22:50.09>つまり、Baseや派生クラスとの比較を担保するvirtualなEquals()と、同一のDelived同士の比較のみ担保する非virtualなoperator==()の構成で正しい
逆の関係のほうが良くね?operator==使うときの用途は完全一致しか無いんだから
部分一致の判定だけ別関数にしといた方がいいよ。
大体根底クラスの部分一致ならスライシングさせてもできるし。
0883デフォルトの名無しさん
2012/08/19(日) 18:31:14.990884デフォルトの名無しさん
2012/08/19(日) 18:43:27.55関数ポインタ?あんたC++標準アルゴリズム知らんの?
0885829
2012/08/19(日) 18:54:07.83> さもないと、Baseおよびその派生クラス全てからfriendされ、巨大なif文とともに全てのDelived同士の比較ロジックを内臓する
> 巨大なoperator==(const Base& a, const Base& b)を書く羽目になる
巨大なif文にしたくないからこそ、virtualにしようとしているのですが。。。
派生クラスでoperator==をvirtualにして、
bool DerivedX::operator==(const Base &obj)
{
if(typeid(*this) != typeid(obj))
return false;
DerivedXクラスの内容比較
}
とすれば、巨大なifを作る必要はないと思いますが、間違ってますでしょうか?
>>882
>>878は部分一致で判定をしようとしているのではなく、単に引数の型が同一派生クラスどうしか否かによって、関数をわけようと
言っているのだと思いますが。
0886デフォルトの名無しさん
2012/08/19(日) 18:55:44.69>>879
コンパイラに仕事しなくていいと伝えられる場合は伝えたほうが良い希ガス
>>882
一般に、Delived::operator==()にDelived以外のクラスとの比較機能も持たせると、
当てはまるクラスが追加される度に、我々が==演算子というものに対して期待する性質
(常等性(a==a)や交換則(a==bならb==a)や結合則(a==bかつb==cならa==c)といったもの)
が損なわれていないか、気にかけ続ける必要が生じてしまう
Equals()にはそこまで強い期待は世間的に無く、"Equals()"というシグネチャに出くわしたプログラマは
やや注意深く仕様書を読むであろうから、多少異常な等値演算の機能を持たせても問題が少ない
0887デフォルトの名無しさん
2012/08/19(日) 18:56:55.25フィルターを書けるとか塗りつぶしたいとか具体的に何がしたいの?
用途によっちゃboost::gilで済むだろうよ
元々Adobeが使ってた画像処理用高機能ライブラリだ
0888デフォルトの名無しさん
2012/08/19(日) 19:05:10.88そりゃ分かってるよ。ただ言語的に不自然という話。
部分一致の方法は言語的に元々用意されてて自分のコードだけ
特殊な事をすれば他のライブラリーと協調性が無くなるんだよ。
○言語的に用意されてる方法
// 完全一致
delived == baseB;
// 部分一致1
baseA = delived;
baseA == baseB;
// 部分一致2
Base &baseA = delived;
baseA.Base::operator==( delived );
0889デフォルトの名無しさん
2012/08/19(日) 19:06:10.39// 部分一致2
Base &baseA = delived;
baseA.Base::operator==( baseB );
0890デフォルトの名無しさん
2012/08/19(日) 19:08:37.49>878は、>875(「operator == がメンバ」である点が残念)に対するレス
非メンバの大域関数としてbool operator==(const Base&, const Base&)を設け、
かつDelivedやBaseにおいて、operator==()またはそれと同様な機能のメンバを公開しなかった場合、
大域関数の中身が酷い事になりますよ、みたいなノリ
仮想関数が全く要らないという本日正午ごろの発言は撤回すますごめん;
>>884
正直知らんが、>887は、イテレータを作れと言うのでもなく、二重ループを行う関数を作れと明白に言っているので
>880はそれほど間違った指摘ではないつもり
0891890
2012/08/19(日) 19:11:13.54×: >887
○: >877
0892デフォルトの名無しさん
2012/08/19(日) 19:15:00.58処理を渡すためには関数ポインタが必要になる、というのは明らかに間違い。
標準アルゴリズムのように関数オブジェクト使えばインライン展開も可能。
0893デフォルトの名無しさん
2012/08/19(日) 19:31:21.03テンプレートの引数に渡した場合はインライン展開の対象になる
厳密にはインライン展開できる関数の引数に渡した場合はインライン展開できる
0894デフォルトの名無しさん
2012/08/19(日) 19:36:07.400895デフォルトの名無しさん
2012/08/20(月) 15:39:30.92何が並列化の標準になるの?
>>827
> 827 名前:デフォルトの名無しさん [sage]: 2012/08/19(日) 08:55:26.16
> opneMPって.net3.5以降入ってないように思えるけど
> 消滅しないよね?
0896デフォルトの名無しさん
2012/08/20(月) 15:41:56.92gil何かが物足りないから
いつもOpenCVだ
c++と画像処理は相性良くないのかもしれない
0897デフォルトの名無しさん
2012/08/21(火) 00:44:52.390898デフォルトの名無しさん
2012/08/21(火) 01:30:02.770899デフォルトの名無しさん
2012/08/21(火) 01:50:28.311色素をfloatにして1画素128bitにしとくといい感じ
まぁ、1色素intにして少数位置ずらしたほうが速度出るけど
0900デフォルトの名無しさん
2012/08/21(火) 09:42:02.600901デフォルトの名無しさん
2012/08/21(火) 14:53:01.830902デフォルトの名無しさん
2012/08/21(火) 17:04:28.080903デフォルトの名無しさん
2012/08/21(火) 19:08:40.36という課題がゼミで出ているのですが、全然分かりません。ネットで結構調べたのですがダメだったので、
どなたか教えてくれる方ございましたら、お願いいたします。
0904デフォルトの名無しさん
2012/08/21(火) 19:15:08.23自然光計算したら28bitなんて直ぐ潰れるもんな
0905デフォルトの名無しさん
2012/08/21(火) 19:17:34.49まず再起呼び出しはわかるのか?
0906デフォルトの名無しさん
2012/08/21(火) 19:19:00.57「巡回セールスマン問題」と「完全列挙法」と「再起呼び出し」をそれぞれググって
何が分からないのか書いてみたら?
0907デフォルトの名無しさん
2012/08/21(火) 19:36:11.480908デフォルトの名無しさん
2012/08/21(火) 19:38:53.130909デフォルトの名無しさん
2012/08/21(火) 19:44:28.53>>903がヒントでなく答えそのものを求めてるならそうだな
0910デフォルトの名無しさん
2012/08/21(火) 20:00:06.87字面的に「全ルートを列挙して解け」ってことだろ……
列挙するのに再帰使えってこと
0911デフォルトの名無しさん
2012/08/21(火) 20:19:53.40そのとおりです。意味は分かったんですけど、プログラムが書けないんです・・・
0912デフォルトの名無しさん
2012/08/21(火) 20:26:43.470913デフォルトの名無しさん
2012/08/21(火) 20:28:42.74(
,, ) )
゙ミ;;;;;,_ (
ミ;;;;;;;;、;:..,,.,,,,,
i;i;i;i; '',',;^′..ヽ
゙ゞy、、;:..、) }
.¨.、,_,,、_,,r_,ノ′
/;:;":;.:;";i; '',',;;;_~;;;′.ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ 、}
".¨ー=v ''‐ .:v、,,、_,r_,ノ′
/;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ .、) 、}
".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
/i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、) 、}
ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
0914デフォルトの名無しさん
2012/08/21(火) 21:00:22.091. 再帰自体ワカラン
2. 再帰で探索する方法がワカラン
3. 「枝刈り」がワカラン
4. 巡回セールスマン問題を解く方法が想像できない
どの番号?
0915デフォルトの名無しさん
2012/08/21(火) 21:26:13.042番です^^巡回セールスマン問題を解くためのアルゴリズムは理解できているとおもいます。
再起でプログラムを組む方法が馬鹿なので想像できないのです;;
0916デフォルトの名無しさん
2012/08/21(火) 21:36:02.16多分どちらかと言えば「深さ優先探索」を使うんだろうね
「深さ優先探索 再帰」とかのワードでググってみたら?
0917デフォルトの名無しさん
2012/08/21(火) 21:51:36.75{
while(1)
{
行き先を探す
見つかった コンテナに行き先を入れる SAIKI(コンテナ)
見つからなかった break;
}
}
こんなんじゃねーの
0918デフォルトの名無しさん
2012/08/21(火) 21:59:57.80ありがとうございました。違いました(><)
質問が下手すぎました。すんません。
巡回セールスマン問題の厳密解を総当り法で求めるプログラムを再起呼び出し
を用いて作成せよ。っていう問題なんですが、宿題なので宿題板で質問した方が
よろしいでしょうか?お手数おかけして申し訳ございません。
0919デフォルトの名無しさん
2012/08/21(火) 22:43:40.58> ネットで結構調べたのですがダメだったので
もしかして、「再帰」じゃなくて「再起」で調べたから見つからなかったというオチじゃないよな。
0921デフォルトの名無しさん
2012/08/22(水) 10:31:54.89B
A<|>D
C
※A-B, A-C, B-C, B-D, C-Dの連結
のような道があったとして
まずA, B, C, Dから探索開始、Aからとして
「Aから(B,C)を探索」出来る、でBについて
「Bから(C,D)、既に通ったAは除外して探索」出来る、Cについて
「Cから(D)、既に通ったA,Bは除外して探索」出来る
A┬B┬C─D
│ └D─C
└C┬
そうやって再帰的に探索する
探索結果のうち距離が最小になるものを返せばいい
0922デフォルトの名無しさん
2012/08/22(水) 11:10:44.38ambで巡回する都市を列挙します
3行ぐらいで解けます
0923デフォルトの名無しさん
2012/08/22(水) 11:19:17.890924デフォルトの名無しさん
2012/08/22(水) 11:22:17.300925デフォルトの名無しさん
2012/08/22(水) 11:26:09.500926デフォルトの名無しさん
2012/08/22(水) 11:36:08.92お使いのコンパイラが対応するまで長らくお待ち下さい。
0927デフォルトの名無しさん
2012/08/22(水) 12:01:35.09Sealed() {}
Sealed(Sealed const & obj) {}
public:
static Sealed * New() { return new Sealed(); }
};
すいません自己解決しました
0928デフォルトの名無しさん
2012/08/22(水) 15:41:31.89ありがとうございます。なんとかなりそうです^^
みなさんいろいろありがとうございました。
0929デフォルトの名無しさん
2012/08/22(水) 18:55:58.500930デフォルトの名無しさん
2012/08/22(水) 20:07:44.66static Sealed Create() { return Sealed(); } も欲しいが
コピコンが空だと困るな
0931デフォルトの名無しさん
2012/08/22(水) 20:19:53.400932デフォルトの名無しさん
2012/08/22(水) 22:01:30.52それがあるなら final があるというジレンマ
0933デフォルトの名無しさん
2012/08/22(水) 23:36:49.64次何やろか
0934デフォルトの名無しさん
2012/08/22(水) 23:45:54.890935デフォルトの名無しさん
2012/08/22(水) 23:58:06.93それがC++の本質だといつから錯覚していた……?
0936デフォルトの名無しさん
2012/08/23(木) 00:01:12.45const int b[] = { 4, 1, 0, 5 };
aの中からbのどれとも一致しない位置を見つけるアルゴリズムってありますか?
上の例だと2が帰ってくるものです。
0937デフォルトの名無しさん
2012/08/23(木) 00:06:46.84int value;
#if 1
volatile Hoge& operator = (const Hoge& m) volatile { value = m.value; return *this; }
#else
volatile Hoge operator = (const Hoge& h) volatile { value = h.value; return *this; }
#endif
Hoge& operator = (const volatile Hoge& h) { value = h.value; return *this; }
Hoge(const volatile Hoge& h) { value = h.value; }
Hoge(const Hoge& h) { value = h.value; }
Hoge() : value(0) {}
};
int main() {
volatile Hoge vh;
Hoge h;
vh = h;
h = vh;
}
if 0 のときは警告無しでコンパイル出来るのですが、
if 1 のときは、以下のような警告が出ます。
tmp.cpp:18:8: 警告: implicit dereference will not access object of type ‘volatile Hoge’ in statement [デフォルトで有効]
operator= で volatile な構造体の参照を返すことはいけないことなのでしょうか。
コンパイラは g++4.6.3 です。
0938デフォルトの名無しさん
2012/08/23(木) 00:16:05.10Hoge厨失せろよ
お前きもちわりーんだよ
0939デフォルトの名無しさん
2012/08/23(木) 00:22:11.67スルーでおk。
0940937
2012/08/23(木) 00:26:39.79何でもいいのですが……
0941デフォルトの名無しさん
2012/08/23(木) 00:37:02.37int value;
#if 1
volatile oge& operator = (const oge& m) volatile { value = m.value; return *this; }
#else
volatile oge operator = (const oge& h) volatile { value = h.value; return *this; }
#endif
oge& operator = (const volatile oge& h) { value = h.value; return *this; }
oge(const volatile oge& h) { value = h.value; }
oge(const oge& h) { value = h.value; }
oge() : value(0) {}
};
int main() {
volatile oge vh;
oge h;
vh = h;
h = vh;
}
if 0 のときは警告無しでコンパイル出来るのですが、
if 1 のときは、以下のような警告が出ます。
tmp.cpp:18:8: 警告: implicit dereference will not access object of type ‘volatile oge’ in statement [デフォルトで有効]
operator= で volatile な構造体の参照を返すことはいけないことなのでしょうか。
コンパイラは g++4.6.3 です。
0942デフォルトの名無しさん
2012/08/23(木) 00:39:37.90bが大量にあるのならbをソートしておいて
aの先頭から1つ1つbを二分探索だと思われ
あるいはbをstd::setとして作っておくか
0943デフォルトの名無しさん
2012/08/23(木) 00:40:12.08HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
0944デフォルトの名無しさん
2012/08/23(木) 00:47:20.50ここは?
まともな人間だろうと普通は使わないんだけど
ちゃんと教育受けられない環境で育った人?
0945デフォルトの名無しさん
2012/08/23(木) 00:50:05.03何でもいいならhogeやめてbokuhabakadesuにしろよ
言ってることは同じだからいいだろ
0946デフォルトの名無しさん
2012/08/23(木) 00:51:19.68HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
0947937
2012/08/23(木) 00:51:24.930948デフォルトの名無しさん
2012/08/23(木) 00:53:42.270949937
2012/08/23(木) 00:58:57.02Twitterの人たちはHogeには特に何も言いませんでした。
もう二度と来ません。
0950デフォルトの名無しさん
2012/08/23(木) 01:05:17.14それを理解できずに荒らし認定しかできない思考停止してる>>948が
不憫すぎてwwwwwwwwwwwwwwwwwww
0952デフォルトの名無しさん
2012/08/23(木) 01:23:39.64世界が平和なのも、
我々が健康でいられるのも、
空が落ちてこないのも、
全てが均衡のなせる事象でありこれをhogeとすることによって
我々は初めて認識できるのであり
この場合はhogeが世界の均衡と我々の理解との仲介をするための
いわゆる媒介と考えることもできる。
つまりhogeなくしては我々は世界とのつながりを維持できないのである。
よってhogeを否定することは反社会的かつ悪質極まりない行為であり、
法的制裁をとるべく政府には動いてもらいたい。
結構本気で。
0954デフォルトの名無しさん
2012/08/23(木) 01:54:27.11このスレにはHogeが嫌いな輩がやけにいるんだよ……
せめてpiyoとかにしておけ
0955デフォルトの名無しさん
2012/08/23(木) 08:04:57.240956デフォルトの名無しさん
2012/08/23(木) 08:10:53.680957デフォルトの名無しさん
2012/08/23(木) 08:33:04.140958デフォルトの名無しさん
2012/08/23(木) 09:41:55.950959デフォルトの名無しさん
2012/08/23(木) 10:31:47.14ttp://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/C_002b_002b-Volatiles.html#C_002b_002b-Volatiles
gccではvolatileオブジェクトの参照の扱いと参照でないvolatileオブジェクトの扱いは等価ではないという話
0960デフォルトの名無しさん
2012/08/23(木) 12:22:58.70http://ideone.com/VXwQs
↑これの16,17行目と同じことを高速にやる方法は用意されてますか?
std::set は内部実装が平衡二分木のはずなので O(log n) 時間でできるはずですけど
上の実装だと O((e-b) × log n) 時間になってます
0961デフォルトの名無しさん
2012/08/23(木) 13:53:15.55読んでないけどさ、eとかbとかってnの関数なの?
でなきゃ(e-b)が定数になって結局O(log n)時間ってことになるが
0962デフォルトの名無しさん
2012/08/23(木) 14:00:30.31まず基本を誤解してない?
要素一つの追加に掛かる時間が O(log n) でもx個の複数の要素を追加するなら掛かる時間はおおよそ O(x * log n) になる
それはさておき
標準C++の規格ではsetのイテレータ範囲[i,j)からの構築のときに掛かる時間は
・一般的に O(N * log N)。(Nはi,j間の距離)
・ただし[i,j)がソート済み範囲なら O(N)
と規定されている
もしソート済み範囲なのに線形時間で処理されないというなら
set<int> newset;
for (set<int>::iterator i = b; i != e; ++i) newset.insert(newset.end(), *i);
0963デフォルトの名無しさん
2012/08/23(木) 15:28:03.96やりたいことをきちんと文で書かなかったのがいけないのですが、
「setのある区間 [b, e) を切り取って新しい set を作る」
が、やりたいことです。
これは x = e-b を区間長とすると O( log n + log x ) でできますが(木の再バランスの時間)、
上の実装だと O( x ) かかっているので、O( log n + log x ) でやる方法が欲しい、ということでした。
#O(x log n) と思っていましたが、この点は誤解でした。指摘ありがとうございます。
0964デフォルトの名無しさん
2012/08/23(木) 16:04:27.570965デフォルトの名無しさん
2012/08/23(木) 18:55:06.89規格ではsetの内部実装を(直接には)規定していないので木構造で実装されてる保証はない。
だから木構造を前提の話をされても(規格に合致した形での)望む答えはでてこないぞ。
0966デフォルトの名無しさん
2012/08/23(木) 19:14:13.45新規に構築してる時点でO( log n + log x )は有り得ない
copyでなくmoveしてeraceしたり、範囲フィルタのラッパーを被せるのでも無い限り
0967デフォルトの名無しさん
2012/08/23(木) 19:50:19.40>>963で「切り取り」と言っているのが、その点のつもりです
ニ分探索木ならば、親へのリンクを切って再バランスで可能です
再バランスが全体で O(log n) で済むことは、証明を要します
>>965
なので、元々の>>960での質問が「やる方法は用意されてますか?」でした
二分探索木から一部分を切り取る操作は頻繁に現れる操作だと思っているので
STLの範囲でそういった操作が用意されていれば、と思ったのですが・・・
0968デフォルトの名無しさん
2012/08/23(木) 20:10:23.05boostには一応 rbtree コンテナがあって
範囲の削除(erase)が O(log n)で動く
削除された要素のデストラクタを呼ばないから可能な計算量だな
切り取りに該当するのは見当たらんかったが
こんだけアクセサがありゃ自分で書いても数行で済む
0969デフォルトの名無しさん
2012/08/23(木) 22:55:39.260970デフォルトの名無しさん
2012/08/23(木) 23:50:12.24失せろやks
0971デフォルトの名無しさん
2012/08/23(木) 23:58:22.62簡素さが利点だな
ま、R・セジウィックの本でも読んでみれ
0972デフォルトの名無しさん
2012/08/24(金) 00:24:41.64class X {
public:
virtual void f() {}
};
int main()
{
X x;
X* p = &x;
x.f(); // (1)
p->f(); // (2)
(&x)->f(); // (3)
return 0;
}
コンパイラが生成したアセンブリコードを調べてみると、
(2)は仮想関数テーブル経由の間接的な関数呼び出しになり、
(1),(3)は直接の関数呼び出しになってました。
(3)は(2)と同様にポインタ経由の呼び出しだから仮想関数テーブルが
利用されるはずだと予想していたのですが、実験結果は違いました。
(2)と(3)で生成されるコードが異なるというのは腑に落ちません。
これって言語仕様的に正しいですか?
どのコンパイラでもそうなるんでしょうか?
0973デフォルトの名無しさん
2012/08/24(金) 00:30:54.72効率よくてカスタム頂点カスタム辺に差し替えもしやすいように書くとなると結構難しい
0974デフォルトの名無しさん
2012/08/24(金) 00:40:33.850975デフォルトの名無しさん
2012/08/24(金) 00:47:54.700976デフォルトの名無しさん
2012/08/24(金) 00:52:45.59仕様的に問題ないしどの環境でもそうなるとは限らないが
君のレベルではまだそんなことは気にしなくてよろしい
0977972
2012/08/24(金) 01:02:46.69同じだから効率的になるように直接呼出しのコードを生成してくれる
ということですね。きっと。
0978デフォルトの名無しさん
2012/08/24(金) 01:10:18.41そういう意味では (2) を直接呼出しで済ませる実装も存在しうる。
でもそこが大きな違いになることは少ないので、やっぱり気にしなくてよろしい。
0979972
2012/08/24(金) 01:19:45.030980デフォルトの名無しさん
2012/08/24(金) 01:51:58.01テキストファイルの"="を区切り文字として値を読み込みたいのですが、質問させてください。
例えばテキストファイルを一行目から順に読み込んでいって
Parameter=50
ってあったら、Parameterっていうint型変数が予め用意されてるので50という値を入れたいのですが
ifstream::getlineという関数で'='を区切り文字として指定した場合
"Parameter"だけ読み込んでくれそうなのはわかるのですが
二度目のgetlineで=50を読み込むのか、50と読みこんでくれるのか、二行目に飛ぶのか
誰か教えてください。
0981デフォルトの名無しさん
2012/08/24(金) 03:13:28.89こっちは解決したのかね
0982デフォルトの名無しさん
2012/08/24(金) 08:03:44.730983デフォルトの名無しさん
2012/08/24(金) 08:24:52.30GetPrivateProfileInt使えよ
0984デフォルトの名無しさん
2012/08/24(金) 11:16:14.88リナクサー臭がするな
0985デフォルトの名無しさん
2012/08/24(金) 12:02:29.82一度にまとめてやろうとしてよくわからなくなったなら素直に複数の処理に分割しなさい
1 一行分文字列を読み込む
2 読み込んだ文字列の中で=を探す
0986デフォルトの名無しさん
2012/08/24(金) 12:21:24.18ありがとうございました
0987デフォルトの名無しさん
2012/08/24(金) 13:43:24.350988デフォルトの名無しさん
2012/08/24(金) 15:42:46.92/^(.*?)=(.*?)$/
0989デフォルトの名無しさん
2012/08/24(金) 15:53:49.800990デフォルトの名無しさん
2012/08/24(金) 16:46:54.11手作業で再帰下降構文解析器を書くべきだな。
ちなみに字句解析器はトークンが一文字だから使う必要ない。
0991デフォルトの名無しさん
2012/08/24(金) 22:54:18.35おっぱいも或意味性器だな
0992デフォルトの名無しさん
2012/08/25(土) 00:38:17.340993デフォルトの名無しさん
2012/08/25(土) 00:59:47.47C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
0994デフォルトの名無しさん
2012/08/25(土) 01:22:35.42乙
0995デフォルトの名無しさん
2012/08/25(土) 07:32:52.81えっ
>980は
istream& std::getline ( istream& is, string& str, char delim ); か、
istream& std::istream::getline ( istream& is, string& str, char delim );
(第三引数に注意)の仕様を問うひつもんじゃなかったのか…
0996995
2012/08/25(土) 07:37:47.67std::istream& std::istream::getline(char* s, streamsize n, char delim );
(第三引数に注意)じゃないのか、に訂正
0997デフォルトの名無しさん
2012/08/25(土) 10:05:10.08おつうめ
スレ立て確認した。超乙
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。