[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 01/09 03:49 / Filesize : 255 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.72【環境依存OK】



1 名前:デフォルトの名無しさん [2010/03/05(金) 16:51:13 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.71【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1264774545/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め)

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。


45 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 18:36:45 ]
処理系依存なら__declspec(selectany)とか__attribute__ ((selectany))とか

46 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 19:24:48 ]
>>44
namespace ns
{
  struct Hoge;
  template<bool Dummy = true>
  struct HogeHeaderOnlyConstants { static Hoge const HOGE; };

  struct Hoge : HogeHeaderOnlyConstants<> {};

  template<bool Dummy>
  Hoge const HogeHeaderOnlyConstants::HOGE = Hoge();
}

d.hatena.ne.jp/Cryolite/20051129#p2
d.hatena.ne.jp/Cryolite/20051129#p3

47 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:21:34 ]
なるほどーthx

48 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:18:04 ]
*.hと*.cppが1対1でもexternって使わないとダメなんですか?
externの動きがいまいちわからない

49 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:34:31 ]
extern=どこかにあるやつを使うぜ!実際どこにあるかはリンカまかせ

50 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:44:01 ]
拡張する予定が有るならextern
無いなら無名名前空間かstatic

51 名前:49 mailto:sage [2010/03/14(日) 14:01:47 ]
>>49
>extern=どこかにあるやつを使うぜ!
・*.hに1つだけ変数を宣言する
・2つの*.cppから*.hに宣言した変数を使う
ってことができるわけですか?

>>50
>拡張する予定が有るならextern
ここの拡張は、*.hと*.cppが1対nになること可能性があるって意味ですよね

52 名前:51 mailto:sage [2010/03/14(日) 14:02:29 ]
名前間違えました
>>51は48です

53 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:09:54 ]
>>51
そう

hoge.cpp
int g_val;//実体はコレ
hoge.h
extern int g_val;

使う人
foo.cpp extern int g_valするかhoge.hをインクルード
hage.cpp 以下同様



54 名前:48 mailto:sage [2010/03/14(日) 14:19:47 ]
>>53
そうと言われても、>>49なのか>>50か分からないんですけど...

・1つの*.hを2つの*.cppで共有している
・しかし2つも*.hに変数を2つ書くのが(考えるのが)面倒い
・それじゃ、*.hに1つだけ変数を宣言して、あたかも2つ宣言したようしよう
ってのがexternですね

55 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:26:46 ]
とりあえず宣言と定義の違い、翻訳単位やリンケージについて調べてください

56 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:27:08 ]
wisdom.sakura.ne.jp/programming/cpp/cpp24.html
の一番下のmain関数
Neko obj(::obj);
の ::obj は何を指すんですか?

57 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:29:45 ]
グローバル変数のobj。クラスの宣言と同時に定義してるやつ

58 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:53:19 ]
>>57
ありがとうございます

59 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:59:28 ]
friendって使い道あるの?
ネストクラスとかstaticメンバ関数つかえばよくね?

60 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:01:41 ]
>>59
テンプレートが絡んでくるとそう簡単じゃないんだよ。
Effective C++ぐらい嫁。

61 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:32:10 ]
iostreamやstdioなどの標準的なライブラリは
/usr/includeの下にヘッダファイルが保存されています

標準的なライブラリの実態はどこにあるのですか
OS or コンパイラ?


62 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:33:33 ]
大抵ファイルシステム上のどこかです

63 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:00:06 ]
>>61
ものによる。
/usr/include ってことはUNIX系だろうから、たいていOS付属で
/usr/lib など。




64 名前:61 mailto:sage [2010/03/15(月) 00:11:33 ]
>>63
普通に考えてみれば、/usr/lib/以下にありますよね
/usr/libはソフトの実体が入っているな〜程度の事しか思っていませんでした
/usr/libの中のデータは*.soが多いわけですし

わかりました、ありがとうございます

65 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:10:20 ]
>>61,64
もしかして、実体ってライブラリのことじゃなくてソースのことだった
りする?

それももちろん環境依存だけども。


66 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:09:33 ]
Windowsでの話なのですが、

std::locale loc = std::locale();
loc = std::locale(loc, "japanese", std::locale::ctype);
std::locale::global(loc);

