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


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

C++相談室 part66



1 名前:デフォルトの名無しさん [2009/01/11(日) 11:21:38 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part65
pc11.2ch.net/test/read.cgi/tech/1230341243/

30 名前:テンプレート朝鮮中 [2009/02/11(水) 00:01:08 ]
質問です。
テンプレートクラスを継承しているクラスがあるとします。
継承先のクラスで継承元のメンバー関数の処理の動作を変えたい場合、
特殊化とオーバーライドの両方が使えそうな気がしています。
仮に両方が使用できる場合、メリットとデメリットはどのようなものがあるのでしょうか?

template <typename T> class BASE {
T t;
public:
virtual void func() {....}
};
---- オーバーライド -----
class A : public BASE<int> {
public:
virtual void func() {
func2();
BASE::func();
}
};
---- 特殊化 -----
template <>
class BASE <int> {
public:
void func() {
func2();
BASE::func();
}
};


31 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:45:57 ]
継承すれば、継承元をインターフェイスとして扱える。

特殊化するとテンプレートの意味がない気がする。

32 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:32:51 ]
>>30
後者は無理だ。
BASE<int>で特殊化するということは、BASE<int>の実装を乗っ取るということ。
つまり、BASE::func();が自分自身を呼び出す再帰になる。

大本のBASE<int>を使いたいというのであれば、
その中では継承しか手段が残らないな。

33 名前:テンプレート朝鮮中 [2009/02/11(水) 03:28:30 ]
回答ありがとうございます。
先輩に、
テンプレートクラスにvirtualをつけるのは何故だ!!
静的ポリモフィズムと動的ポリモフィズムを理解していないんでない!!
と言われ悩んでました。(実際にはまだ悩んでいますが・・・)
明日、静的ポリモフィズムと動的ポリモフィズムの違いが明記してある
参考書を貸していただけるとのことなので、再度、勉強します。
勉強しても、分からなければ、もう一度、質問させていただきます。

34 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 07:25:55 ]
#define const
#define private

35 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 08:47:44 ]
CもしくはC++でWEB操作の解説してる本があれば教えてください
WEBサイトのページから任意の文字列を取得したり
そのページの任意の場所をクリックしたりラジヲボタンを選択したり
これらをUWSCというツールで行っていました
プログラミングに興味があり今UWSCで行っていることをCもしくはC++でやってみたいと思います
紀伊国屋という大きな本屋さんでC関係の解説書を漁ってみたのですが
C言語でWEBページを開くということ自体解説されている本が見当たりませんでした
日本語表記でWEB操作を解説している本を教えてくださいm( _ _ )m
.NETやperlやPHPなら簡単だぞって解答は不要です
CまたはC++でやりたいです
よろしくお願いします

36 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 08:53:46 ]
諦めろ。

37 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 10:07:02 ]
そんなぁorz
どなたか>>35お願いします

38 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:50:38 ]
>>37
標準C / C++には通信の概念自体がない、だからなんか外部のライブラリを利用することになる

.NETがいやならなんか他の使えば?



39 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:52:39 ]
>>35
ttp://www.google.co.jp/search?hl=ja&safe=off&q=C%E8%A8%80%E8%AA%9E+CGI&btnG=%E6%A4%9C%E7%B4%A2&lr=
ttp://www.google.co.jp/search?hl=ja&safe=off&q=iconv&btnG=%E6%A4%9C%E7%B4%A2&lr=

40 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:54:23 ]
webページを操作って、CGIってことじゃないのか。
webページを開くって、ブラウザ起動するってことか?

41 名前:デフォルトの名無しさん mailto:35 [2009/02/11(水) 14:00:30 ]
携帯からてす

42 名前:デフォルトの名無しさん mailto:35 [2009/02/11(水) 14:09:56 ]
みなさんありがとうございます
出先からなので携帯からです
39さん
帰宅したら見てみます
お忙しい中ありがとうございます
40さん
CGIじゃないです
ヤフーのアンケートに応募したり
株価のデータ取得して整理したりです
今はUWSCで満足できる操作できています
C言語覚えたいので
これらの操作をCで行うのが目標です
ありがとうございました

43 名前:停止しました。。。 mailto:停止 [2009/02/11(水) 15:46:20 ]
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ

44 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:18:58 ]
関数のローカル変数はいつ初期化されるのでしょうか?


これはOK?
void push_back(std::vector<int>& v,int val)
{
static tbb::spin_mutex m;
tbb::spin_mutex::scoped_lock locked(m);
v.push_back(val);
}


