- 1 名前:デフォルトの名無しさん [2009/07/18(土) 02:54:58 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part70 pc12.2ch.net/test/read.cgi/tech/1244942050/l50
- 797 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 17:41:03 ]
- >>796
Boost File Vault Boostライブラリには入っていないけれど、その叩き台としたい、 というようなソースが転がっています。宝の山。^^ ってk.inaba氏が言ってた。
- 798 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 18:39:58 ]
- valarrayを捨てる手もありそうだが
- 799 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 19:07:21 ]
- >>790
valarray<T> y = x.apply(functor);としたいとして、 代わりにこれで我慢するのはだめ? valarray<T> y(x.size()); std::transform(&x[0], &x[0] + x.size(), &y[0], functor); valarrayも要素が連続している保証があるからこんなことして平気なはず。
- 800 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 20:45:54 ]
- void関数ではその処理を終えて外のスコープに処理を戻したい場合は
return; を記述しても良いということでしたが、 コンストラクタでも同様にreturn;を記述しても 良いのでしょうか? 記述した際にはそれより後ろにある処理は実行されないと期待してよろしいですか? g++ではこの通りの動作でしたが、これがC++の仕様なのでしょうか。
- 801 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 22:20:28 ]
- >800
大丈夫です. 蛇足ながら対応するであろう規格の文言は (6.6.3/2), (12.1/12)
- 802 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 23:33:21 ]
- 795があぼんなんだがまたfaith and braveでも貼ったのか?
いい加減にしろ。
- 803 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 02:10:07 ]
- あぼんしてるなら触れるなよ
アホなのか?
- 804 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 04:28:47 ]
- 何のためのあぼーんなんだよなw
- 805 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 06:56:27 ]
- 何でFaith and Braveを貼っちゃいけないんですか?
- 806 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 06:59:04 ]
- あぼーんであれスルーであれ、「お前の言葉は俺に効いてない」とアピールしたいあまり、
それを自分から言い出して、効いてるのがバレバレになる奴はたまに見かける。 たぶん居留守を使う時なんかも、居ないとアピールしたい一心で ドアの向こうの人に「いま居ません」とか言っちゃうんだろう。
- 807 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 07:03:18 ]
- 「レス番飛んでるんだけど、何きたの? ねぇ、何きたの?」
「お前、NGに入れたから」 「あ、そう。でさぁ(ry」 「NGに入れたっつってんだろぉぉぉぉぉ!」
- 808 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 07:21:54 ]
- 言葉にしない間しか成立しない主張を、言葉にすることで殺しちゃうんだよな。
「誰もお前にレスする奴なんかいねえよ」とか。 自分の言葉で直接相手を悔しがらせたい衝動、みたいなもんが低脳にはあって、 それに勝てずに自爆してしまうんだろうか。
- 809 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 10:43:00 ]
- あ…あんたのことなんて、何とも思ってないんだからねっ!
ってパターンも。
- 810 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 12:23:02 ]
- あるあるwww
- 811 名前:デフォルトの名無しさん [2009/08/24(月) 17:06:45 ]
- すみません.レス遅れました.
>>797 自分で適当にソースを改竄すればいいってことですね. >>798 valarray<bool> って嬉しくないですか? (vector<bool>のかわりに・・・) >>799 コピーコストに目をつぶって,これでいこうと思います. >>802-6 まったく議論が理解できないのですが,気分を害したのならすみません. c_function って検索してもあまり出てこなかったので便利かと思って リンク貼りました.他意はありません. 正直,あまり回答には期待していなかったのですが, 色々アイディアをもらえて感激しています.ありがとうございました.
- 812 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:22:59 ]
- > 正直,あまり回答には期待していなかったのですが,
> 色々アイディアをもらえて感激しています.ありがとうございました. この一言はどうして書いちゃったんだ。 「お前らには大して期待してなかったけど いないよりは役に立ったな」 って意味にしかとれないんだけど。 実生活でこれいったらもう目も当てられない ようなことになるぞ。
- 813 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:24:35 ]
- それはお前の読解力がおかしいんじゃないのか
- 814 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:27:44 ]
- >>813
いやおかしくないだろ。 別に悪意を持って読んだわけじゃないけど、 そう思った人は俺以外にもいるだろ。
- 815 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:35:51 ]
- >>813
お前の読解力だと > あまり回答には期待していなかった これは「誰の回答に期待してなかった」んだと思う?
- 816 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:44:25 ]
- 書き方が悪いのは確かだな。
あまり反応してもらえるとは思わなかったが、と書くべき所。
- 817 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:48:21 ]
- > あまり回答が付くことは期待していなかった
ならいいけど、 > あまり回答には期待していなかった=ろくな回答は無いと思っていた と取られるとね。 まあ2chだから当然な予測かもしれないけど、 わざわざ書かなくても良かったかもね。 でもそこは噛みつく程でもない気がするが。
- 818 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 22:37:42 ]
- むしろ>>812みたいなことをいちいち言っちゃう人のほうが
実社会では目も当てられない。 最近キレる人が増えたのは、 無礼な人が増えたよりも 他人の無礼をまったく許容できない赤ん坊のような糞人間が増えたからだって どっかの新聞に書かれてたなぁ。
- 819 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 00:07:27 ]
- で?
- 820 名前:デフォルトの名無しさん [2009/08/25(火) 01:29:40 ]
- 平謝りです.ごめんなさい.
> 実生活でこれいったらもう目も当てられない この通りですね,弁解の余地はありません. 人によって2ちゃんねるとの付き合い方は違うのに, それを無視した迂闊な発言でした. 感謝を伝えたかったのに・・・(涙)
- 821 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 01:56:50 ]
- >人によって2ちゃんねるとの付き合い方は違うのに,
>それを無視した迂闊な発言でした. 別にダメじゃないが何というか、一言多いよね。 再帰的に迂闊。
- 822 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 02:27:13 ]
- 再帰的わろたうぇw
- 823 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 03:22:47 ]
- 要するに、回答内容に期待してなかったんじゃなくて、回答されることを期待して
なかったんだろ?
- 824 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 07:31:11 ]
- >>821
そこ、俺も同じこと思った。 「俺の2chとの付き合い方を、迂闊どころか当然の顔をして無視し、踏みにじるお前ら」 って言いたいのかなと。 ある要素xを、自分より相手のほうがより強く持っていると判断した時に、 「xを持つことは悪いこと」という概念を大仰に押し立てて「xを持っててすみません」と平身低頭、 実はそういう皮肉攻撃、っていうデザインパターン。
- 825 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 08:01:05 ]
- べつにいいんじゃね
- 826 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 08:23:48 ]
- ぶっちゃけ何をそこまで絡んでるのか分からん
- 827 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 08:55:56 ]
- 世の中うぜえ奴ばっか
- 828 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 08:57:50 ]
- ケンカ売る気なら最初から本気でかかってこいや
この偽善者め とまあ、そんなことではないかと
- 829 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:43:38 ]
- 普通の
#ifndef HOGE #define HOGE 本文 #endif というインクルードガードがあるにも関わらず、 同時に 「コンパイラの種類がVCであるか、 もしそうならVCのバージョンを調べて #pragma once」 としているものがあるのですが これは意味があるのでしょうか? どうして前者のインクルードガードだけでは不足なのでしょうか?
- 830 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:59:10 ]
- >>829
微妙。 pc12.2ch.net/test/read.cgi/tech/1186262298/316 316 :306:2009/02/14(土) 04:46:01 >>313 マクロによるインクルードガードでは2回目もファイルを開いて少なくともインクルードガードを 読む必要がある。 #pragma once なら2回目以降ファイルを開かずにスキップするような実装が 考えられる。 そのため、インクルードガードを置いて移植性を持たせつつ、特定のコンパイラでの コンパイル時間を短縮する目的で #pragma once を置くことが考えられる。 en.wikipedia.org/wiki/Pragma_once
- 831 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:04:55 ]
- >>830
なるほど、 昔の冗長インクルードガードと同じですか。 ありがとうございます。
- 832 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:19:17 ]
- 尚、pragma onceの使える環境であればインクルードガードを省略できると言う考えは間違いである。
- 833 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:28:03 ]
- え?
#pragma once を使える環境でインクルードガード書かないと何かマズイの?
- 834 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:31:28 ]
- シンボリックリンクとかの関係でファイルの同一性がどうのこうのって問題?
- 835 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:35:23 ]
- そりゃ昔のバギーな実装の問題だろ。
- 836 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:58:05 ]
- 滅多なことでは問題にならんからなぁ。 gcc3.4で解決されたって話もあるし。
それにVCとgccとで使えるから、ふつーのひとはもう何も考えずに#pragma onceしちゃっていいんじゃないかなぁ。
- 837 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:32:29 ]
- 同じ内容の別のファイルをインクルードするときにバッティングが発生するのを防止することができない。
インクルードガードなら、それができる。その点を無視していいのなら、prgama onceで充分。
- 838 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:48:41 ]
- #pragma onceの問題点は非標準であるという一点に尽きる。
一々各コンパイラが対応しているかを調べるのは面倒。 ちなみに、上で#pragma onceの時のみに最適化される可能性があると書いてあるが GCCではインクルードガードを使った場合に同様の最適化が効く。
- 839 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 14:43:19 ]
- VC++2005なんだがDLLを配布したいんだけど
libとh同封しとけばVC6とかVC++2008とかの人でも使えるんかな?
- 840 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 14:52:59 ]
- VC8で#pragma onceの効果があるかどうか調べたけど効果はあったよ
- 841 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 17:14:58 ]
- 毎回インクルードガード書くより#pragma onceに対応してるか調べた方が結局楽、と
いう考えもある インクルードガードなら枯れてるから安心して使える、という考えもある インクルードガードは記述時にヒューマンエラーが起きやすいから嫌だ、という考えも ある #pragma onceはコードではなくファイルに依存するので、シンボリックリンクなどで 別のパスからインクルードされた時の問題などがあって嫌だ、という考えもある まぁ色々それぞれだな #pragma onceにユニークな識別名を付けられるようなのが最初からあれば最強だった んだろうが ちなみに#pragma onceは対応している処理系は結構多い
- 842 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 17:31:40 ]
- 出来るだけ多くの環境でも使えるようにしたいもののヘッダは
インクルードガードをかけるしかない。 たとえ#pragma once の利点を十分承知し、対応する処理系が増えているとしても。 そして、その利点を生かすためには、#ifdefで切り分けて#pragma onceも併用するという 一見アホらしいコードを書くしかない。 例えば、MSのWin32処理系では、全て#pragma onceが使用可能だが PSDK等のヘッダファイルは、他の処理系でも利用可能にするために インクルードガードも併用されている。
- 843 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:18:21 ]
- 仮にビルドが通らない処理系があったとして、
それがpragma onceのせいってのは、ありえないと思うけどな。 それ以前のクリティカルな要因で止まるだろ常考。
- 844 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:10:39 ]
- インクルードガードと#pragma onceが両方とも有効な状態って問題ある?
- 845 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:26:39 ]
- インクルードガードはインクルードを読み込む順番が固定できるから、循環参照を防げるメリットがあるね。
- 846 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:27:08 ]
- インクルードガードを矛、#pragma onceを盾だとして、
両方有効な状態だと、両手が砕けて紫龍が負ける そんぐらいです。
- 847 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:31:11 ]
- 別に両方書いても、片方が仕事してもう片方が潰されるだけのこと
ライブラリ屋は「VC++なら#pragma onceが先に掛かるようにした方が軽いな」とか 有効な順番を意識するが、別にしなくてもコンパイルが僅かに遅いとかその程度
- 848 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:35:54 ]
- >>844
問題ない。実際Boostの一部のヘッダではVCの場合に併用している。 >>842によるとWin32 APIのヘッダでも同様のことをやってるようだし。
- 849 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:42:13 ]
- 仕様として #include と書けば何度でもファイルを開いて展開するんだろうけど
その仕様が役に立つことってあるの?
- 850 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:50:48 ]
- >>849 assert.h を #define NDEBUG して #include したり #under NDEBUG して #include したり。
- 851 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:51:29 ]
- Boost.Preprocessorを使った再帰#includeでVariadic Template
みたいなことをするテクニックとか…
- 852 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:01:04 ]
- #ifndef HOGE_H
#define HOGE_H #if defined(_MSC_VER) && defined(__GNUC__) && ... #pragma once #endif 本文 #endif 結局こうするのがベストなのか めんどくせーな
- 853 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:04:36 ]
- >>852
それじゃどんなコンパイラでも#pragma onceが使われないぞw
- 854 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:17:23 ]
- いや、
VC++でコンパイルする時に -D__GNUC__ -D__BORLANDC__ をオプションにつける GCCでコンパイルする時に -D_MSC_VER -D__BORLANDC__ をオプションにつける という技を駆使しろ、という>>852のお告げ。
- 855 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:30:44 ]
- >>852
#if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif これだけでいい。併用は単にコンパイル時間の高速化の意味しか無いから、違いの出る VC++だけ書けば十分。 >>853 この書き方でちゃんと使われる。 ちなみに>>847は半分間違い。>>852で両方とも有効に働く。
- 856 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:31:13 ]
- 凄いな神の技だ・・
- 857 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:38:44 ]
- >>855
> この書き方でちゃんと使われる。 アホ? &&の意味も分からないのか?
- 858 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:43:12 ]
- >>855
使われねぇよw
- 859 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 05:24:50 ]
- >>855
#pragma once は、VC++4.2(_MSC_VER=1020)からサポートされたと考えていい?
- 860 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 05:47:27 ]
- 1000にしてるライブラリもある
1020にしてるライブラリもある
- 861 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 21:36:23 ]
- STL でつまづいています。
codepad.org/KNe3UsXV lst1.merge(lst2) でマージだけでなくソートされてしまうのはどうしてでしょうか?
- 862 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 21:41:10 ]
- なぜならmergeというのはマージソートでいうところのマージを行う関数だからです
- 863 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:12:32 ]
- こじつけ気味に言うとjoinでなくmergeだから。プログラム関連ではだいたい以下のニュアンス。
join:二つのものをつなげて一つにする。繋ぎ目で切り離せば元の二つに戻る。 merge:二つのものを混ぜて一つにする。元の二つに戻すには構成要素を一つずつより分ける必要がある。
- 864 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:01:23 ]
- >>861
しっかりドキュメント読め。 lst1.merge(lst2)はソートする。O(n) lst1.splice(lst2)はソートしない。O(1) >>863も書いているけど、mergeはどちらかと言うと順序関係を保存して結合する という意味合いが強いね。順序関係を作るためにソートが必要になるということ だと思う。
|

|