といった記述をDLLの冒頭に書いた場合、それを読み込むソフトや他のDLLにも影響は及ぶのでしょうか?

67 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:12:48 ]
hoge.h
extern void hoge();
hoge.c
void hoge(){内容}

なんで、hoge.cには#include "hoge.h"と書かなくてもシンタックスエラーにならないんですか?
C++でクラスを定義する時は、#include "hoge.h"と書かないとシンタックスエラーになるのに

68 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:16:19 ]
>C++でクラスを定義する時は、#include "hoge.h"と書かないとシンタックスエラーになるのに
ならねーよ

69 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:21:41 ]
>>67
何にも理解してねぇんだな。
#includeがおまじないの類だと思っている節が。

だれかおせーてやれ

70 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:28:23 ]
>>66
個々のランタイムで管理しているので同じランタイムにリンクされているモジュール間で影響を受ける
VC++2005で動的リンクで作ったなら同じプロセスに読み込まれてるVC++2005で動的リンクしているDLLが影響を受ける
VC++6や2008で作ったものや2005でも静的リンクしたものは別のランタイムに属するので影響されない

71 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:28:54 ]
// 関数hogeの宣言
extern void hoge();
// 関数hogeの定義
void hoge(){内容}
// 関数hogeの参照
hoge();

// クラスFooの定義
class Foo {
Foo() {}
static FOO() {}
};
// クラスFooの参照、インスタンスfooの定義
Foo foo;
// クラスFooの参照
Foo::FOO();
// インスタンスfooの参照
func(foo);

72 名前:67 mailto:sage [2010/03/15(月) 13:33:57 ]
>>71
thx

でもさ、C++の時は#include "hoge.h"って書かないと
コンパイラ様が怒ってくるんだよ

73 名前:69 mailto:sage [2010/03/15(月) 13:42:44 ]
>>72
それは
> C++の時は
というか、単に "hoge.h" に クラスFooの定義 を書いているってだけじゃないのか?

#include "hoge.h"
の #include ってのは、"hoge.h" をその場所に取り込め(コピペ的に機械的に取り込め)
って意味だから、これがないと
"hoge.h" に クラスFooの定義 を書いている場合は
クラスFooの定義 が見つからないとコンパイルエラーになるだろうけど。

でも#include "hoge.h"をしなくてもソースファイルにもう一度 クラスFooの定義 を
書けば別に#include "hoge.h"しなくてもエラーにはならない。

意味分かってくれる?



74 名前:69 mailto:sage [2010/03/15(月) 13:58:57 ]
>"hoge.h" に クラスFooの定義 を書いている場合は
>クラスFooの定義 が見つからないとコンパイルエラーになるだろうけど。
クラスの定義はどうやって見つけるんですか?
知りたいことは、そこなんです

75 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 15:32:51 ]
// hoge.c

class Hoge {
};

Hoge hoge;

76 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:35:13 ]
よくライブラリで構造体を
struct tagHOGE{}HOGE;
みたいにtagなんちゃらにするのは何でですか

77 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:44:00 ]
>>76
慣習です。
C/C++ではstruct tagHoge {...} hage;としたときにhageの型はstruct tagHogeになります。
C++ではtagHogeのようにstructを省略できますが、Cでは省略できません。
その為、しばしばCではtypedef struct tagHoge {...} Hoge;のようにtypedefすることになります。
このとき、typedef struct Hoge {...} Hoge;とするとC++ではエラーになります。

78 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:09:36 ]
了解しました

79 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:28:15 ]
同じにしてもC/C++共にエラーにならない
まあそういうコンパイラもあるのかもしれないけど

80 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:32:54 ]
>typedef struct Hoge {...} Hoge;とするとC++ではエラーになります。
ならんならん
JIS X3014 附随書C 7.1.3 にも全く同じ例が載ってる

81 名前:デフォルトの名無しさん [2010/03/15(月) 20:28:50 ]
class Hoge{
private:
int Num;
double huga[Num];
public:

Hoge(int Num);

};

Hoge::Hoge(int Num){

this->Num = Num;
}


82 名前:デフォルトの名無しさん [2010/03/15(月) 20:33:34 ]
中途半端だった・・・
こういった風にhugaのサイズを宣言したいのですが、これではコンパイルができません。どういう風にかいたらいいでしょうか?