45 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:21:03 ]
このスレの状況がよくわからんが、
とりあえず↓使おうぜ。
C++相談室 part65
pc11.2ch.net/test/read.cgi/tech/1230341243/

46 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:27:11 ]
>>44
初めて関数に入った時。

ただし、初期化に副作用が発生しない場合は
プログラム開始時に初期化される可能性もある
(いつ初期化されようが動作に変化が無いので)。

47 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:44:49 ]
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

48 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:47:18 ]
>>36>>38
Boost.Asioとかソケットとかキーワードを挙げるくらいしてもいいじゃない。
まあウェブページのダウンロードくらいだったら、HTTP扱える高水準なライブラリを探すべきだと思うけど。



49 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:52:19 ]
となるとcurlあたりか

50 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 00:48:32 ]
C++ for Programmersは
糞本です買わないでください

51 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 16:42:10 ]
>>44
一応言っておくと、初期化は>>46の通りだが
現行C++ではスレッドの概念が無いので
同時にその関数に入った場合どうなるかは環境依存。

52 名前:誘導 mailto:誘導 [2009/02/12(木) 21:47:00 ]
qb5.2ch.net/test/read.cgi/saku/1098189517/282

C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

53 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 21:51:25 ]
後から立てといて意味分からね

54 名前:デフォルトの名無しさん [2009/02/12(木) 22:36:02 ]
C++とC言語では構造体を作るときCのほうでしか必要でないものって何なんだ?

あとC++の共用体の扱いとかわからんのだが

55 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 23:18:03 ]
struct A {
 int hoge;
};

struct A a;
~~~~~~

56 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:24:30 ]
そういえば、C++では
struct stat xx;
ではなく
stat xx;
と宣言できるのだが、それをやってしまうと
同スコープでのstat()関数の呼び出しでエラーになるんじゃなかったかな。

個人的には、「Cの標準」に含まれる構造体はC++で使うときも struct をつけるようにしている。
いや、statがCの標準じゃないのは百も承知だが struct tm とかの場合ね。
で、同様に、struct stat のように「Cでも一般的に使える」ものもそうしてる。
POSIX準拠のものとか。

57 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:39:31 ]
>>56
エラーになるから struct stat じゃないとダメ。

struct a;
int a();
a x;

3: error: `a' does not name a type
3: error: extra `;'
Process gcc exited with code 1

58 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:24:23 ]
C++ の話だぞ?



59 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:24:52 ]
って、ああ、stat の話か。
stat 関数があるからってことか。

60 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 08:55:07 ]
boost::multi_arrayで、以下のようなソースがコンパイルが通らなくて困っています。
どこが間違っているのか教えてください。nの代わりに即値を使うとコンパイルできます。
array_type自体のtypedefはうまくいっているようです。

#include <boost/multi_array.hpp>

template <unsigned int n>
class Test
{
  typedef boost::multi_array<int, n> array_type;
  typedef array_type::index array_index; // ここでエラー
  array_type array;
 public:
  Test(){}
};

int main () {
  Test<3> m3;
  Test<4> m4;
}
----
g++ -Wall -g -I /usr/include/boost-1_33_1 -o a.exe multiarray.cpp
multiarray.cpp:7: error: type `boost::multi_array<int, n, std::allocator<int> >' is not derived from type `Test<n>'
multiarray.cpp:7: error: ISO C++ forbids declaration of `index' with no type
multiarray.cpp:7: error: expected `;' before "array_index"
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)


61 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 12:32:46 ]
>>60
array_type::indexが型だということをコンパイラに教えてやる為にtypenameを付ける
typedef typename array_type::index array_index;

62 名前:誘導 mailto:sage [2009/02/13(金) 18:51:30 ]
qb5.2ch.net/test/read.cgi/saku/1098189517/282

C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

63 名前:デフォルトの名無しさん [2009/02/13(金) 18:58:42 ]
こっちが先だな

64 名前:44 mailto:sage [2009/02/13(金) 22:21:20 ]
>>51
サンクス。
やっぱり無理でしたか・・・

関数内で
struct{static tbb::mutex m;}M;
みたいに書ければいいなと思ったけどだめぽでした。
関数外に出すしかないか・・・



65 名前:誘導 mailto:sage [2009/02/13(金) 22:36:44 ]
qb5.2ch.net/test/read.cgi/saku/1098189517/282

C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

