C++相談室 part76
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/12/16(水) 23:09:53ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part75
http://pc12.2ch.net/test/read.cgi/tech/1259393258/
0153デフォルトの名無しさん
2009/12/24(木) 21:04:34名前空間に対するusingの話をしているのに何いきなりusing std::swap;とか引き合いに出しちゃってるの?w
文脈が分からないレベルなら日本語を勉強しましょうねw
0154デフォルトの名無しさん
2009/12/24(木) 21:06:25using ::swap;
}
0155デフォルトの名無しさん
2009/12/24(木) 21:09:34普通に考えて質問者は、わからなくて質問してるんだから
ムキにならなくてもいいと思うよ
0156デフォルトの名無しさん
2009/12/24(木) 21:11:37詳しくないって分かるなら教えてあげれば良いのに人の揚げ足取ってばかりで現実でも人望なさそう。
0157デフォルトの名無しさん
2009/12/24(木) 21:12:120158デフォルトの名無しさん
2009/12/24(木) 21:18:52ということはグローバル空間そのものを否定するか?
初心者が書くコードにいきなりクラスメソッドが出てくるアレなら設計ミスがなかったとでも?
0159デフォルトの名無しさん
2009/12/24(木) 21:41:42/ ヽ
>>152 ,/ ヽ
. ∧_∧ ,/ ヽ
( ´∀`) ,/ ヽ
( つ@ ヽ
.__ | | | ヽ
|――| (__)_) ヽ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ヽ
/⌒\/⌒\/⌒\/⌒\|彡~゚ ゜~ ~。゜ ~ ~ ~ ~~ ~ ~~ ~ ~~ ~~ ~~
⌒\/⌒\/⌒\/⌒\/⌒\彡 〜 〜〜 〜〜 〜〜 〜 〜
│
│
│
人人人人人人人 ∧J∧
< > ( / ⌒ヽ
< 吊られちゃった > | | | >>○
< > ∪ / ノ
∨∨∨∨∨∨∨ | ||
∪∪ >>153
0161デフォルトの名無しさん
2009/12/24(木) 22:01:03おk。
>>152も、
> > そこら辺を考えて設計してるでしょ(知らないけど)
> はい?何を言っているのだ?
このやりとりを
> > そこら辺を考えて設計してるでしょ(知らないけど)
> いいえ、名前が衝突することは標準のstd名前空間といえども
> 特別な対応策がなされているわけではありません。
と解釈するなら信じておk。
0163デフォルトの名無しさん
2009/12/24(木) 22:56:52このAA初めて見たわ
0164デフォルトの名無しさん
2009/12/24(木) 23:53:140165デフォルトの名無しさん
2009/12/24(木) 23:56:40返り値などの一時オブジェクトの場合にそれを実現する方法はありますか?
感覚的には↓のようなことがしたいです
http://codepad.org/dhFsqyT1
スマポを使えば可能なんですが、動的確保はコストが気になるので避けたいです
0166デフォルトの名無しさん
2009/12/25(金) 00:27:58本当に動的確保のコストが問題になるレベルなのか検討してみるのもいいかもね。
0167デフォルトの名無しさん
2009/12/25(金) 00:44:55逆にそれを隠蔽しようというのだから、どうやっても動的確保するしかないと思う。
0168デフォルトの名無しさん
2009/12/25(金) 11:49:00JavaScript は jquery.js や prototype.js などのライブラリ
などを言語学習には読んでトレースして改造すると
自分にとってすんなり覚えられたのですが、
C++ の場合はどういうものが挙げられますでしょうか?教えやがってください。
0169デフォルトの名無しさん
2009/12/25(金) 12:08:52dynamic_castとかは便利そうなので、使っている人が多そうですけど
0170デフォルトの名無しさん
2009/12/25(金) 12:14:590171デフォルトの名無しさん
2009/12/25(金) 12:16:39使わなくても良いように設計できるならそうする
APIやライブラリのせいで使わなくてはいけない状況なら使うが
使わなければいけないように設計することは避けたい
0172デフォルトの名無しさん
2009/12/25(金) 12:59:12Boost
0173デフォルトの名無しさん
2009/12/25(金) 13:13:230174デフォルトの名無しさん
2009/12/25(金) 13:25:36インスタンスの本来の型が分かっている場合のダウンキャストとか
0175デフォルトの名無しさん
2009/12/25(金) 13:29:060176デフォルトの名無しさん
2009/12/25(金) 16:07:460177デフォルトの名無しさん
2009/12/25(金) 16:46:200178デフォルトの名無しさん
2009/12/25(金) 16:56:59Perlの埋め込みはまた別なのですね
0179デフォルトの名無しさん
2009/12/25(金) 18:06:09多重継承したクラスを扱うときは気を付けろよ
0180デフォルトの名無しさん
2009/12/25(金) 18:31:40どうすればいいでやんす?
0181デフォルトの名無しさん
2009/12/25(金) 18:33:210182デフォルトの名無しさん
2009/12/25(金) 18:37:220183デフォルトの名無しさん
2009/12/25(金) 18:55:16サンキューでござる
くわしくしらべてみるでおじゃるまる
0184デフォルトの名無しさん
2009/12/25(金) 20:53:27dynamic_castよりstatic_castを使う。
理由はstatic_castの方がが速いから。
0185デフォルトの名無しさん
2009/12/25(金) 20:55:02コンパイルタイムにキャストを解決できる時にstatic_castを、動的型付けなオブジェクトに対するキャストではdynamic_castだろうが。
0186デフォルトの名無しさん
2009/12/25(金) 21:11:13dynamic_castなんて使ってないよ。
大して便利じゃないというか使わなきゃならない状況にならない。
static_castと比較するもなにも、そもそも用途がぜーんぜん違う。
0187デフォルトの名無しさん
2009/12/25(金) 21:44:150188デフォルトの名無しさん
2009/12/25(金) 23:20:050189デフォルトの名無しさん
2009/12/26(土) 00:39:49そういうときはboost::polymorphic_downcastがおすすめ。
>>187
zlibでも使え。
0190デフォルトの名無しさん
2009/12/26(土) 08:35:51inline To dream_cast(const From &from) { return (To)from; }
0191デフォルトの名無しさん
2009/12/26(土) 09:14:55わかっちゃうと効率的ですげーなと思うけど
0192デフォルトの名無しさん
2009/12/26(土) 11:22:22ありがとう。これでやってみます
0193デフォルトの名無しさん
2009/12/26(土) 11:49:56動的に確保した配列にdelete[]を実行すると、しっかりと配列は解放されますよね?
メモリのどこかに配列の長さが格納されていると踏んだのですが…
一体どこに格納されているのでしょうか?
それとも格納はされていないのですか?
0194デフォルトの名無しさん
2009/12/26(土) 11:57:480195193
2009/12/26(土) 12:00:020196デフォルトの名無しさん
2009/12/26(土) 12:40:03型によっては必要ないので、どこにも格納されてないこともある。
格納されていたとしても、ユーザーがそれを取り出す手段はない。
配列 new/delete なんか使わずに std::vector 使うのがおすすめ。
要素数もちゃんとある。
0197デフォルトの名無しさん
2009/12/26(土) 12:47:39まず、
クラスのカプセル化という概念を知っているか?
インターフェースだけ理解させてそのクラスの内部の実装は
ブラックボックスにして触れなくて良いようにし、
また触れることを禁じていること。
> メモリのどこかに配列の長さが格納されていると踏んだのですが…
君と同じ発想でコンパイラの作者が作っていればそうなる。
だが上述のクラスのカプセル化と似たように、
どこに長さが格納されて居るだとかそう言った実装については
触れないし触れてはならないことなのだ。
0198デフォルトの名無しさん
2009/12/26(土) 13:06:05早くC++0xこないかな
0199デフォルトの名無しさん
2009/12/26(土) 13:13:35それでも配列 new よりはマシだろ。
0200デフォルトの名無しさん
2009/12/26(土) 13:18:110201デフォルトの名無しさん
2009/12/26(土) 13:23:440202デフォルトの名無しさん
2009/12/26(土) 14:03:450203デフォルトの名無しさん
2009/12/26(土) 14:52:470204デフォルトの名無しさん
2009/12/26(土) 14:57:14libcurlお勧め
0205デフォルトの名無しさん
2009/12/26(土) 14:58:12気になるならドキュメント読めよw
0206デフォルトの名無しさん
2009/12/26(土) 15:04:26たまに猛烈に時間がかかるけどたまにだから平均したらO(1)っていうやつ
0207デフォルトの名無しさん
2009/12/26(土) 15:05:23それは末尾追加( push_back() )の計算時間な。
アクセスはランダムアクセス可能で O(1) だよ。
0208デフォルトの名無しさん
2009/12/26(土) 15:10:03ドキュメントを読んで!ライフが0よ。
0209デフォルトの名無しさん
2009/12/26(土) 15:16:480210デフォルトの名無しさん
2009/12/26(土) 15:17:50処理速度向上のため初期サイズを予め決めておくことはできますでしょうか。
0211デフォルトの名無しさん
2009/12/26(土) 15:18:550212デフォルトの名無しさん
2009/12/26(土) 15:19:15どっかに「このドキュメントでは計算量と言えば全部amortizedのことですよー」って書いてなかったっけ
0213デフォルトの名無しさん
2009/12/26(土) 15:29:05std::map に push_back() はありません。 insert() のことでしょうか?
メモリ確保のために必要な時間が(ほんとうに)問題だということなら、
operator new (およびその下層)の置き換えやカスタム Allocator の指定が
使えるかもしれません。
0214デフォルトの名無しさん
2009/12/26(土) 15:30:25そのドキュメントにそう書いてあったとしても、標準規格に書いてないなら関係ないね。
0215デフォルトの名無しさん
2009/12/26(土) 15:30:45すいませんinsertの間違いでした。
vectorのreserveに相当する関数はないのでしょうか。
0216デフォルトの名無しさん
2009/12/26(土) 15:31:47無いよ。必要無いだろうし。
0217デフォルトの名無しさん
2009/12/26(土) 19:30:09マクロって奴はパラーメタ必須ってイメージがありますが、そういうわけじゃないんですかね?
そして、マクロから普通のコードを読み込めましたよね?
0218デフォルトの名無しさん
2009/12/26(土) 19:33:420219デフォルトの名無しさん
2009/12/26(土) 19:45:39> マクロって奴はパラーメタ必須ってイメージがありますが
そんなイメージねぇよww
パラーメタ・・・は まあ おいとく として、どこの言語から来た人?
C系列じゃないよね?
> そして、マクロから普通のコードを読み込めましたよね?
このスレにエスパーはいらっしゃいませんか?
0220デフォルトの名無しさん
2009/12/26(土) 19:46:540221デフォルトの名無しさん
2009/12/26(土) 19:48:310222デフォルトの名無しさん
2009/12/26(土) 19:49:09もうこれ以上スプーン曲げないでくれ。
分かったら帰ってくれ。
0223デフォルトの名無しさん
2009/12/26(土) 19:52:54残念だがそれは普通の能力だ
0224217
2009/12/26(土) 19:55:30javaから来た人間です
C言語はあんまりわかりません
>マクロから普通のコードを読み込めましたよね?
IOCCCの作品に1文字しか書いていないプログラムがあったような〜
0225デフォルトの名無しさん
2009/12/26(土) 20:06:09唯一わかるのは、マクロについて根本的な何かを勘違いしているんだろうな、ということで。
0226デフォルトの名無しさん
2009/12/26(土) 20:12:22だとしても意味はわからない
0227デフォルトの名無しさん
2009/12/26(土) 20:17:56std::cout << "hoge";
みたいに、ストリームをフラッシュしないで終了しているコードがあるわけですが
大丈夫なんですかね?
0228デフォルトの名無しさん
2009/12/26(土) 20:19:08うん。
彼の言うマクロが#includeだとすると、確かに3行目は成立するが、
今度は1行目と2行目がつながらなくなる。
頼む、もうちょっと日本語でおk
0229デフォルトの名無しさん
2009/12/26(土) 20:21:10マクロアセンブラなんかだと簡単な計算もできるのが多いけど、
Cプリプロセッサはそこまでじゃないよね。
0230デフォルトの名無しさん
2009/12/26(土) 20:31:07大丈夫だよ。
でも気持ち悪いよね。
0231デフォルトの名無しさん
2009/12/26(土) 20:32:49> マクロアセンブラなんかだと簡単な計算もできるのが多いけど、
> Cプリプロセッサはそこまでじゃないよね。
何十年前の話をしているのだい?
そもそもプリプロセス処理というものは…(ryめんどくさ
0233デフォルトの名無しさん
2009/12/26(土) 20:37:02プログラム終了時に閉じられるから問題ない。
0234デフォルトの名無しさん
2009/12/26(土) 20:42:21「文字列をあるルールに従って置換する」だけのプリプロセッサで、
簡単な計算もできるようにしてしまうクレイジーなやつが世の中いるものだ。
http://d.hatena.ne.jp/qnighy/20091107/1257587259
http://d.hatena.ne.jp/DigitalGhost/20090624/1245829833
0235デフォルトの名無しさん
2009/12/26(土) 20:45:12プリプロセッサメタプログラミングだぜ?
本当にやりやがった・・・的な衝撃が走る。
0236デフォルトの名無しさん
2009/12/26(土) 20:46:17学習しなくなるから使わないほうがいいよ
0237デフォルトの名無しさん
2009/12/26(土) 20:50:23それは違うな
使わなければ学習していくとは限らない
むしろ、使わない方法で満足する場合、それ以上の学習をしなくなる可能性もある。
つまり楽になることと学習しなくなることに強い因果関係はない
0238デフォルトの名無しさん
2009/12/26(土) 20:53:060240デフォルトの名無しさん
2009/12/26(土) 20:57:13君は全部アセンブラでコードを書くのですか?
0241デフォルトの名無しさん
2009/12/27(日) 11:41:58virtualがついたメンバも実装をしている場合があるので
0242デフォルトの名無しさん
2009/12/27(日) 11:44:17virtual がついていればオーバーライド可能になります。
virtual に加えて = 0 がついていれば、オーバーライドが必須(抽象メソッド?)になります。
0243デフォルトの名無しさん
2009/12/27(日) 11:52:40抽象メソッドという用語が存在しないので、
君が「抽象メソッド」という言葉にどういった意味を
求めているのか分からん。
> virtualがついたメンバも実装をしている場合があるので
初心者にはロベールのC++教室がオススメ。
例えば
ロベールのC++教室 - 第14章 仮想関数 -
ttp://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02014.html
とか。
0244243
2009/12/27(日) 11:53:57> virtual がついていればオーバーライド可能になります。
(まあ初心者向けに教えるならそれでも良いかもしれないが)
別にvirtual付いて無くても、オーバーライド可能か不可能かと言えば
一応可能だよな。デザインとして良いかどうかはともかく。
0245デフォルトの名無しさん
2009/12/27(日) 11:54:30abstract methodだろ?
0246デフォルトの名無しさん
2009/12/27(日) 11:57:550248デフォルトの名無しさん
2009/12/27(日) 12:05:41どうやってやるの?
0249デフォルトの名無しさん
2009/12/27(日) 12:08:290250243
2009/12/27(日) 12:28:07親クラスのメンバ関数をオーバーライドする・・・って話だよな?
どうやってもなにも、普通にできるじゃん。
(俺の > オーバーライド可能か不可能かと言えば一応可能)
ただし親クラスのポインタから呼び出したときに
子クラスのメンバ関数は呼び出されないが。
(俺の> デザインとして良いかどうかはともかく。)
>>249
していないよ。
0251デフォルトの名無しさん
2009/12/27(日) 12:31:26「override」って言葉の意味分からないなら語るな。
0252デフォルトの名無しさん
2009/12/27(日) 12:32:50>ただし親クラスのポインタから呼び出したときに
>子クラスのメンバ関数は呼び出されないが。
それってオーバーライドしてないじゃん
■ このスレッドは過去ログ倉庫に格納されています