83 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:35:46 ]
>>81
std::vector を使う



84 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:51:36 ]
class aaa
{
static const int bbb = 100; double ccc[bbb];
};

85 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:54:46 ]
struct ar{double*const p;ar(size_t a):p(new double[a]){};~ar(){delete[] p;}double&operator[](size_t a){return *(p+a);}}*huge;
// を new deleteでつかう。

86 名前:66 mailto:sage [2010/03/16(火) 09:18:35 ]
>>70
詳しく説明していただき、大変参考になりました。
ありがとうございました。

87 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:50:03 ]
>>85
コピーコンストラクタと代入演算子は書こうぜ

88 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 10:06:23 ]
>>76
blogs.msdn.com/oldnewthing/archive/2008/03/26/8336829.aspx
これだな。

標準化前のCではタグ名の名前空間が分かれていなかったことが原因で、
それを受けた Windows プログラミングによってさらに広まったものだろう。

tag ならまだしも下線で始める奴が多くて困る。
www.kijineko.co.jp/tech/superstitions/tags-begin-in-underscore.html

89 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 10:10:47 ]
>>80
実はまだ active issue になってたりする。
www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407

90 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:33:03 ]
JIS版C++ではOKだがISO版C++ではNG…ということか?

91 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 02:06:50 ]
>>90
んなこたーない。ISOもJISも内容は基本的に同じ。

元々の規格の意図としては同じ名前も使えるようにしたかったようだけど、
厳密に解釈していくとなにやら矛盾のある状態になっているようだという話。

92 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 11:36:16 ]
VistaにVC2003をインストールしたんですが、ダイアログデザイン
編集時にプロパティウィンドの中身が一切表示されません。
サポート対象外なのはわかっていますが、解決策があれば
教えてもらえないでしょうか

93 名前:デフォルトの名無しさん [2010/03/17(水) 18:31:40 ]
class abc
{
abc(int);
・・・
}
---

list<abc> a1;
for (int i=0;i<10;i++){
a1.push_back( new abc(i));
}

こんな感じで作ったa1を削除する時って、
a1の要素のabcのメモリ解放は、
ループさせて、いちいち要素ごとにメモリ解放をしていかないとダメですか?
それとも、
a1.clear();で、全部やってくれるモンなのですか?



94 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 19:10:06 ]
自分でやんないとだめ

95 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 20:44:35 ]
>>92
好きなのを選べ
1. WindowsXPをインストールする。
2. VisualStudio2008ExpressEditionをインストールする。



96 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:13:41 ]
あるクラスAがあります。

このクラスをクラスBがコンポジションします。
クラスAのprotectedメンバー変数にクラスBからアクセスしたいのですが、継承した場合と違ってアクセスできません。
どのようにアクセスすべきでしょうか?
A内にpublicな関数をつくり、その関数がprotectedメンバーの値を返すようにすればいいのでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:29:59 ]
お好きにどうぞ。

98 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:46:37 ]
どうするのが一般的なんでしょうか?

アクセスしたい変数は2個あって、そのために関数を2個用意するのはバカらしい感じがします。

99 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:49:21 ]
friend

100 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:55:41 ]
>>98
二個用意するのが馬鹿らしいなら設計を見直しましょう。

101 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:21:25 ]
アクセス制御精査を心がけてるよと見せるのが主目的なら
抽出用一時オブジェクトとメンバ関数へのfriend指定を駆使して記述すれ

102 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:34:18 ]
>>96
共通のメンバーを抜き出したクラスをクラスA,Bから参照すればいい。

103 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:42:07 ]
>98
このスレッドに書き込む労力を
アクセッサの実装に使ってください



104 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:49:32 ]
>>98
getter setterは邪悪

105 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:01:52 ]
>>93
それ、
  a1.push_back(abc(i));
でよくない?
どうしてもnewしなきゃならないなら、shared_ptrを使うといい。

106 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:50:38 ]
>>96
Bに包含されることを前提にAを設計しているなら単にfriend指定すればいい。
そうでなければアクセサを書くか、メンバ変数自体をpublicにすればいい。

107 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:50:01 ]
>>105
用途によっては shared_ptr をコンテナに突っ込むより ptr_vector の方がいいかもね。