66 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:57:32 ]
class HAGE
{
private:
HAGE();
~HAGE();
protected:
HAGE();
~HAGE();
public:
HAGE();
~HAGE();
};

67 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:02:56 ]
コンパイルエラー

68 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:11:36 ]
HAGE *leave21 = new HAGE();
HAGE *aderans = new HAGE();



69 名前:デフォルトの名無しさん [2009/02/13(金) 23:15:47 ]
class ZURA : public HAGE { };

70 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:42:28 ]
struct LEAVE21{ /* */ };
struct ADERANS{ /* */};
class HAGE{};
template <typename ZURA_TRAITS=LEAVE21> class ZURA : public HAGE{ /* */};
ZURA<> shokumou;

71 名前:60 mailto:sage [2009/02/14(土) 00:56:48 ]
ありがとうございました!

72 名前:281 mailto:sagege [2009/02/14(土) 15:16:38 ]
qb5.2ch.net/test/read.cgi/saku/1098189517/282

C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

73 名前:停止しました。。。 [2009/02/14(土) 18:06:05 ]
真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ

qb5.2ch.net/test/read.cgi/saku/1098189517/282

C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

74 名前:デフォルトの名無しさん [2009/02/14(土) 18:49:23 ]
1 名前:デフォルトの名無しさん[] 投稿日:2009/01/11(日) 11:21:38
                              ^^^^^^^

75 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:01:06 ]
☆, -──- 、        _____
[, -──- 、        _____]
, -──- 、        _____
    /_____ \�   //⌒ヽ ⌒ヽ  `\
    |/⌒ヽ ⌒ヽヽ | ヽ  /  |  ^ |^  |- 、   ヽ
    |  / | ヽ  |─|  l //  `ー ●ーU′  \   ヽ
   / ー ヘ ー ′ ´^V /  ─  |  ─    ヽ   i
    l \    /  _丿 i   二   |  二     |   |