108 名前:92 mailto:sage [2010/03/19(金) 13:29:45 ]
やはりそうなりますかー。
ネットで調べてもそういう現象が見つからないし、
自分の環境固有の問題なのかなぁ

ちなみに最近ではMFCが使われて無いみたいなこと聞きますが
そうなるとウィンド周りは何で作るのが主流なんでしょう?
SDK? CLI?

109 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 16:45:15 ]
operator boolをそのまま実装すると色々とよろしくないようでsafeboolなるテクニックがあるようですが
ググっても何をやってるのかさっぱりわかりません

どういう原理でsafeになるのでしょうか?

110 名前:デフォルトの名無しさん [2010/03/19(金) 17:09:07 ]
Linuxでgccを使っています。
プログラム自身が使用しているメモリ量と、システムのフリーメモリ量を取得する方法を教えてください

111 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 17:33:51 ]
>>110
OS板、OSスレでどうぞ。

112 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:40:36 ]
>>109
more c++ イディオム safe bool でググるんだ。

普通にはアクセスできないポインタ型を変換演算子で返せば、ifで評価できるし、あれこれ暗黙な変換がされなくて済む。


113 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:42:30 ]
int a=p+1;こんなのがsafeじゃない意図されない使い方



114 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:48:46 ]
C++0xのexplicit conversion operatorsがあればsafe bool idiomはいらない子ですか?

115 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:56:24 ]
そうだね。
でも、コンパイラの実装を待つことなく工夫してsafe boolを手に入れられる拡張性がC++のいいところだよね。


116 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:55:43 ]
C++のコードをDLLにするのってめんどいな
例外出しちゃいけないからわざわざ例外捉えるだけのラッパー書かないといけないし
引数と返り値にSTL使えないし

117 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:58:13 ]
それを突き詰めていくとな、いつのまにか劣化COMを作っている事に気づくのさ

118 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:02:59 ]
>>116
多分、結局インタフェースコードはCかCOMにすることになると思うよ
労力ばかり無駄にかかる上に、CのDLLやCOMより相互運用性において劣る

119 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:06:13 ]
WindowsならCOMでいいけど
MacやLinuxはどうすんの?

120 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:07:22 ]
>>112-115
ぐぐってみてこのページを見たのですが
ttp://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E5%AE%89%E5%85%A8%E3%81%AA_bool(Safe_bool)

operator bool()ではなくoperator bool_type() constでもよいのでしょうか?

で、operator bool_type() constの挙動は
ok_がtrueであればthis_type_does_not_support_comparisons()のアドレスを返し、0以外の値なのでtrueと動作する
falseならば0をかえしfalseとなる

例文の
if (t2 == t1)や
if (t1 < 0)
のばあいはprivate関数のアドレスを比較するのでコンパイルエラーをはく
ということでしょうか

この場合なぜメンバ関数のアドレスを返り値とするのでしょうか?

質問続きで申し訳ありませんがよろしくお願いします

121 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:10:44 ]
Cでいいんじゃないの
必要に応じてヘッダのみ、またはスタティックリンクのラッパーを書いて提供

つまり
ユーザーコード - C++ラッパー - DLL境界 - Cインタフェース - C++実装
こうなる
面倒すぎて反吐が出るね


122 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:14:39 ]
CORBA(笑)

123 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:18:10 ]
>>120
普通のポインタだったらいろいろできて副作用があるから。



124 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:40:28 ]
>>120
キャストでいじってみるとわかるけどpointer to memberはキャストの制限がきつい
だからかってに暗黙変換されてコンパイルとおって変な動作したりとかがなくなって安全なわけ

125 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 13:56:08 ]
質問です。
速度で考えると、floatとdoubleではどちらを使った方がいいのでしょうか。
最近のPCで動かす場合を考えているのですが、最近はfloatよりdoubleの方が早い、みたいな話を聞いたのですが・・・。

126 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 14:09:45 ]
32bitCPUならfloatもdoubleもそんなに差がないだろ
x86に限定して言うならどちらもFPUにロードした時点で80bitになる
SSE使ってたらfloatの方が速いって事もあるけどな

127 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 14:15:09 ]
>>126
64bitだと差が出ると言うことでしょうか?
そして32bitなら、精度が高い分doubleのほうがよい、という事で合っていますか?