.   \ ` ー ´  /   .l \     |     /  l   !
      >ー── く     ヽ  \  |   /    /   /
    / |/\/ \     ヽ   ̄ ̄ ̄     /  /   同じスレではこのままだけど
    l  l        |  l     >━━5━━━━━く    違うスレにコピペするとドラえもんがスネ夫
    ヽ、|        | ノ    /  く    /     ヽ    に変わる不思議なコピペ。
       |ー───j      l   (⌒(⌒)  /    |



76 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:35:07 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

77 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:35:32 ]
>>76
スレ違い。

78 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:37:51 ]
>>77
どのスレにいけばいいでしょうか?




79 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:38:50 ]
>>78
Grass【ちょっと草植えときますね型言語】
pc11.2ch.net/test/read.cgi/tech/1219466260/


80 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:53:18 ]
せめて10分は間隔あけようぜ・・・

81 名前:停止しました。。。 mailto:sage [2009/02/16(月) 15:48:40 ]
真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ

qb5.2ch.net/test/read.cgi/saku/1098189517/282

C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

82 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:23:36 ]
え?

83 名前:デフォルトの名無しさん [2009/02/16(月) 22:31:59 ]
後発スレで自演厨が暴れてるな

84 名前:デフォルトの名無しさん [2009/02/17(火) 01:47:18 ]
イテレータのコンセプトは素晴らしいと思います。
ところで<algorithm>ヘッダのテンプレートはほとんどistreamの入力イテレー
タに適用できません。
イテレータにバッファを内蔵し前進イテレータに変換すると適用できると思う
のですが、こういったものはすでに作られていないのでしょうか?
また、アイデアそのものに問題点はありますか?

よろしくお願いします。

85 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 02:02:04 ]
>>84
std::istream_iterator
std::istreambuf_iterator

86 名前:デフォルトの名無しさん [2009/02/17(火) 02:07:09 ]
>>85
両方ともinput_iterator_tagが指定されています。
forward_iterator_tagを想定するとお考えください。

87 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 02:38:59 ]
>>84
Boost.Spiritがfile_iteratorというランダムアクセスできるイテレータを持っている。
内部でどんな実装をしているかは知らないが。

あと、イテレータではないけど、pstadeのovenというライブラリのmemorizedが
汎用的なバッファ機構(メモ化)を備えていて、
たとえ、元のカテゴリが入力だったとしてもこれを通せば前進になる。
p-stade.sourceforge.net/oven/doc/html/oven/range_adaptors.html#oven.range_adaptors.memoized

問題点はよく知らない。
ただ、memorizedは汎用なので、vectorやdequeに貯め込んだり、
file_iteratorのようにストリームに特化して作ったほうが、より効率が良いとは思う。

88 名前:デフォルトの名無しさん [2009/02/17(火) 02:44:54 ]
>>87
boostのはたしか、ファイルをすべてメモリー上に読み込むような感じの
ものだったと思います。
若干意味合いが異なります。

ovenはちょっと見てみます。



89 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 03:34:25 ]
>>84
要素へのアクセスで、初めて読む部分かすでに読んだ部分かで処理を分けることになるので、
vector などのコンテナに必要な分を読み込んでから処理するのに比べて効率が悪くなりそう。

そのうえで、実際には必要な分を読み込んでから処理すれば十分なことがほとんどになるので
あんまり需要が無いんだと思う。

本当に必要だといえる状況だと言うことなら、興味があるのでどんな場面か教えて欲しい。

90 名前:デフォルトの名無しさん [2009/02/17(火) 03:44:01 ]
>>89
入力がある場合すべてにおいて必要になるのではないかと思っています。

91 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 03:55:28 ]
>>90
それはないだろ。たとえばテキストファイルを1行ずつ読み込んで処理する場合、
getline() あたりで1行読んでの処理をループすればいい。

92 名前:デフォルトの名無しさん [2009/02/17(火) 04:04:38 ]
>>91
入力を解析する必要がある場合すべて。
<algorithm>ヘッダを使用するという前提で。

93 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:12:17 ]
>>92
その説明だと、vectorとかに蓄えればいいのでは、という疑問が解消されない。
どういう利点があると考えるのか詳しく聞きたい。

94 名前:デフォルトの名無しさん [2009/02/17(火) 04:15:40 ]
>>93
ストリームの存在意義についてですか?
いろいろ使い道はあるはずだと思いますけど。

95 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:23:34 ]
>>94
研究するのは勝手だけれど、具体例を出せないのに意義を語られても困る。

96 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:34:30 ]
>>94
いろいろと言うならひとつ挙げるくらい簡単だろ。

97 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:37:31 ]
>>94
ストリームの存在意義など聞いていない。

>84 で挙げてる入力イテレータから前進イテレータへの変換をすることが、
必要な分だけコンテナに読み込んでからコンテナのイテレータを使うことに対して、
どんな利点があるのか挙げろと言っている。

98 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 07:50:35 ]
>>84
せっかくだからGoFのデザインパターンを全て調べてみろ



99 名前:デフォルトの名無しさん [2009/02/18(水) 02:33:36 ]
>>97
亀レスで申し訳ありませんが、ストリームの存在意義そのものが答えになら
ないでしょうか?

100 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 02:40:00 ]
>>99
それしか言えないなら聞き方を変えるけど、一旦コンテナに貯め込む方式の欠点は何?

101 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 02:56:05 ]
>>99
そう思うんならお前の脳内にある「ストリームの存在意義」を挙げればいいだろ。
それを聞く前に答えになるかならないかなんて、エスパーでもなけりゃわからん。

102 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:00:44 ]
一般的なストリームの存在意義といえば、一度にメモリ上に読み込まずにちょっとずつ
処理することで少ないメモリで大量のデータを処理できると言う点があるだろう。
しかし >84 で挙げている方法は「バッファを内臓」することでこの点は失われているように見える。

103 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:31:07 ]
いろいろ適当。

input_iterator it0;
input_wrapper_forward_iterator it1(it0);
input_wrapper_forward_iterator it2; // ?
find_if(it1,it2,cnd());

it2はどう定義するの?

104 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:33:56 ]
find_ifはinputでいけるねごめん。

105 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:46:48 ]
こうか

stream st;
input_iterator it00(st.begin()),it01(st.end());
input_wrapper_forward_iterator it10(it00),it11(it01);
algorithm(it10,it11);

stream st;
input_iterator it00(st.begin()),it01(st.end());
vector v(it00,it01);
algorithm(v.begin(),v.end());

このレベルじゃ意味はまったくないな。

106 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 08:45:38 ]
変態だな

107 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:26:32 ]
ゆとり

108 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 16:17:15 ]
C++を使うなら妥協って物も覚えたほうがいいよ



109 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:04:12 ]
妥協は物じゃないよ

110 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:16:54 ]
名詞だから物だよ

111 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:30:59 ]
じゃあ、名詞としての”妥協”を覚えればいいんだな

112 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 19:15:24 ]
屁理屈こねないの。

113 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 21:43:29 ]
形式名詞はひらがなで書けということですね。

114 名前:デフォルトの名無しさん [2009/02/18(水) 22:50:24 ]

::func()
って記述を見かけたのですが、::の前って省略できるんですか?

115 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 23:00:43 ]
>>114
#include <iostream>

void func() { std::cout << "This is ::func()" << std::endl; }

namespace AAA
{

void func() { std::cout << "This is AAA::func()" << std::endl; }

void aaa() {
func(); // AAA名前空間のfunc()が呼ばれる
::func(); // グローバル名前空間のfunc()が呼ばれる
}

}

116 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 23:23:21 ]
>>115さん
ありがとうございます。
名前空間を念頭に置いてコードを読み直してみます。

117 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 01:46:02 ]
>>116
読むのはいいけど真似するなよ

118 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:09:13 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww



119 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:12:34 ]
すみません。
どなたかMPEG Audioのdist10というプログラム使ったことある方いらっしゃいませんか?

120 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:18:25 ]
>>116
ヒント:スコープの概念。

static const int32_t var = 1; グローバルスコープ
namespace foo { static const int32_t var = 2; } fooスコープ
class hoge { public: static const int32_t var = 3; } hogeスコープ

::varは1
foo::varは2
hoge::varは3


121 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:10:00 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

122 名前:デフォルトの名無しさん [2009/03/13(金) 20:52:41 ]
throw new std::runtime_error("saji");

123 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 00:30:03 ]
>>122
newされたstd::runtime_error *
だと!そんなもんthrowされたらまさにサジを投げるしかないな。

124 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 07:13:32 ]
>>122
newはもちろんジョークだよな?

125 名前:デフォルトの名無しさん [2009/03/18(水) 18:38:05 ]
C++相談室 part67

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part66
pc11.2ch.net/test/read.cgi/tech/1234420483/

126 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:24:05 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

127 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 09:58:48 ]
std::sort で std::vector の要素をソートしようとしています。std::sort の第三引数にでたらめな比較結果を返す
比較関数を与えるとvector の要素の一部がおかしな値に置き換わってしまい、場合によってはプログラムが
異常終了してしまう現象に悩まされています。問題を再現するプログラムを用意しました。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
int a[10] = {0, 0, 0, 1, 1, 1, 1, 0, 1, 1}, pos = 0;
class ComparisonFunc {
public: bool operator()(int i, int j) { return a[pos++] == 1; } };
void main() {
int t[] = {3, 5, 1, 4, 2}; std::vector<int> v(t, t+5);
std::sort(v.begin(), v.end(), ComparisonFunc()); assert(pos == 10);
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
std::cout << *it << std::endl; }
このプログラムを実行すると第3要素の値がおかしくなります。VC++ 2008 Express Edition と
g++ 4.3.0 (MinGW) では一応実行が終了しますがIntel C コンパイラ 9.0 だと異常終了します。
環境は Windows XP SP3 (32ビット) です。「でたらめな比較結果を返す比較関数」を考えているのは、
ユーザが比較関数をスクリプト言語で定義できるシステムを作っているからです。operator() メソッドの
中でスクリプト言語で定義された比較関数を呼んで、その戻り値を operator() の戻り値として返す仕組みです。
そのためどんな比較関数が来てもプログラムが異常終了しないようにしたいと思います。どんな対策が
考えられるでしょうか? std::sort が比較関数の異常を検知して適当なところで処理を中断して例外でも
スローしてくれたらと思うのですがそこまで面倒は見てくれないようです。


128 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 10:47:27 ]
>>127
std::sortに渡すコンパレータは辻褄のあった結果を返さないといけないと仕様で決められている。
そうでない場合の動作は未定義。
つまり、でたらめな結果を返す可能性のあるコンパレータはstd::sortには使えない。

ソート関数を自作するか、コンパレータを検証する関数を追加するしかないだろうね。
いずれにしても矛盾を検知しようと思ったら、O(n log n)では済まないと思う。



129 名前:デフォルトの名無しさん [2009/03/20(金) 16:49:42 ]
c++で作られたプログラムを逆アセンブルしてるんですが、アセンブリ言語について質問できるスレってありませんか?

130 名前:デフォルトの名無しさん [2009/03/20(金) 17:16:32 ]
このへんじゃね?
pc11.2ch.net/test/read.cgi/tech/1172916032/






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

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

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