128 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 14:22:25 ]
>>127
ああごめん
今昼間から酒飲んでるから答え半分に聞いてくれ
32bitCPUだとdoubleのロードにメモリアクセス2回必要だわな
64bitCPUだとそんなに差がないってのが正解か

でも実測してみると分かるけどfloatでもdoubleでもそんなに差がないよ
結局FPUの演算に掛かる時間が食われてロードの時間なんて問題に
ならないんだろうな

129 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:12:20 ]
>>125
あなたが究極の性能を目指しているのでもない限り、doubleを使うべきです。

理由は幾つかあります。先ずはメリットを。
・floatの方が演算処理が速い場合もある。特に、ベクタ化できる場合に2倍速くなるかもしれない。
・floatの大きな配列の方が同じ要素数のdoubleの配列よりもキャッシュヒットが期待できる。そもそもメモリ容量的にdoubleではダメかもしれない。
・三角関数などの標準関数はsin()とsinf()のようにfloat版が用意されていればそれを利用できる。

次にデメリットを。
・一部の標準関数にはfloat版が用意されていない。また、sprintf()のようにfloatを渡すことができない場合もある。
・floatとdoubleの変換は一般的にかなり遅い。
・1.5のように書いてしまうとその定数はdoubleになってしまうので、1.5fのようにfloat定数であることを明示する必要がある。
・以上のように、暗黙のdoubleへの格上げを禁止するにはアセンブリ出力を確認するような神経質な手続きが必要になる。
・そもそも実数演算以外のコストが高くてfloatのメリットが殆どないかもしれない。

尚、doubleの方が速いのはCでは20年来の話。「最近はdoubleの方が速い」なんてことはないのでその話をした人は何か勘違いをしている。

130 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:15:13 ]
お前は少しでも速いからと言ってshortを多用する気になるか?
余程のことがない限り深く考えずにintを使うだろ?
floatとdoubleの関係はshortとintの関係と一緒だ。
深く考えたくなかったら黙ってdoubleを使っとけ。

簡単に纏めるとこれでいいだろw

131 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:18:59 ]
>>129
メリットとデメリットの説明が逆のような気がする…。

132 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:22:36 ]
>>131
いや、2行目に空白があるだろ?そこの行間を読んでみると、
彼はfloatにした場合の説明をしているんだろう。



133 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:28:24 ]
>>125
とりあえず自分のマシンで実測してみれば?



134 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:29:16 ]
>>133
そして/fp:fastを付けずにfloatが遅いと言い出すわけだ

135 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 17:32:47 ]
>>132
そ、そんなところに空白が…!!!

136 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 18:26:02 ]
GPUに仕事ぶん投げて非同期にやらせればいいじゃない

137 名前:129 mailto:sage [2010/03/20(土) 19:51:23 ]
おっと、途中で構成を変えたのが裏目に出たようで。失敬。

>>136
正直、今の4coreCPUならGPUにぶん投げられるような仕事はかなり特殊と言わざるを得ません。
実装の手間を考えると、IntelCompilerで最適化する辺りが無難ですね。
いずれにしても、普通のプログラマが意識するような領域では普通にdoubleを使ってgccなりVCなりで
コンパイルするだけで充分です。

138 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 05:29:48 ]
typedef struct tHOGE
{
int x ;
TCHAR[256] str;
}HOGE;

std:vector<HOGE> vHoge ;

見たいな感じのものをstd:sortを使ってx又はstrで
並びかえる事は出来ますか?


139 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 05:34:13 ]
>>138
すみません
TCHAR str[256] ;です><

140 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 06:51:01 ]
>>138
比較関数を自分で書けばソートできる

141 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 09:42:10 ]
>>138
簡単
std::sortの第三引数に叙述関数の名前を書くか、関数オブジェクトの
名前を書いて、叙述関数または関数オブジェクトを書けばソート可能

142 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 10:01:12 ]
>>138

ideone.com/q1vUcaVV

こんな感じな

143 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 10:51:46 ]
>>140-142
出来ましたありがとうございます
ソースわかりやすかったです



144 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 10:58:23 ]
deprecated conversion from string constant to ‘char*’

の意味をぐぐってみたが、C++0xで廃止予定との事なので
現行標準C++では関係ない

145 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 12:26:39 ]
>>144
というか
C++0xで廃止予定
だから
deprecated conversion
なんじゃねぇの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef