2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part75

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

前スレ
C++相談室 part74
http://pc12.2ch.net/test/read.cgi/tech/1256397778/

2 :デフォルトの名無しさん:2009/11/28(土) 16:33:06
最近のマシンはメモリが安価で優秀なのでSTLで実行ファイルの大きさが10倍になっても特に問題ありません。

3 :デフォルトの名無しさん:2009/11/28(土) 16:34:17
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://www.cppreference.com/ (英語)
 http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映していない)
[禿 Stroustrup]
 http://public.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。

4 :デフォルトの名無しさん:2009/11/28(土) 16:35:27
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

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/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/


5 :デフォルトの名無しさん:2009/11/28(土) 16:36:20
■Books(Templateまわり)■
Effective 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/


6 :デフォルトの名無しさん:2009/11/28(土) 16:37:13
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport



7 :デフォルトの名無しさん:2009/11/28(土) 16:38:08
 codepad
 ttp://codepad.org/

長いソースを貼るときはここへ!



8 :3-7:2009/11/28(土) 16:41:48
>>1
スレ建てしてくれたのはうれしいけど
ご自分でテンプレまで貼ってくれると
もっとみんなが幸せに。



9 :デフォルトの名無しさん:2009/11/28(土) 16:44:12
new禁止ってこれで完璧?

#include <cstddef>

class Foo
{
static void *operator new (std::size_t size)
{
return ::operator new (size);
}
};

int main(void)
{
// Foo *foo(new Foo);

return 0;
}

10 :デフォルトの名無しさん:2009/11/28(土) 16:55:00
throw() があるとpaafekuto

11 :デフォルトの名無しさん:2009/11/28(土) 17:01:08
 ttp://codepad.org/UcVzc48I

このコードにて
20行目と21行目が、どうしてClassDと表示されないのですか?

12 :デフォルトの名無しさん:2009/11/28(土) 17:15:32
>>11を調べていたら、こんなの見つけた。
関係ないだろうけど面白かった。
////////////////////////////////////////////////////////
CやC++において、演算子の結合は、優先順位ではなく(各々の標準規格での)文法によって定められている。
このため、微妙な差異が生じる場合がある。たとえば、Cの条件演算子は以下のように定義されている。

logical-OR-expression ? expression : conditional-expression
一方、C++では次のように定義されている。

logical-or-expression ? expression : assignment-expression
そのため、

e = a ? b : c = d
という式は、Cだと

e = ((a ? b : c) = d)
と解釈されて条件演算子の結果が左辺値でないことによるエラーとなるが、C++だと

e = (a ? b : (c = d))
と解釈され、正しい式となる。


13 :デフォルトの名無しさん:2009/11/28(土) 17:16:39
条件演算子(?:)って同じ型しか返せないんじゃなかったかな。
だから classD も classB に暗黙に変換される。

14 :デフォルトの名無しさん:2009/11/28(土) 17:16:40
あとJIS的には条件演算子じゃなくて
二択条件演算子
っていうんだね。

15 :デフォルトの名無しさん:2009/11/28(土) 17:24:11
>>10
::operator newってbad_allocをthrowしないの?知らなかったじぇ

16 :11:2009/11/28(土) 17:25:12
ありがとうございます。
 ttp://codepad.org/869c7q1b
こうしてみたらClassYが多くなりました。
現在JIS規格を眺めておりますが
複雑な事が書かれています。



17 :デフォルトの名無しさん:2009/11/28(土) 17:28:23
地鎮祭

STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

18 :11:2009/11/28(土) 17:40:21
 ttp://codepad.org/XACh4bms
両方を暗黙の型変換可能にするとコンパイルエラーになるようですね。


19 :デフォルトの名無しさん:2009/11/28(土) 18:19:38
次のコードが
VC++, Digital Mars C++でコンパイルエラーとなります。
g++. bcc 5.5.1, Comeau C++ではコンパイルエラーとはなりません。
 ttp://codepad.org/VNafKGhX

VC++, Digital Mars C++のバグと言うことでしょうか?


20 :デフォルトの名無しさん:2009/11/28(土) 18:36:40
そうですよ

21 :デフォルトの名無しさん:2009/11/28(土) 18:51:11
かもね

22 :デフォルトの名無しさん:2009/11/28(土) 18:51:20
  ∧_∧
 ( ´∀`)
 (    )
 | |  |
 (__)_)

23 :デフォルトの名無しさん:2009/11/28(土) 18:52:43
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{

24 :デフォルトの名無しさん:2009/11/28(土) 18:54:14
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{
  AAA,
  BBB,
(続く)
  ZZZ,
  SOME_IDX_NUM
};
このようになっていて、
for(SOME_IDX idx=0; idx<SOME_IDX_NUM; idx++){

25 :デフォルトの名無しさん:2009/11/28(土) 18:54:59
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{
  AAA,
  BBB,
(続く)
  ZZZ,
  SOME_IDX_NUM
};
このようになっていて、
for(SOME_IDX idx=0; idx<SOME_IDX_NUM; idx++){
  func(idx);
}
というようなことをやりたいんですが。

26 :デフォルトの名無しさん:2009/11/28(土) 18:57:57
for(SOME_IDX idx=AAA; idx<SOME_IDX_NUM; idx++){
  func(idx);
}

27 :デフォルトの名無しさん:2009/11/28(土) 18:58:00
ちょっと頭悪すぎますね?

28 :デフォルトの名無しさん:2009/11/28(土) 18:58:40
なんだと

29 :デフォルトの名無しさん:2009/11/28(土) 18:59:48
++がコンパイルエラーになります

30 :デフォルトの名無しさん:2009/11/28(土) 19:02:53
for(int idx=AAA; idx<SOME_IDX_NUM; idx++){
  func(idx);
}

31 :デフォルトの名無しさん:2009/11/28(土) 19:04:20
funcの引数の型がIDXなので変換できないと怒られます

32 :デフォルトの名無しさん:2009/11/28(土) 19:05:29
static_cast<IDX>(idx)

33 :デフォルトの名無しさん:2009/11/28(土) 19:07:04
質問が糞過ぎて釣りだと思ってた

34 :デフォルトの名無しさん:2009/11/28(土) 19:08:18
答える側も釣ってるんだと思ってた

35 :デフォルトの名無しさん:2009/11/28(土) 19:08:21
できますたありがとうございました。

36 :デフォルトの名無しさん:2009/11/28(土) 19:09:09
oprator++を定義する

37 :デフォルトの名無しさん:2009/11/28(土) 19:11:10
1発で答えられてねえし

38 :デフォルトの名無しさん:2009/11/28(土) 19:22:26
C++0xをVSが取り入れるのはいつですか

39 :19:2009/11/28(土) 19:22:35
やっぱりバグですか…。
VC++で、どうすればこれを回避できますでしょうか?


40 :デフォルトの名無しさん:2009/11/28(土) 19:24:42
>>38
C++0xはまだ出来上がってないから、当然まだ取り入れられることもないだろ。


41 :デフォルトの名無しさん:2009/11/28(土) 19:28:48
VS2010で完全じゃないけど一部の機能が取り入れられるよ

42 :デフォルトの名無しさん:2009/11/28(土) 19:35:26
>>19
return flag ? MyString(hoge.value) : (flag ? hoge : MyString(hoge.value));と書くのはだめなの?

43 :19:2009/11/28(土) 19:37:42
>>42
ありがとうございます。
なるほどcastで解決するのですね。


44 :デフォルトの名無しさん:2009/11/28(土) 19:47:29
C++の余命を教えてください(>_<)
まじめな質問してごめんなさい(>_<)

45 :デフォルトの名無しさん:2009/11/28(土) 19:49:16
1000 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 17:09:20
1000なら3年後までにC++衰退

46 :デフォルトの名無しさん:2009/11/28(土) 20:05:19
呪術はお呼びじゃねえよ

47 :デフォルトの名無しさん:2009/11/28(土) 20:10:02
C++03が衰退するのは間違いない

48 :デフォルトの名無しさん:2009/11/28(土) 20:13:34
またコーディング規約に禁止事項が増えるのか

49 :デフォルトの名無しさん:2009/11/28(土) 20:28:03
コーディングが禁止される禁治産者が増えるの間違いだろう

50 :デフォルトの名無しさん:2009/11/28(土) 20:54:13
教えてくれてありがとうございます(>_<)
それでは皆さん、何時もの様にクダラナイ質問をどうぞ(>_<)


51 :デフォルトの名無しさん:2009/11/28(土) 21:03:45
よくわからんけどC++03xはC99と同じでコンパイラメーカーが
無視する可能性はある

C++98/2003で作られたプログラムが多いからだ

52 :デフォルトの名無しさん:2009/11/28(土) 21:18:36
(>_<) これつかうやつは女が多い
ありがとうございました!! と小文字の!を2度使うやつも

53 :デフォルトの名無しさん:2009/11/28(土) 21:20:55
そりゃC++03xは無視だろさ
C++0xに関してはVC++とGCCはサポートするのが既定路線

54 :デフォルトの名無しさん:2009/11/28(土) 22:57:13
 ttp://codepad.org/X0l4gJpf
これですが、手元で自分で
 g++ ソースファイル.cpp -O0
として実行しても
 ClassY()デフォルトコンストラクタ
 ClassX()デフォルトコンストラクタ
 /////////以下foo()/////////
 ClassX()デフォルトコンストラクタ
 ClassY(const ClassX&)コンストラクタ
と表示されるだけで、両方とも最後のコピーコンストラクタが
実行されません。

この違いはどこから来ているのでしょうか?
また、codepadと手元のg++はどちらが正しい挙動ですか?


55 :デフォルトの名無しさん:2009/11/28(土) 23:06:31
>>54
そのコピーコンストラクタの呼び出しは省略可能。

12.8 Copying class objects p15
> When certain criteria are met, an implementation is allowed to omit the copy
> construction of a class object, even if the copy constructor and/or destructor
> for the object have side effects. ...

56 :デフォルトの名無しさん:2009/11/28(土) 23:16:42
>>55
ありがとうございます。
> 一定の条件が満たされれば
> たとえコピーコンストラクタやデストラクタが副作用を持っていたとしても
> 省略可能
なんですね。

ttp://codepad.org/b2yZXUQi
このように15行目だけstatic_castを付けて変えたのですが
これも同様の理由で省略されたと考えられるのですね。
ありがとうございました。

57 :デフォルトの名無しさん:2009/11/29(日) 00:39:46
//↓このように定義して
typedef boost::shard_ptr< std::vector<T> >  PtrVector<T>;//実際はエラーになる

PtrVector<std::string>  ptrVecString;
PtrVector<CHoge>    ptrVecHoge;
....
..

とういふうに使いたいんだけど,どのように書けば良いですか?


58 :デフォルトの名無しさん:2009/11/29(日) 00:46:13
template<typename T>
struct PtrVector {
typedef boost::shared_ptr<vector<T> > type;
};

PtrVector<std::string>::type ptrVecString;

59 :デフォルトの名無しさん:2009/11/29(日) 00:48:10
ありがとうございました。

60 :57:2009/11/29(日) 01:15:33
>>58
できました!ありがとう!

61 :デフォルトの名無しさん:2009/11/29(日) 04:50:29
>>14
ISO のほうでは "Conditional operator" で C も C++ もいっしょなのに、
なんで JIS C++ だけ余計なもんが付いてるのかねぇ?

62 :デフォルトの名無しさん:2009/11/29(日) 04:58:22
配列にクラスの型を入れてnewできますか?

63 :デフォルトの名無しさん:2009/11/29(日) 05:04:49
>>62 C++ でおk

64 :デフォルトの名無しさん:2009/11/29(日) 05:08:16
例を

65 :デフォルトの名無しさん:2009/11/29(日) 05:08:58
こうですか?わかりますん!><

#include <typeinfo>

class C
{
  std::type_info const& type;
public:
  C() : type(typeid(C)) {}
};

int main()
{
  new C[10];
}

66 :デフォルトの名無しさん:2009/11/29(日) 05:45:44
@をAのようにしたいです。

@
if(i == 0){
  hoge = new Class0();
}else if(i == 1){
  hoge = new Class1();
}

A
hoge = new classTable[i]();

67 :デフォルトの名無しさん:2009/11/29(日) 07:00:24
newじゃなくて関数ポインタの配列を使ってCreateClassx()を並べればできるかもな。
あとは全部にClone()実装した具象クラスの配列とか。

ただし、そこまでやる価値があるかどうかは俺は知らん。

68 :デフォルトの名無しさん:2009/11/29(日) 08:09:41
class Hoge{};
Hoge* operator[](type_t x){
switch(x)

69 :デフォルトの名無しさん:2009/11/29(日) 10:07:42
VC++2008EE使ってるんですがオプションのVC++ディレクトリで必要なライブラリやインクルードファイルの場所指定してるのに必ずリンカでエラー起こします
何が原因でしょうか?

しょうがないのでプロジェクトのプロパティから追加もしてみましたがリンカでエラーでした

70 :デフォルトの名無しさん:2009/11/29(日) 10:26:27
>>66
前スレにこんなん書いてくれてた人いたよ
ttp://codepad.org/6AIfsQCH

71 :デフォルトの名無しさん:2009/11/29(日) 10:27:48
>>17の地鎮祭だけど、
ダイナミックリンクだろうがなんだろうが
テンプレートライブラリであるstd::vectorを使って、
ファイルサイズが増えないのは効果あるんじゃないの?

72 :デフォルトの名無しさん:2009/11/29(日) 11:13:41
暗黙の型変換と明示的な型変換が区別つきません。
hoge_t a(b);//1
hoge_t p = static_cast<hoge_t>(q);//2
hoge_t x = y;//3
だと、1と3が暗黙の型変換で、2が明示的な型変換でしょうか?

とすると、hoge_tの該当するコンストラクタにexplicitが付いていると
できなくなるのは1と3でしょうか?



73 :デフォルトの名無しさん:2009/11/29(日) 13:42:07
初歩的な質問なんですが、基底クラステンプレートから派生された2つのクラステンプレート
のインスタンスを基底クラスに代入するときは基底クラステンプレートのポインターの宣言時に
<>はいらないですか?

74 :デフォルトの名無しさん:2009/11/29(日) 13:49:03
bcc 5.5.1で
ttp://codepad.org/RglmIAAy
がコンパイルできません。
他のコンパイラ(VCとかg++とか)では問題無く動作します。

エラー E2291 ******.cpp 20: } が必要(関数 main() )
エラー E2034 ******.cpp 20: 'ClassX' 型は 'struct' 型に変換できない(関数 main() )
エラー E2141 ******.cpp 20: 宣言の構文エラー(関数 main() )
エラー E2139 ******.cpp 20: 宣言に ; がない(関数 main() )
警告 W8004 ******.cpp 20: 'hoge' に代入した値は使われていない(関数 main() )
エラー E2190 ******.cpp 20: 不要な }
エラー E2040 ******.cpp 22: 宣言が正しく終了していない
エラー E2190 ******.cpp 23: 不要な }
*** 7 errors in Compile ***

こんなエラーが表示されます。
何とかして別の構文を考え出して構造体の初期化をbcc 5.5.1でもできる
ようにしたいのですが、良い方法が思いつきません。

よろしくお願い申し上げます。

75 :73:2009/11/29(日) 13:53:09
仮引数だと<>をつけなくても宣言できますよね。
と言うことはポインターや参照の宣言でも<>いらないってことですか?

76 :デフォルトの名無しさん:2009/11/29(日) 13:54:22
クラス使えよ

77 :74:2009/11/29(日) 13:59:55
>>76
それをヒントに
ttp://codepad.org/juyxCSp8
これで解決しました。
ありがとうございました。


78 :デフォルトの名無しさん:2009/11/29(日) 14:53:43
>>73>>75もよろしくお願いします。

79 :デフォルトの名無しさん:2009/11/29(日) 14:58:49
>>78
試せばわかるだろカス

80 :デフォルトの名無しさん:2009/11/29(日) 15:04:17
>>79
試したけどわかりませんでした。
よろしくお願いします。

81 :デフォルトの名無しさん:2009/11/29(日) 15:04:33
なんで分からないんだよ

82 :デフォルトの名無しさん:2009/11/29(日) 15:07:20
ほっとけ

83 :デフォルトの名無しさん:2009/11/29(日) 15:29:27
たぶん何を試して良いのか
質問している方も分かってないんじゃね?

分かっているというなら
 ” ソースみせろ ” 

84 :デフォルトの名無しさん:2009/11/29(日) 15:38:29
>>73
これはテンプレート初心者が良く疑問に思う良い質問ですね。
私も疑問に思っていて未だに試す機会が無いので
こういった質問してくれるととても助かります。

85 :デフォルトの名無しさん:2009/11/29(日) 15:45:19
>>84
本人乙、としか言いようがない。

86 :デフォルトの名無しさん:2009/11/29(日) 15:49:19
>>85
君は超能力者かいな!!

87 :デフォルトの名無しさん:2009/11/29(日) 15:51:01
2ch に書き込みできてフリーのコンパイラは使えないなんてやつはなかなかいない。
質問してくれただけで助かることなんて無いし、あったとしてもわざわざそれだけを
書き込む意味がない。
「良く疑問に思う良い質問」だと言うのならよくある回答をしてあげればいいのに。

88 :デフォルトの名無しさん:2009/11/29(日) 15:51:06
ハァァァァァァァァ

89 :デフォルトの名無しさん:2009/11/29(日) 15:52:13
>>87
コナンの見すぎwww

90 :デフォルトの名無しさん:2009/11/29(日) 15:53:18
くせぇ流れだな
だから構うなって言ったんだよ

91 :デフォルトの名無しさん:2009/11/29(日) 15:55:00
応答時間がやたら早すぎな人工無能

92 :デフォルトの名無しさん:2009/11/29(日) 15:55:40
>>90=>>98=>>88>>=>>87=>>86=>>85=>>83=>>82=>>81

93 :デフォルトの名無しさん:2009/11/29(日) 16:03:55
素直にこたえてりゃあこんなこたーにならねかったのになー

94 :デフォルトの名無しさん:2009/11/29(日) 16:04:59
>>91
人工無能フイタw

たぶん、俺が思うに
>>73>>84は別人で、
ただバカにする意図を込めて>>84のレスをしたのではないかと。


95 :デフォルトの名無しさん:2009/11/29(日) 16:21:39
istringstreamとostringstream
の違いが分かりません。
教えてください!or分かるサイトを教えてください!


96 :デフォルトの名無しさん:2009/11/29(日) 16:24:34
こんなスレで聞くよりyahoo知恵袋で聞いた方がいいよ。

97 :デフォルトの名無しさん:2009/11/29(日) 16:29:32
>>95 http://ja.lmgtfy.com/?q=istringstream+ostringstream

98 :デフォルトの名無しさん:2009/11/29(日) 16:37:22
>>97
死ねばいいのに

99 :デフォルトの名無しさん:2009/11/29(日) 16:39:17
ちゃんとistringstreamとostringstreamの違いが分かるサイトをおしえてあげたのに
ひどい言われようだな。

100 :デフォルトの名無しさん:2009/11/29(日) 16:47:55
>>99
え?頭おかしいんじゃない?w

101 :デフォルトの名無しさん:2009/11/29(日) 17:07:55
>>97
助かります!

102 :デフォルトの名無しさん:2009/11/29(日) 17:18:29
ttp://www.cplusplus.com/reference/iostream/
ttp://www.cplusplus.com/reference/iostream/istringstream/
ttp://www.cplusplus.com/reference/iostream/ostringstream/

覚える必要があるなら全部覚えればいいさ

103 :95:2009/11/29(日) 17:20:36
>>102
ありがとうございます!

104 :74:2009/11/29(日) 18:42:44
bcc 5.5.1で、
std::numeric_limits<double>::has_quiet_NaNがtrueのくせに
quiet_NaN()
std::numeric_limits<double>::quiet_NaN()==std::numeric_limits<double>::quiet_NaN()
がtrueになってしまいます。
std::numeric_limits<double>::quiet_NaN()!=std::numeric_limits<double>::quiet_NaN()
はfalseになってしまいます。

またこのquiet_NaN()をstd::coutやstd::stringstreamに出力すると
プログラム(成果物の方。)が落ちます。

この状態でどうにかしてquiet_NaN()をNaNであると判別したいのですが、
名案を授けてくださる方いらっしゃいませんでしょうか?

bccを捨てるのが一番な気がしますが、
どうかよろしくお願いします。


105 :74:2009/11/29(日) 18:48:54
やっぱbcc捨てます。

失礼しました。

106 :デフォルトの名無しさん:2009/11/29(日) 18:55:18
Microsoft Visual C++ 2008 Express Editionの話ですけど
文の左に番号を表示する方法はありますか?
ビルドするたびにエラーの場所を上から数えるのつらいです

107 :デフォルトの名無しさん:2009/11/29(日) 18:58:25
最近釣り多いな

F8 キー押せ

108 :デフォルトの名無しさん:2009/11/29(日) 18:59:06
もしくはエラーメッセージをダブルクリック


109 :106:2009/11/29(日) 19:01:19
事故解決しました

110 :デフォルトの名無しさん:2009/11/29(日) 19:01:28
それか Ctrl + G 押して
行番号指定して OK ボタンを押す

111 :デフォルトの名無しさん:2009/11/29(日) 19:02:14
それにまだまだいろいろあるんだが
解決したんなら必要ないか

112 :デフォルトの名無しさん:2009/11/29(日) 19:11:03
ディレクトリの探索をwin linuxで行うにはどうすればいいですか
boostとか大かがりなのはいやです
追加が最小のやり方かいいです

113 :デフォルトの名無しさん:2009/11/29(日) 19:22:44
>>112
いやboostにしとけ。
> boostとか大かがりなのはいやです
十分使われて検証されているヤツがいいに貴マットル。

114 :デフォルトの名無しさん:2009/11/29(日) 19:34:13
>>112
#ifdef
をつかって2通り書け。
それが
> 追加が最小のやり方
だ。

115 :デフォルトの名無しさん:2009/11/29(日) 19:36:39
そうなってるヘッダわけてくれお

116 :デフォルトの名無しさん:2009/11/29(日) 19:37:23
自分で書く量もすくないのがいいんです

117 :デフォルトの名無しさん:2009/11/29(日) 19:38:16
>>112
環境依存のものは
↓で聞いたほうがいい回答得られるんじゃない?

【初心者歓迎】C/C++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/

118 :113:2009/11/29(日) 19:42:45
そもそもなんでboostじゃダメなのか
わからない。
俺なんて自分や同僚のコードより絶対boostを信頼して
使うけどなぁ。

119 :72:2009/11/29(日) 20:02:09
すみません
どなたか
>>72
をお願いします。

120 :デフォルトの名無しさん:2009/11/29(日) 20:07:37
>>119
ttp://codepad.org/

121 :72:2009/11/29(日) 20:12:27
貼りました。
http://codepad.org/HuDbGicA
だと、1と3が暗黙の型変換で、2が明示的な型変換でしょうか?

122 :72:2009/11/29(日) 20:13:51
http://codepad.org/HqcL8MHl
hoge_tの該当するコンストラクタにexplicitが付いていると
できなくなるのが「1と3」ではなく「3だけ」という結果でした。



123 :デフォルトの名無しさん:2009/11/29(日) 20:23:10
>>118
自分だけで使うなら良いんですがソース配布して標準のコンパイラで
コンパイルできた方が良いんです

124 :デフォルトの名無しさん:2009/11/29(日) 20:36:12
>>117
環境に依存しないようにしたいんです 少なくともwinとlinuxで動作するのがいいいんです

125 :114:2009/11/29(日) 20:40:58
>>124
> 環境に依存しないようにしたいんです 少なくともwinとlinuxで動作するのがいいいんです
ちょ!
その一文が無茶。
ファイルやディレクトリの形式が違うことは知ってるだろ?
書け。自力で。それっきゃないだろ。
だいたいそうじゃないと
> ソース配布して
この時困ったことになるぞ?


126 :デフォルトの名無しさん:2009/11/29(日) 20:43:06
>>116のところで皆教える気が失せた。

127 :デフォルトの名無しさん:2009/11/29(日) 21:01:23
まあ#ifdef _WIN32で
opendir()とFindFirstFile()を使い分けるくらいしか無いべさ

128 :デフォルトの名無しさん:2009/11/29(日) 21:18:51
windowsの場合は
dirent.h windows
でぐぐってきたやつぶち込んでやってみることにしました。

129 :デフォルトの名無しさん:2009/11/29(日) 22:21:33
>>104
ECC6.1.0での結果

int main()
{
std::cout << std::boolalpha << std::numeric_limits<double>::has_quiet_NaN << std::endl; // true
std::cout << (std::numeric_limits<double>::quiet_NaN() == std::numeric_limits<double>::quiet_NaN()) << std::endl; // false
std::cout << (std::numeric_limits<double>::quiet_NaN() != std::numeric_limits<double>::quiet_NaN()) << std::endl; // true
std::cout << std::numeric_limits<double>::quiet_NaN() << std::endl; // +NAN
}

最新版はちゃんとバグ取れてるよ

130 :デフォルトの名無しさん:2009/11/29(日) 22:22:52
あ、ごめん
ECC6.2.0(Embarcadero C++ Compiler)だった

131 :74:2009/11/29(日) 23:11:35
>>129-130
ありがとうございます。
ECC6.2.0(Embarcadero C++ Compiler)は有償版でしょうか?
無償で公開されている中での一番新しい版はBCC5.5.1だと思っているのですが。



132 :デフォルトの名無しさん:2009/11/30(月) 00:12:36
g++でmakefileを作らないで分割コンパイルを1行のコマンドでやるときどんなオプションをつけないといけないですか?

133 :デフォルトの名無しさん:2009/11/30(月) 00:38:13
>>132
ふつうに
g++ a.cpp b.cpp c.cpp
でよくね?

134 :デフォルトの名無しさん:2009/11/30(月) 00:44:48
>>133
レスの無駄になるので1レスで詳しく説明してください

135 :デフォルトの名無しさん:2009/11/30(月) 00:53:31
またかよ。

136 :デフォルトの名無しさん:2009/11/30(月) 01:00:57
しりかよ。

137 :デフォルトの名無しさん:2009/11/30(月) 01:53:34
std::bad_allocを利用して例外処理をしているのですがちゃんと動作するか確認をしたいのですがどうすれば良いのでしょうか?
意図的にメモリリークなんて起こせるんですか?

138 :デフォルトの名無しさん:2009/11/30(月) 02:01:04
急いでおりますので、早急にお答えいただけると幸いです。

139 :デフォルトの名無しさん:2009/11/30(月) 02:05:53
>>137
仮想メモリのある PC 環境ではメモリリークしたからってすぐに std::bad_alloc は出ない。
それっぽいところで自分で throw std::bad_alloc() すればいいよ。

140 :デフォルトの名無しさん:2009/11/30(月) 02:16:03
>>139
素早い回答ありがとうございます!早速試してみますね(・∀・)

141 :デフォルトの名無しさん:2009/11/30(月) 07:07:40
>>125
boostのはそこのところうまくやるようにできてる

正直追加ライブラリに関しては
「boost使うか自分で書け」
だよなぁ
次点はACEくらい?1回しか使ったことないけど

142 :デフォルトの名無しさん:2009/11/30(月) 08:10:08
>>137
環境にもよるけど、new char[(std::size_t)-1]のように、明らかに確保できなさそうなほど大きな値でnewするとbad_alloc飛んでくるよ。

143 :デフォルトの名無しさん:2009/11/30(月) 10:02:25
>>142
わかりました!!それも試してみますね(・∀・)

144 :デフォルトの名無しさん:2009/11/30(月) 10:06:16
Windowsのどのコンパイラでもlinux gccのコードが動かせるラッパーはないですか

145 :デフォルトの名無しさん:2009/11/30(月) 10:48:19
ラッパー程度で動くのなら cygwin はなぜあんなに巨大なんだ

146 :デフォルトの名無しさん:2009/11/30(月) 10:51:38
エミュレートではなく、ラッパーlinux gccインターフェースを
winAPIに書き換えるだけで良いのですが。

147 :デフォルトの名無しさん:2009/11/30(月) 10:54:02
その都度、ネットで適当なヘッダー見つけてきて動作確認して組み込むのは
面倒です
セットがあれば楽なんですが

148 :デフォルトの名無しさん:2009/11/30(月) 10:57:59
とりあえず実装依存可の他のスレで相談してみては?

149 :デフォルトの名無しさん:2009/11/30(月) 12:09:54
>>147
mingw
それで足りなければcygwin

150 :デフォルトの名無しさん:2009/11/30(月) 14:22:46
どこでdownloadするんですか

151 :デフォルトの名無しさん:2009/11/30(月) 15:16:29
クラスAの所持しているクラスB[N]配列のコンストラクタそれぞれに
クラスAのポインタを渡したいのですがエラーが出ます(VC2003)
配列の初期化は無理なのですか?

class Gyudon;

class Niku
{
Gyudon* m_owner;
public:
Niku( Gyudon* owner)
:m_owner( owner )
{

}
};


// matuya
class Gyudon
{
public:
Niku niku[2];

Gyudon()
:niku[0](this)
,niku[1](this)
{
}
};


152 :デフォルトの名無しさん:2009/11/30(月) 15:18:49
デフォルトコンストラクタ作るか
newするしかないですか?

153 :デフォルトの名無しさん:2009/11/30(月) 15:20:41
03以前のC++では配列内要素の各々にデフォルトコンストラクタ以外のコンストラクタを呼び出させる事は不可能

154 :デフォルトの名無しさん:2009/11/30(月) 15:25:38
ありがとうございます
ひどい話だ

155 :デフォルトの名無しさん:2009/11/30(月) 15:56:00
配列まわりは、もっと酷いはなしが色々と


156 :デフォルトの名無しさん:2009/11/30(月) 16:23:51
kwsk

157 :デフォルトの名無しさん:2009/11/30(月) 16:49:47
配列を継承元の型で delete してみるとか


158 :デフォルトの名無しさん:2009/11/30(月) 16:59:12
質問です。
クラス内で固定要素の配列を確保する場合、ヘッダファイルで

#define BUF_SIZE 100

class Hoge
{
int buf[BUF_SIZE];




こんな感じでやっていますが、これだとBUF_SIZEのスコープがグローバルになり
よろしくないのではと思っています。
そこで
class Hoge
{
enum {BUF_SIZE=100};
int buf[BUF_SIZE];

と考えたのですが、他にいい方法ってありますか?


159 :デフォルトの名無しさん:2009/11/30(月) 17:00:22
int buf[100];

160 :デフォルトの名無しさん:2009/11/30(月) 17:10:32
>>158
class Hoge
{
static const int BUF_SIZE = 100;
int buf[BUF_SIZE];

これがだめなコンパイラでは、回避策として>>158のenum。

161 :デフォルトの名無しさん:2009/11/30(月) 17:18:59
float 定数はどうしてる?


162 :デフォルトの名無しさん:2009/11/30(月) 17:21:52
namespace 使う

163 :デフォルトの名無しさん:2009/11/30(月) 17:39:52
>>158
それenum hackというやつ
名前付いてるぐらいだから問題ないと思う
ただ>>160のいうやつが通るならそれがいい


164 :158:2009/11/30(月) 18:21:51
>>159-163
ありがとうございます。
>>160はコンパイル通りましたが、メモリをケチるならenumという感じですかね。
namespaceでもマクロ定義はダメみたいです。
enumがそれなりにベターならこれで解決とさせてもらいます。


165 :デフォルトの名無しさん:2009/11/30(月) 18:40:11
>>161の質問の返答が>>162の予感

166 :デフォルトの名無しさん:2009/11/30(月) 19:01:50
>>165
はあ?

167 :デフォルトの名無しさん:2009/12/01(火) 01:13:47
>>161
クラス定義内での初期値指定ができないこと以外はいっしょ。

168 :デフォルトの名無しさん:2009/12/01(火) 03:32:07
>>164
メモリをケチるならenum
そんなことないので>>160が通るならそれで。

169 :デフォルトの名無しさん:2009/12/01(火) 10:48:54
>>166
えっ
namespaceとdefine組み合わせるつもり?
本気で言ってるの?

170 :デフォルトの名無しさん:2009/12/01(火) 15:54:08
質問させてください。

C++2008でテトリスを作ろうと思っています。
初心者なので、とりあえずソースコードをテキストの内容を一つずつ真似して
行こうと思ってるのですが、いきなりタイトルがsample.cとなっています。
この.cというのはどこにあるのでしょうか?
新規作成のプロジェクトからやるのでしょうか?
私はform.hと出てくるものしか知らないのですが…よろしくお願いします。

171 :デフォルトの名無しさん:2009/12/01(火) 16:00:35
馬鹿じゃねーの

172 :デフォルトの名無しさん:2009/12/01(火) 16:10:51
日本語から、学ぶべきだと思うんだ。

173 :デフォルトの名無しさん:2009/12/01(火) 16:11:55
C言語以前の問題だな
使ってるコンパイラのスレにいきなさい

174 :デフォルトの名無しさん:2009/12/01(火) 16:33:05
c++ならソースコードは.cpp
でおk?

175 :デフォルトの名無しさん:2009/12/01(火) 17:33:29
form.hって
C++で.NETか、
がんばれ

176 :デフォルトの名無しさん:2009/12/01(火) 18:14:04
>>170
無理。

C++がセルだとすると、
今のお前はヤムチャであるからして
全く話にもならない。




177 :デフォルトの名無しさん:2009/12/01(火) 18:27:20
>>176
ちょw
ヤムチャってこんな弱いのwww

178 :デフォルトの名無しさん:2009/12/01(火) 18:42:40
>>176
ヤムチャてw


179 :デフォルトの名無しさん:2009/12/01(火) 18:43:26
ヤムチャにはカメハメ波きかないんだぜ

180 :デフォルトの名無しさん:2009/12/01(火) 18:54:01
でもセルならカメハメ波出す必要もなさそうだな。

const char * const p = 〜;
って書く程度で死亡できる。


181 :デフォルトの名無しさん:2009/12/01(火) 19:17:13
type_infoって本当に実行時の型情報を取得できるの?

182 :デフォルトの名無しさん:2009/12/01(火) 19:24:47
>>170
この人の真似をしたらいいべさ
http://www.nicovideo.jp/watch/sm8517855

183 :デフォルトの名無しさん:2009/12/01(火) 19:48:51
struct Hoge {
int id;
...
};
struct HogeCollection {
public:
void add(const Hoge& hoge){...}
void remove(int id){...}
...
};
addとremoveは対になっているわけですが、引数の型が揃っていません。
こういうのってどう思いますか?気持ち悪い?

184 :デフォルトの名無しさん:2009/12/01(火) 19:50:36
>>183
addが戻り値としてidを返すといいんじゃね

185 :デフォルトの名無しさん:2009/12/01(火) 20:00:08
>>184
addを呼び出した時の情報(戻り値)で、removeが呼び出せれば整合性がとれているという事でしょうか。
しかし、addの引数に渡したhogeのメンバ変数idがそのまま返ってくるというのも冗長に感じるのですが、
そんなことはないんでしょうか?

186 :デフォルトの名無しさん:2009/12/01(火) 20:18:35
>>185
確かに冗長かもね。
今のままでも良いと思うよ。
気になるならSTLのvectorとか参考にしてみたら良いんじゃね。


187 :デフォルトの名無しさん:2009/12/01(火) 20:29:00
>>186
どうもです。
参考になりました。

188 :デフォルトの名無しさん:2009/12/01(火) 20:48:15
例外のコストってどんなもんなんですか??
誰か検証してください・・・

189 :デフォルトの名無しさん:2009/12/01(火) 21:17:22
boost::filesystemのような、複数の系統のOSにまたがって使える
ファイルやディレクトリを操作する系のC++ライブラリで、
ヘッダをインクルードするだけで使えるものはありませんでしょうか?


190 :デフォルトの名無しさん:2009/12/01(火) 21:46:59
誰もいないのでしょうか?

191 :デフォルトの名無しさん:2009/12/01(火) 22:05:43
>>189
linuxにあわせるヘッダを用意してlinuxソースを書く。

192 :189:2009/12/01(火) 22:27:40
ライブラリを作る話でなく、ネット上に公開されているものをご教示いただけませんでしょうか

193 :デフォルトの名無しさん:2009/12/01(火) 22:41:00
わざと書いてるだろ
氏ね

194 :デフォルトの名無しさん:2009/12/01(火) 22:42:19

インストールがいるが。

Microsoft Windows Services for UNIX 3.5
POCO C++ Libraries.

195 :189:2009/12/01(火) 22:48:38
>>193
私ですか?

>>194
ありがとうございます。
見てきます。


196 :デフォルトの名無しさん:2009/12/01(火) 23:34:01
その環境で
特定の組み込み型が使えるかどうか
コンパイル時に調べることはできませんか?

例えば
> long long型が存在している環境ではlong long型をMyIntegerに、
> 存在していない環境ではlong型をMyIntegerに
> typedefする
これは標準C++の範囲で可能ですか?


197 :デフォルトの名無しさん:2009/12/01(火) 23:37:34
確実にある型を組み合わせればいい。
サイズは最低保障されているだけだろ。
int = long longだってあり得る。

198 :デフォルトの名無しさん:2009/12/02(水) 00:40:34
ありがとうございました。

199 :デフォルトの名無しさん:2009/12/02(水) 01:02:03
>>188
環境による。プログラムにもよる。自分で測れ。

200 :デフォルトの名無しさん:2009/12/02(水) 03:34:15
>>189
最終的にはwinAPIに変換するからわざわざC標準使う意味ないと
考えていたけど、最近は全てのCコンパイラで動いて、かつ速度低下がわずかを
目指してる。

201 :デフォルトの名無しさん:2009/12/02(水) 11:03:44
#include <limits.h>
#ifdef LLONG_MAX
typedef long long MyInteger;
#else
typedef long MyInteger;
#endif

202 :デフォルトの名無しさん:2009/12/02(水) 14:52:52
わわわわわ!

203 :デフォルトの名無しさん:2009/12/02(水) 15:57:19
VC++やgccのlongは何バイトですか?
x86で

204 :デフォルトの名無しさん:2009/12/02(水) 15:58:12
sizeofで調べましょう!

205 :デフォルトの名無しさん:2009/12/02(水) 17:12:27
x86 つっても
Windows なら 4 バイトだろうし
Solaris なら 8 バイトだろうし。

206 :デフォルトの名無しさん:2009/12/02(水) 17:29:13
上のレスを見ていて思い出したんだが、
C++0xから公式にlong long型が導入される予定だなんだよね。
LONGLONG_MAX

LLONG_MAX
ってどっちが公式なの?


207 :デフォルトの名無しさん:2009/12/02(水) 17:32:16
linuxでカレントディレクトリを移動する命令ってなんですか

208 :デフォルトの名無しさん:2009/12/02(水) 17:46:45
判明しました。chdirでした。
異なるヘッダ名に収録されている命令を、
コンパイル時にヘッダが存在するかどうか調べる方法ありますか。

209 :デフォルトの名無しさん:2009/12/02(水) 18:15:31
>>208
自分のレスをもう一度
読み直し、
日本語でどーぞ。

210 :デフォルトの名無しさん:2009/12/02(水) 18:19:50
windowsでchdirの収録してあるヘッダを読みたいのですが。
コンパイラによるんです

211 :デフォルトの名無しさん:2009/12/02(水) 18:26:59
<windows.h> で SetCurrentDirectory を使えばコンパイラによらない

212 :デフォルトの名無しさん:2009/12/02(水) 18:29:17
delete this;

ってちゃんとデストラクタが呼ばれて、メモリからも解放されるんですか?

213 :196:2009/12/02(水) 18:31:18
>>201
ありがとうございます。


214 :デフォルトの名無しさん:2009/12/02(水) 18:51:59
N次元配列をtemplateで作り込もうとおもってます。
でも、、、
どのようにすれば、arrayの入れ子をつくれるのかがわかりません・・・
誰か教えてください。

template<class T, int N> array;

215 :デフォルトの名無しさん:2009/12/02(水) 19:16:16
template<class T, int N> class array{ typedef array<class T, int N - 1> down_array; };
あとは自分でなんとかしろ

216 :デフォルトの名無しさん:2009/12/02(水) 19:19:50
Nが0になったときの動作は一体・・・??

217 :デフォルトの名無しさん:2009/12/02(水) 19:26:58
template<class T>
class array<T, 0>{ T &opereetaa [](int i){ ritaan array_[i]; } T array_[M]; };

の様な形で特殊化しろ

218 :デフォルトの名無しさん:2009/12/02(水) 19:28:29
ありがとうございます。

219 :デフォルトの名無しさん:2009/12/02(水) 19:39:40
ここできくようなやつがテンプレート使うな
効率、コンパイル時間が落ちる

220 :デフォルトの名無しさん:2009/12/02(水) 19:42:32
継承 テンプレート 下手に使うと内部のコード分量が凄いことになる。
ライブラリ化するときくらいに使えよ

221 :デフォルトの名無しさん:2009/12/02(水) 19:44:45
>>219
いいんじゃない?
>>214はテンプレートでも簡単なテンプレートの話じゃないし。
中・上級者の第一歩ってことで。

222 :214:2009/12/02(水) 19:45:56
>>220
わかりました。

223 :デフォルトの名無しさん:2009/12/02(水) 19:46:08
>>219-220
何があったのかは知らんが心の病気だから病院に行ってみたらどうだ

224 :デフォルトの名無しさん:2009/12/02(水) 19:50:28
>>222>>223の間、レス早すぎだろ

まあ俺も>>219は失礼だからこいつが悪いとは思うが、
>>220に対してまで悪態つくなよ。そりゃお前が悪いぞ。



225 :デフォルトの名無しさん:2009/12/02(水) 19:50:52
ww

226 :214:2009/12/02(水) 19:52:12
>>224
え・・・?僕ですか??
>>223は僕じゃないっす

227 :デフォルトの名無しさん:2009/12/02(水) 19:54:04
222と223は間隔が短すぎるからむしろ別人だという証拠だろ
そして224もその意味で使ってる

228 :224:2009/12/02(水) 19:57:14
ホントだ40sec制限引っかかってるw

すまねぇ。

今日はもうROMるわ。

229 :214:2009/12/02(水) 19:57:33
そうですか。
まあ僕もテンプレートを使いこなせるようにがんばります・・・

230 :224:2009/12/02(水) 19:58:04
>>227
ごめんその意味じゃなかったorz

買いかぶってくれてすまない。
マジで。


231 :デフォルトの名無しさん:2009/12/02(水) 19:59:40
まあ、しゃあないわな

232 :デフォルトの名無しさん:2009/12/02(水) 20:13:23
まあその気になれば40sec制限なんて回避できるけどな。
でもどうでもいい話だな。

233 :デフォルトの名無しさん:2009/12/02(水) 20:38:57
え、できんの??

234 :デフォルトの名無しさん:2009/12/02(水) 20:45:34
ここみたいなID出ない板なら、単に生とP2を使い分けるだけでも出来るでしょ。

でも>>232が言うように、どうでもいい話。

235 :デフォルトの名無しさん:2009/12/02(水) 20:45:55
ちなみにこういうことね。

236 :デフォルトの名無しさん:2009/12/02(水) 21:00:42
というか>>233だってケータイ持ってるだろ。
それから書き込めば余裕だろ?



237 :デフォルトの名無しさん:2009/12/02(水) 21:06:26
まぁそりゃそうだけど。携帯は自明すぎるから、それ抜きで語ってる流れだと思った。

238 :デフォルトの名無しさん:2009/12/02(水) 21:13:27
wchar_t文字列の先頭が L"\\\\\?\\"なのかチェックしたいのですが
どうやればいいですか。
windowsでは、8バイトの比較ですが、unixなどでは不明です。

239 :デフォルトの名無しさん:2009/12/02(水) 21:29:57
一字ずつチェックが確実そうですね

240 :デフォルトの名無しさん:2009/12/02(水) 21:45:55
>>206
LLONG_MAX
C99でもそうだったし、最新ドラフトN3000でもこれ。

>>238
std::equalとかstd::wmemcmpとか。

241 :デフォルトの名無しさん:2009/12/02(水) 22:04:21
string使えば、4文字取り出して=で比較すれば良いだけですが
C言語では1文字ずつがいいですか

242 :206:2009/12/02(水) 22:15:16
>>240
thanks a lot!

243 :デフォルトの名無しさん:2009/12/02(水) 22:36:27
CYG winは、linuxのバイナリ作れますか?

244 :デフォルトの名無しさん:2009/12/02(水) 22:59:24
>>243
Cygwin自体にはLinux用バイナリを作る方法は用意されていないが、
自分でLinuxターゲットのGCCをビルドすれば実現可能。

245 :デフォルトの名無しさん:2009/12/02(水) 23:07:11
ターゲットのかえ方がわかりません。

246 :デフォルトの名無しさん:2009/12/02(水) 23:12:59
サンクス

247 :デフォルトの名無しさん:2009/12/02(水) 23:59:39
delete obj;
のあとに
obj = NULL;
ってしとけば誤って複数回delete obj;しても大丈夫だから
delete obj;するときにはojb = NULL;する習慣を付けた方が良いって本当ですか

248 :デフォルトの名無しさん:2009/12/03(木) 00:03:21
事実関係は正しい。良いかどうかは自分で判断せよ。

249 :デフォルトの名無しさん:2009/12/03(木) 00:09:38
誤って複数回deleteするようなプログラムを書かない習慣をつけろよw


250 :デフォルトの名無しさん:2009/12/03(木) 00:12:27
>>247
本当ですよ

251 :デフォルトの名無しさん:2009/12/03(木) 00:14:45
何回でもdeleteしてやる

252 :デフォルトの名無しさん:2009/12/03(木) 00:41:00
そんな何回もdeleteしてしまう奴はその10倍くらいdeleteし忘れやポインタ上書きメモリリーク地獄だろ。
設計が出来ていないのだからな。


253 :デフォルトの名無しさん:2009/12/03(木) 01:21:32
>>247
そんな習慣を今からつけるぐらいなら、より簡単で安全で本質的な解決策である
std::auto_ptr や boost::smart_ptr を使う習慣を付けるべき。

254 :デフォルトの名無しさん:2009/12/03(木) 01:30:21
>>253
そのとおりですよ

255 :デフォルトの名無しさん:2009/12/03(木) 02:23:04
>>247
void object::destroy()
{
  delete p_;
  p_ = 0;
}
obj.destroy();
obj.destroy();

分かってるとは思うけど
こういうことするなら必須

256 :デフォルトの名無しさん:2009/12/03(木) 06:30:42
void Close(){ delete resource_; resource_= NULL; }
~dtor(){ if(resource_ != NULL) delete resource_; }
なんてやることはある。

257 :デフォルトの名無しさん:2009/12/03(木) 07:13:40
>>256
ですね

258 :デフォルトの名無しさん:2009/12/03(木) 08:40:19
>>256
え?

259 :デフォルトの名無しさん:2009/12/03(木) 09:24:18
え?って言ってる奴は何なの?
ウザすぎる。もうはやってねーし

260 :デフォルトの名無しさん:2009/12/03(木) 10:05:05
ウザ過ぎる返答が返ってくる程お前の書き込みがウザかったって事にいい加減気づけ。

261 :デフォルトの名無しさん:2009/12/03(木) 10:06:12
もう少しうまい屁理屈で言い返したほうがいいんじゃね?

262 :デフォルトの名無しさん:2009/12/03(木) 10:07:42
誰もそういうの求めてないから

263 :デフォルトの名無しさん:2009/12/03(木) 10:09:49
え?

264 :デフォルトの名無しさん:2009/12/03(木) 10:19:04
> ウザ過ぎる返答が返ってくる程お前の書き込みがウザかった
意味わからん
「卑劣な通り魔に刺される程お前が卑劣だったことに気付け」くらい前後の脈絡が無い

265 :デフォルトの名無しさん:2009/12/03(木) 10:19:52
何回でもdeleteしてやる

266 :デフォルトの名無しさん:2009/12/03(木) 10:26:01
>>264
そのたとえ話の方が脈絡がないだろ。

267 :デフォルトの名無しさん:2009/12/03(木) 10:31:40
>>265
たいへんですね

268 :デフォルトの名無しさん:2009/12/03(木) 10:45:22
>>264
「ウザいものにはフタ」ってことです。

269 :デフォルトの名無しさん:2009/12/03(木) 11:04:56
>>266
あるよ
「やった奴と同じ業を、やられた奴も持っていたからそれが起きたんだ」という主張が
めちゃくちゃだという話

270 :デフォルトの名無しさん:2009/12/03(木) 11:10:16
業ってw
下らない書き込みしたから下らない流れになっただけだろうが。
発端が何を偉そうに言ってるんだか。

271 : [―{}@{}@{}-] デフォルトの名無しさん:2009/12/03(木) 11:14:38
std::pow(-0.001, 1.0 / 3.0) が -0.1 じゃなくて -1.#IND000000000000 に
なってしまうのは仕様でしょうか?VC++2008を使っています.
数学的には -0.1 が正解だと思うのですが・・・

272 :デフォルトの名無しさん:2009/12/03(木) 11:15:22
>>256
絶対そういう例出すやついると思った。
でも delete NULL; はOkなのだから、
if (resource_ != NULL) で場合分けするのが無駄なのは明白。

273 :デフォルトの名無しさん:2009/12/03(木) 11:15:27
負数の冪根を求めてはいけない

274 :デフォルトの名無しさん:2009/12/03(木) 11:17:12
>>270
発端ってw
俺は>>264が最初の書き込みだが、いったい誰と戦ってんのw

> 何を偉そうに
と書いてるレスが一番偉そうというギャグだってんなら、3点くらいあげてもいい

275 :デフォルトの名無しさん:2009/12/03(木) 11:17:13
IEEE754だと負数の冪根を求めるとNaNになる。
VC++2008はNaNを-1.#INDと表示する処理系

276 :デフォルトの名無しさん:2009/12/03(木) 11:23:00
1.256が下らないネタにもならないクソな書き込みをする
2.同じく258が下らないレスをする
3.259が258に対して「ウザすぎる。もうはやってねーし」等とのたまう

256 = 259だったらとんだ茶番だな。
この一連の流れは頭おかしいだろ。

277 :デフォルトの名無しさん:2009/12/03(木) 11:33:16
初歩的な質問なんですが、
コピーコンストラクターで、なぜ仮引数のプライベートな部分にまで
アクセスできるんですか?本を見たけどわかりませんでした。

278 :デフォルトの名無しさん:2009/12/03(木) 11:34:39
クラスが同じならインスタンスが自分以外のものであってもアクセスできる。
当然ながらクラスが違えばアクセスできない。

279 :デフォルトの名無しさん:2009/12/03(木) 11:35:47
ありがとうございます。
thisとかも同じですか?
あと、継承されたクラスも同じですか?

280 :デフォルトの名無しさん:2009/12/03(木) 11:43:07
基底クラスは別クラスだからインスタンスが同じであろうと派生クラスから基底クラスのprivateメンバへはアクセスできない。
ただしprotectedは別。

281 :デフォルトの名無しさん:2009/12/03(木) 11:52:04
ありがとうございます。
なんとなくわかりました。

282 :デフォルトの名無しさん:2009/12/03(木) 11:59:33
家のPCが無駄にクアッドコアなんですがプログラミング作ったとき何か指定しないと4コア使って計算してくれませんか?
OpenMpとか

283 :デフォルトの名無しさん:2009/12/03(木) 12:01:55
何も指定されないプログラムが四つ同時に走る事を想定して作ってあるから安心しろ

284 :デフォルトの名無しさん:2009/12/03(木) 12:03:20
>>271
errnoにエラーの情報が入るはず
vcならmatherrだったかも

285 :デフォルトの名無しさん:2009/12/03(木) 12:03:42
>>283
ありがとうございます


286 :デフォルトの名無しさん:2009/12/03(木) 12:04:16
>>285
283って答えになってなくね?

287 :デフォルトの名無しさん:2009/12/03(木) 12:06:29
>>286
ありがとうございます

288 :デフォルトの名無しさん:2009/12/03(木) 12:08:09
OpenMp使った4コア使った並列計算と何も指定しないで4コア使った計算はたぶん別物ですよね
指定しない場合はどんな計算を行うのでしょうか?

289 :デフォルトの名無しさん:2009/12/03(木) 12:10:52
>>282
・プログラミングは作れません。
・コンパイラはもしかしたら複数コアを使ってコンパイルするかもしれません。
・コンパイラによっては、OpenMPを使わなくても複数コアを使うようなコードを出力することができる場合があります。
・一般的には、複数コアを使うコードを出力するにはOpenMPなりpthreadなりを使う必要があります。
・そもそもOSはプログラムを適宜異なるコアで動くように管理するので余り神経質になる必要はありません。
・いずれにしても、C++は言語仕様としてスレッドの概念もなければマルチコアの概念もないのでスレ違いです。

290 :デフォルトの名無しさん:2009/12/03(木) 12:11:44
0xにはスレッドあるが

291 :デフォルトの名無しさん:2009/12/03(木) 12:11:54
>>288
OpenMPを使わずに計算を行います。

292 :デフォルトの名無しさん:2009/12/03(木) 12:14:09
>>290
議論したければC++0xスレへどうぞ。

293 :デフォルトの名無しさん:2009/12/03(木) 12:14:16
女の友達にプライベートな部分を見せてと言ってもみせてくれないとおもうのですが。
なぜフレンド関数はプライベートな部分まで見ることが出来るんですか?

294 :デフォルトの名無しさん:2009/12/03(木) 12:17:32
>>293
私は見せて貰ってますよ。友達だと思っているのはあなただけなのではないですか?

295 :デフォルトの名無しさん:2009/12/03(木) 12:17:33
マ板でやれ

296 :デフォルトの名無しさん:2009/12/03(木) 12:17:40
>>293
C++のフレンドは、女の友達よりは正義超人の友情に近いからです。

297 :デフォルトの名無しさん:2009/12/03(木) 12:18:10
>>293
なぜでしょうね。

298 :デフォルトの名無しさん:2009/12/03(木) 12:19:46
すると、その女友達が単一継承を行うと単為生殖になるのでしょうか

299 :デフォルトの名無しさん:2009/12/03(木) 12:20:02
>>295
ですよね

300 :デフォルトの名無しさん:2009/12/03(木) 12:21:04
>>293
セックスフレンド関数なんです。

301 :デフォルトの名無しさん:2009/12/03(木) 12:49:29
自分のクラス名::メンバー関数とthis->メンバー関数の違いってありますか?

302 :デフォルトの名無しさん:2009/12/03(木) 12:54:30
前者は名前、後者は実体。

303 :デフォルトの名無しさん:2009/12/03(木) 13:16:26
effective C++3版のテンプレートの最後のアイテムに乗ってる
3個の例の行列の掛け算をコピーしないとかのとかの具体的に乗ってるホームページや
本をお願いします。

304 :デフォルトの名無しさん:2009/12/03(木) 13:55:14
Traitsみたいな奴で数を表すクラスのゼロ元とか単位元をあらわすdefineみたいなので
intだと0と1がでるみたいなやつのある初めから出来ているやつ知りませんか?

305 :デフォルトの名無しさん:2009/12/03(木) 14:00:28
代数的な操作がしたいならC++は適さないのでは

306 :デフォルトの名無しさん:2009/12/03(木) 14:52:15
クラステンプレートとテンプレートクラスの違いをおしえてください。

307 :256:2009/12/03(木) 15:23:36
あくまで例だよ。お前ら喧嘩すんなw
オブジェクトのポインタがフラグとしても意味をなすよってことをいいたかった。
リソース自身がオブジェクト化されていた場合で
Close(){ res_->Close(); res_ = NULL; }
~Dtor(){ if(res_!=NULL) res_->Close(); }
こう書けばよかったな
単にcharとかintとかなら、NULLで埋めるだけで問題ない

308 :デフォルトの名無しさん:2009/12/03(木) 15:33:17
>>307
ですね

309 :デフォルトの名無しさん:2009/12/03(木) 15:39:13
>>306
後者は前者の誤記

310 :デフォルトの名無しさん:2009/12/03(木) 15:51:13
>>309
私もそう思っていた時期もありましたが、
そうでもないみたいなので。

311 :デフォルトの名無しさん:2009/12/03(木) 17:23:31
>>306
クラスのテンプレート。template<class T> class HOGE{};
テンプレートのクラス・・・では意味不明だからクラステンプレートにパラメータを与えて実体化させたクラス。HOGE<int>,HOGE<double>,...

312 :デフォルトの名無しさん:2009/12/03(木) 19:11:30
214です。
しばらくテンプレートの特殊化について調べていたのですが、
いまいちどういうことなのかわかりません。
助言、参考になるサイトなどありましたら、教えてください。

313 :デフォルトの名無しさん:2009/12/03(木) 19:21:47
http://ja.lmgtfy.com/?q=%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88+%E7%89%B9%E6%AE%8A%E5%8C%96

314 :デフォルトの名無しさん:2009/12/03(木) 19:23:14
調べているのですが… m(_ _)m

orz

315 :デフォルトの名無しさん:2009/12/03(木) 19:48:17
>>312
特殊化すると、ある特定のテンプレート引数が指定された場合だけ、それ以外の場合とは異なる中身にできる
例えばこんな感じ
template<class T> class foo { public: static const int FOO = 1; };
template<> class foo<void> { public: static const int FOO = 0; };
この場合、 foo<int>::FOO や foo<long>::FOO は 1 だが、 foo<void>::FOO だけ 0 になる

316 :312:2009/12/03(木) 20:03:52
なるほど!
ありがとうございます。

317 :デフォルトの名無しさん:2009/12/03(木) 22:04:21
メンバ変数を初期化したいのですが、
javaで他のコンストラクタを呼び出す
『this(String s)』に相当する方法はありませんか?

318 :デフォルトの名無しさん:2009/12/03(木) 22:05:12
>>307
>>256といい、釣りもほどほどにしとけよ

319 :デフォルトの名無しさん:2009/12/03(木) 22:37:32
釣りだと思うなら、釣られるのもほどほどにしとけよ

320 :デフォルトの名無しさん:2009/12/03(木) 22:39:52
class A
{

321 :デフォルトの名無しさん:2009/12/03(木) 22:40:50
コンストラクタはinit()を呼び出すだけにして初期化はinit()でやるようにすればいいよ

322 :317:2009/12/03(木) 22:47:50
>>321
やっぱり、それしか方法が無いんですか
わかりました、ありがとうございます

323 :デフォルトの名無しさん:2009/12/03(木) 23:27:58
前スレより
967 名前:デフォルトの名無しさん[] 投稿日:2009/11/28(土) 12:28:56
あるコンストラクタから別のコンストラクタを呼べませんでしょうか?
例えば
MyClass(){****}
MyClass(int num)
{
std::cout << num << "\n";
****
}
の様に****が共通の場合、MyClass(int num)の中でデフォルトコンストラクタを呼びたくなります。
現行のC++では可能でしょうか?またC++0xでは可能になりますでしょうか?

968 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 12:34:19
>>967
可能でありません。可能になります。

969 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 12:34:29
0xでは可能だけど03では別に関数を作るしかない

970 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 12:34:57
>>967
お察しのとおり、C++0x の Delegating constructors で可能になる予定。

971 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 12:35:26
>>967
0xではできるようになるから実装が出てくるまで待とう

974 名前:967[sage] 投稿日:2009/11/28(土) 12:37:30
>>968-971
ありがとうございます。
楽しみにC++0xを待ちつつ、今は別のinline メンバ関数を用意してどうにかします。

324 :デフォルトの名無しさん:2009/12/04(金) 05:27:24
>>318
なるほど

325 :デフォルトの名無しさん:2009/12/04(金) 06:20:47
どのようにすればC/C++からXMLを操作することが出来
るのでしょうか?

326 :デフォルトの名無しさん:2009/12/04(金) 08:02:40
>>325
いくつか方法がある。
- 自分で標準関数を使って一生懸命XMLを操作するライブラリを書く
- 開発環境にデフォルトで入ってるライブラリを使う(Qtとか)
- Xercesとかlibxmlみたいな外部ライブラリ使う

327 :デフォルトの名無しさん:2009/12/04(金) 10:04:28
msxml

328 : [―{}@{}@{}-] デフォルトの名無しさん:2009/12/04(金) 10:56:59
今はxmlliteの時代だぜ
ttp://home.att.ne.jp/banana/akatsuki/doc/xmllite/first01/index.html

329 :デフォルトの名無しさん:2009/12/04(金) 14:04:39
自作 正規表現で良いだろ
読み取るだけなら
生成するなら、ライブラリ
習得に手間掛かるが
自分で正規な出力するよりかは楽

330 :デフォルトの名無しさん:2009/12/04(金) 14:22:21
fstreamについてなんですが、
ifstreamクラスで文字列を読みとろうとすると、改行まで読み取られます。
空白まで読み取るというようには出来ないでしょうか?

331 :デフォルトの名無しさん:2009/12/04(金) 14:46:33
すいません。
半角スペースは区切りになってます。
ただ、全角スペースを区切りとして認識してもらう方法ってありませんか?

332 :デフォルトの名無しさん:2009/12/04(金) 15:14:15
自分で区切れやチンカス

333 :デフォルトの名無しさん:2009/12/04(金) 15:31:18
短い処理時間を計測したいのでclockよりも精度の高いgettimeofdayを使いたいのですが、
gettimeofdayが使用されたネット上のコードを見ると
#include <time.h>
#include <sys/time.h>
とあるようにtime.hとは別にsys/time.hをインクルードする必要があるみたいです。

このsys/time.hはどこから入手すればよいのでしょうか?

334 :デフォルトの名無しさん:2009/12/04(金) 15:38:00
Linux専用関数じゃねーのそれ

335 :デフォルトの名無しさん:2009/12/04(金) 15:59:38
簡単な質問ですいませんが教えてください
C++のプログラムです。
下図に示すように、整数を入力して指定する位置の
ビットを反転した値を出力するプログラムを作成せよ。
ビット位置は最下位ビットを0とすること。
例えば12を入力して反転するビット位置を2とすると、
12の最下位から3番目のビットは1なので
これを反転して0に変えると出力は8となる。

整数を入力: 12
反転するビットの位置を入力(0〜31): 2
反転した結果: 8

336 :デフォルトの名無しさん:2009/12/04(金) 16:29:21
>>335
それで、質問の内容は?
「整数を入力のやり方がわかりません」 とか、具体的に書いてください

337 :デフォルトの名無しさん:2009/12/04(金) 16:48:11
struct Hoge{
  operator Hoge&()const{
    return *this;
  }
};
このキャスト演算子が無限ループにならないような参照の返し方ってありますか?

338 :デフォルトの名無しさん:2009/12/04(金) 16:59:39
C#DLLをCでNET不要で利用する方法ありますか

339 :デフォルトの名無しさん:2009/12/04(金) 17:04:52
DLLがNET使ってるから無理か。
C#DLLをC++DLLにする方法ありますか。
ソースのC#->C++化でも良いです

340 :デフォルトの名無しさん:2009/12/04(金) 17:49:50
一カ所、NET汚染されただけで、ほぼネイティブの実行ファイルなのに
NET入れないと動かないのが嫌なんです。
DotNetZipLibというのを使いたいのですが、いい方法無いですか。
zip64の追記が出来る方法でも良いです、

341 :340:2009/12/04(金) 17:59:09
DotNetZipLibは、追記できませんでした。
tmpを生成してから追記してました。
元のファイルに直接追記できるやつありますか。

342 :デフォルトの名無しさん:2009/12/04(金) 18:01:20
>>341
俺も気になるから調べてみるか

343 :デフォルトの名無しさん:2009/12/04(金) 18:08:33
フォーマットの微妙な違いをチェックするためにtmp作成するのだと思いますが。
zipはそのライブラリのフォーマットであると仮定すればtmpなしでいけると思うのですが

344 :デフォルトの名無しさん:2009/12/04(金) 18:30:58
zipの追記ネタって前スレでもやってなかったか?
まだやってんのか

345 :デフォルトの名無しさん:2009/12/04(金) 18:40:23
作業につかう領域を減らしたいというのであれば可能
ディスクの読み書きを減らしたいというのであれば不可能

346 :デフォルトの名無しさん:2009/12/04(金) 18:48:57
ライブラリ(のurl)のうpが無いのですが

347 :デフォルトの名無しさん:2009/12/04(金) 18:52:20
webページの収集で使いたいのですが。
実行毎にtmp生成して追記するのは都合が悪いです。

348 :デフォルトの名無しさん:2009/12/04(金) 18:54:09
ttp://www.pkware.com/documents/casestudies/APPNOTE.TXT
ここ見たらディスクの読み書きも減らせそうだったわ頑張れ

349 :デフォルトの名無しさん:2009/12/04(金) 18:55:29
zipでまとめるのやめたらいいんじゃね

350 :デフォルトの名無しさん:2009/12/04(金) 19:01:13
5Gとか貯まったら、毎回コピー発生するのはかなり都合が悪いです。
zipは必須なんです。容量節約とindex付きでアクセス速度が良くなるので。

351 :デフォルトの名無しさん:2009/12/04(金) 19:03:21
>>348
zip64の追記ライブラリ公開してくれお
需要あってアクセス出ると思うよ

352 :デフォルトの名無しさん:2009/12/04(金) 19:16:22
ファイル毎か何個か毎に圧縮すれ

353 :デフォルトの名無しさん:2009/12/04(金) 19:16:49
>>350
いくつかの書庫に分割すればいいんじゃね?

354 :デフォルトの名無しさん:2009/12/04(金) 19:25:47
アクセスするときが都合悪いけどそれが良いですかね。
zipをマウントするとき、複数同時にしないと行けないので。
10Mくらいずつでやってみます。これならコピーがあっても困らないので。

355 :デフォルトの名無しさん:2009/12/04(金) 21:04:25
BCCのSTLport binary置いてあるところしりませんか。

356 :デフォルトの名無しさん:2009/12/04(金) 21:14:21
あと、boostもあるといいです。

357 :デフォルトの名無しさん:2009/12/04(金) 21:15:07
しりませんよ。

358 :デフォルトの名無しさん:2009/12/04(金) 21:17:48
修正しないとビルドできないようです。あと最新版ではBCCの対応がカットされてます。
古いやつでも良いので動作するバイナリ教えてください・

359 :デフォルトの名無しさん:2009/12/04(金) 21:18:43
>>356
あるといいですね。

360 :デフォルトの名無しさん:2009/12/04(金) 21:19:07
bccなんてなんで使うの?

361 :デフォルトの名無しさん:2009/12/04(金) 21:19:35
VC2008用のバイナリから
インポートライブラリ作ってみたのですが
ヘッダで文法エラーでます。

362 :デフォルトの名無しさん:2009/12/04(金) 21:19:52
>>353
出番ですよ。

363 :デフォルトの名無しさん:2009/12/04(金) 22:33:31
先輩方お教えください。

  typedef struct tagBITMAPFILEHEADER{
    uint16  bfType __attribute__((packed));
    uint32  bfSize __attribute__((packed));
    uint16  bfReserved1 __attribute__((packed));
    uint16  bfReserved2 __attribute__((packed));
    uint32  bfOffBits __attribute__((packed));
  } BITMAPFILEHEADER;

  typedef struct tagBITMAPFILEHEADER{
    (中略)
  } BITMAPFILEHEADER __attribute__((aligned(1)));

  #pragma pack(push, 1)
  typedef struct tagBITMAPFILEHEADER{
    (中略)
  } BITMAPFILEHEADER;
  #pragma pack(pop)

は、どれを使っても同じでしょうか?
コンパイラは TDM/MinGW gcc 4.4.1 です。

364 :デフォルトの名無しさん:2009/12/04(金) 23:38:28
C言語を勉強しようと思ってるんですけど 
マイクロソフトのVisual C++2008のソフトをインストールしたのですが 
その後スタート→新規作成→プロジェクトを選択して 
Win32→Win32コンソールアプリケーションを選択してプロジェクト名をsampleにしてOKタブをクリックしようとしてもOKボタンが表示されませんがどうしたらいいか分かりません 
ぜひアドバイスをお願いします

365 :デフォルトの名無しさん:2009/12/04(金) 23:40:58
初心者はbccにしとけ
vc++は実戦向きツール

366 :デフォルトの名無しさん:2009/12/04(金) 23:43:44
ボタンやメニューのグレー表示は、コード書くたびに罪悪感を憶えるな
冷たいUIの教科書みたいなもんでさ

367 :デフォルトの名無しさん:2009/12/04(金) 23:56:57
>>364
bccやVCを勉強する前に
スレタイを読む練習が必要だと思うんだけど。
自分でもそう思わない?

> C言語
C言語やるならbccが良いと思う。


368 :デフォルトの名無しさん:2009/12/05(土) 00:10:15
>>367
同じく

369 :デフォルトの名無しさん:2009/12/05(土) 01:44:23
zlibは複数スレッドで圧縮 展開しても辞書は壊れませんか。

370 :369:2009/12/05(土) 03:07:28
つか、辞書データは一体どこへ記録されるの?

371 :デフォルトの名無しさん:2009/12/05(土) 04:05:31
複数スレッドで圧縮して、辞書は共通って出来るの?
ロックして、圧縮関数にはシングルスレットと同じ風にみせればいいけど・。
パフォーマンスが落ちるから同時に圧縮したいけど。

372 :デフォルトの名無しさん:2009/12/05(土) 07:41:12
おちつけ

373 :デフォルトの名無しさん:2009/12/05(土) 11:25:29
z_stream をスレッドごと (ファイルごと) に別々にご用意ください

374 :デフォルトの名無しさん:2009/12/05(土) 11:43:36
TestClass t;
TestClass *t = new TestClass();
この2つはインスタンスを作るという意味では同じ事をやっているわけですが、
どうやって使い分けるんですか?

375 :デフォルトの名無しさん:2009/12/05(土) 11:46:04
インスタンスをいつ削除するかによって

376 :デフォルトの名無しさん:2009/12/05(土) 12:35:45
>>375
本当にそれだけ何ですか?

377 :デフォルトの名無しさん:2009/12/05(土) 12:47:27
そのインスタンスがかなり大きい場合、スタック領域の消費を抑えるために常にnewを選ぶこともあります

378 :デフォルトの名無しさん:2009/12/05(土) 12:50:55
>>377
なるほど、ありがとうございます

379 :デフォルトの名無しさん:2009/12/05(土) 12:58:24
>>375
>>377
この二つが本当のところじゃない?
それ以外の理由は・・・pimplやりたいとか?

380 :デフォルトの名無しさん:2009/12/05(土) 13:18:11
>>377
スタック領域を節約したいってどういう状況?

381 :デフォルトの名無しさん:2009/12/05(土) 13:22:17
節約したいんじゃなくてスタックに入りきらない場合だろ

382 :デフォルトの名無しさん:2009/12/05(土) 13:24:47
組み込み環境とか
PCみたいに何MBもスタックあるような環境じゃ普通は気にしないな

383 :デフォルトの名無しさん:2009/12/05(土) 13:40:51
>>382
たしかに気にしないですね

384 :デフォルトの名無しさん:2009/12/05(土) 14:25:23
と言うかスタックに大きなデータを配置できるほど事前情報が揃ってる事自体稀だろ

385 :デフォルトの名無しさん:2009/12/05(土) 16:48:54
c++のnullって意味ないんだね
ダメじゃん

386 :デフォルトの名無しさん:2009/12/05(土) 17:15:01
そうだ。 0 を使え。別に困らないから。

387 :デフォルトの名無しさん:2009/12/05(土) 17:15:46
Cygwin用の統合環境ありませんか。
コマンドプロンプトがやりにくいです

388 :デフォルトの名無しさん:2009/12/05(土) 17:22:48
C++はvoid *の扱いが厳しくなったからNULLがだめになったんだ

389 :デフォルトの名無しさん:2009/12/05(土) 17:23:45
0 もマジックナンバーと考えると NULL を使うべきだろう

390 :デフォルトの名無しさん:2009/12/05(土) 17:28:05
>>388
別に C でも NULL は役に立たんよ。ヘッダをインクルードするほうがめんどくさい。

391 :デフォルトの名無しさん:2009/12/05(土) 17:30:12
#define NULL reinterpret_cast<void*>(0)

392 :デフォルトの名無しさん:2009/12/05(土) 17:32:02
set_emptyとか作れよ

393 :デフォルトの名無しさん:2009/12/05(土) 17:35:34
>>391-392 なにそれこわい

394 :デフォルトの名無しさん:2009/12/05(土) 17:54:32
ヌルポインタ経由でメンバ関数呼び出すのって鼻から悪魔だっけ?

395 :デフォルトの名無しさん:2009/12/05(土) 17:56:04
カナダでは法律で禁止されてる

396 :デフォルトの名無しさん:2009/12/05(土) 18:02:48
>>394 未定義動作

397 :デフォルトの名無しさん:2009/12/05(土) 18:15:35
だからC++0xでnullptrが入るんだろうが

398 :デフォルトの名無しさん:2009/12/05(土) 18:58:11
void *p = 0;って64bitでバグらないの?

399 :デフォルトの名無しさん:2009/12/05(土) 19:02:00
てことはC++/CLRの選択は正しかったのですか

400 :デフォルトの名無しさん:2009/12/05(土) 19:02:42
言語名を間違う俺に隙はなかった

401 :デフォルトの名無しさん:2009/12/05(土) 19:08:45
>>398 なんで 64 bit とか関係あると思うの?

402 :デフォルトの名無しさん:2009/12/05(土) 19:13:50
誤爆すか

403 :402:2009/12/05(土) 19:15:41
>>399-400へ言った言葉ね。


404 :デフォルトの名無しさん:2009/12/05(土) 19:16:46
>>396
ぬるぽじゃないの?

405 :デフォルトの名無しさん:2009/12/05(土) 19:20:49
大至急の質問があります。

#include <sys/utime.h> 
または #include <utime.h>
をロードする方法ありますか。

sysのあるかないかです。

406 :デフォルトの名無しさん:2009/12/05(土) 19:29:32
sysつきなのは確認できた所 VC++だけで次のようにしたらうまくいきました。

#if defined(_MSC_VER)
#include <sys/utime.h>
#else
#include <utime.h>
#endif

407 :デフォルトの名無しさん:2009/12/05(土) 19:31:54
utime.h
って標準じゃない・・・よね?


408 :デフォルトの名無しさん:2009/12/05(土) 19:40:36
標準でないから位置が違うんです。

409 :407:2009/12/05(土) 19:42:35
そもそも標準が何らかのディレクトリの中に入っているわけがないか。


410 :387:2009/12/05(土) 20:12:53
エクリプスとくらべて話題が少ないと思いますが
NetBeans IDE はかるく、CYGwinが動作していいです。

411 :デフォルトの名無しさん:2009/12/05(土) 21:33:49
>>401
なんで関係ないと思うの?

412 :デフォルトの名無しさん:2009/12/05(土) 23:04:14
まともに情報を引き出せないような質問はクソだ

413 :デフォルトの名無しさん:2009/12/06(日) 00:53:08
質問です。

現在、ファイル内に書き込まれたデータから必要な要素だけを抜き取り、その要素を新しいtxtファイルに
書き込むプログラムを実装したいと思っています。

file1.objの中には、

f 1/1/1 2/2/2 3/3/3
f 2/2/2 3/3/3 4/4/4
f 2/2/2 3/3/3 5/5/5
f 10/10/10 13/13/13 15/15/15

のような形のデータが入っています。

1 2 3
2 3 4
2 3 5
10 13 15
のようにしてfile2に保存をしたいのですが、q1,q2,q3の値がp1,p2,p3と同じになってしまい、r1,r2,r3の値を求める際にエラーになってしまいます。

ポインタのあたりが怪しい所までは突き止めたのですが、どのように対処すればよいか教えていただけませんか?


class COR2{
public:
char vertex1[256];
char vertex2[256];
char vertex3[256];
};



414 :413:2009/12/06(日) 00:55:34
class mesh_OBJ{
public:
string read;
int mesh_target1, mesh_target2, mesh_target3;
COR2 val2;
vector<COR2> mesh_pattern;
void mesh(){
                     mesh_pattern.clear();
ifstream load("file1.obj");
ofstream save("file2..txt");



415 :デフォルトの名無しさん:2009/12/06(日) 00:56:17
while(load){
load >> read;
if(read == "f"){
load >> val2.vertex1;
load >> val2.vertex2;
load >> val2.vertex3;
char find1[2] = "/";
char find2[10] = "123456789";
char *p1, *p2, *p3;
char *q1, *q2, *q3;
char *r1, *r2, *r3;
p1=strpbrk(val2.vertex1,find1);
p2=strpbrk(val2.vertex2,find1);
       p3=strpbrk(val2.vertex3,find1);
q1=strpbrk(p1,find1);
q2=strpbrk(p2,find1);
q3=strpbrk(p3,find1);
r1=strstr(q1,find2);
r2=strstr(q2,find2);
r3=strstr(q3,find2);
mesh_target1 = atoi(r1);
mesh_target2 = atoi(r2);
mesh_target3 = atoi(r3);
save<<r1<<" "<<r2<<" "<<r3<<endl;
}
}
load.close();
save.close();
}
}; VC++ 2008

416 :413:2009/12/06(日) 00:57:24
415=413です。

長くなってしまいました・・・

よろしくお願いします。

417 :デフォルトの名無しさん:2009/12/06(日) 00:59:23
>>415
>char find2[10] = "123456789";

0は無しですか?

418 :デフォルトの名無しさん:2009/12/06(日) 01:02:53
あ、見つけるのだけだから0はイランの根

419 :デフォルトの名無しさん:2009/12/06(日) 01:27:10
まずstrpbrkの使い方くらい調べろ。
p1〜p3が最初の/を指してるところから疑問に持て。

420 :413:2009/12/06(日) 01:39:26
p1~p3で"/"から始まる文字列になっているのでq1~q3の処理は先頭の"/"を読み取ってしまっていることは
アドバイスで分かりました。

ありがとうございます。

後ろから検索するstrrchr(val2.vertex1, "/");
で解決使用とビルドを行ったのですが、"/"がエラーとなってしまいます。

特殊記号の場合、表記どのようにすればよいでしょうか?

また、substringのLengthで文字の長さを調べて場合分けの方法でも試しているのですが、上手くいってません。


アドバイスよろしくお願いします。

421 :413:2009/12/06(日) 03:01:57
string vertex1
string vertex2
string vertex3
として val2.vertex1, val2.vertex2, val2.vertex3に格納されているデータの長さを取り出したいのですが、

ネットで調べても

string str = " ";
i=str.length
の形でかくと書かれています。

しかし、文字列を最初からしていできないので、文字列変数を読み込ませたいのですが、エラーがでてしまいます。

どのようにすればよいでしょうか?

422 :デフォルトの名無しさん:2009/12/06(日) 07:47:58
>>418
ムダレスやめろw

423 :デフォルトの名無しさん:2009/12/06(日) 10:00:11
>415
strstrの用途を勘違いしている。
そこはstrpbrkを使うところ。
(手っ取り早くすますならq1++するだけでいい)

atoiのパラメタ指定に誤りがある。
そこはC文字列ではなく文字を指定する。
>420も同様。

>421
エラーが起こったじゃ分からんわ。
エラーメッセージを読んでいないことだけは分かったがな。

424 :419:2009/12/06(日) 11:44:41
おはようさん。もう出来たかい?
まだなら作ってもいいけど…

まず仕様を明確にしてくれ。
何がしたいクラスなのか、どう使いたいのかさっぱりわからん。
・1/1/1と来たとき最後のデータしかいらないのか、そもそもそれは何なのか
・メンバとして保持すべきなのはどこまでなのか

425 :413:2009/12/06(日) 12:29:24
>>423
p1 = strpbrk(val2.vertex1,find1);
p2 = strpbrk(val2.vertex2,find1);
p3 = strpbrk(val2.vertex3,find1);

q1 = strpbrk(p1,find2);
q2 = strpbrk(p2,find2);
q3 = strpbrk(p3,find2);

r1 = strpbrk(q1,find1);
r2 = strpbrk(q2,find1);
r3 = strpbrk(q3,find1);
s1 = strpbrk(r1,find2);
s2 = strpbrk(r2,find2);
s3 = strpbrk(r3,find2);

fprintf(fp, "%d %d %d\n", *s1, *s2, *s3);

_ifnd SSTRPBRK <add ecx,1>
mov al,[esi]

426 :デフォルトの名無しさん:2009/12/06(日) 12:35:23
C++で(出来れば汎用的に)DB扱うのに何使うのがいいかなーと思って、
何がいいかは環境によって違うだろうけど、皆が何使ってるか聞きたい。
環境と使ってるもの合わせて書いてみてー

427 :デフォルトの名無しさん:2009/12/06(日) 12:41:58
>>426
誰に頼んでるんだい?
>>425に頼みなさい。

428 :413:2009/12/06(日) 12:48:26
>>423

という形に書き換えたところ、s1~s3のポインタには欲しい値がえられているはずなのですが、

_ifnd SSTRPBRK <add ecx,1>
mov al,[esi]

このようなエラーが出てしまいます。

また、val2.vertex1の中身(1/1/1...etc)などを読み取って欲しいのですが、

string str1 = "val2.vertex1";
i=str1.length

のように表記してしまうと、val2.vertex1という文字に対して長さを測ってしまうため、意図している文字列の長さではないので
何かうまい方法がないのかと思って説明させていただきました。

>>425

現在、3Dメッシュデータから、メッシュの合成パターンを読み取ってそのパターンを調べています。

file1.objのファイルの中には、メッシュ合成に用いるパターンが(f 1/1/1 2/2/2 3/3/3)のように記述されています。
1/1/1の場合、(1番目の頂点/1番目の頂点位置/1番目の法線)のように、どうやらメッシュ作成に利用する為にこのような形で書かれている
のだと思います。

ここで、頂点のパターンだけを"file2.txt"のなかに保存しておくことで、他のヘッダファイルで後に利用する関数内での処理に用いようと考えています。

429 :413:2009/12/06(日) 12:50:31
>>424
の間違えでした。

環境はVC++ 2008です。

よろしくお願いします。

430 :419:2009/12/06(日) 13:32:44
>>428
C++ソースレベルでどこまで実行出来てるのか見た?
ステップ実行するなりprintfか何かで到達点を絞り込まないと。

> string str1 = "val2.vertex1"; 
> i=str1.length
やるなら
string str1( val2.vertex1 );
i=str1.length();
でしょうが。なんでlengthの後ろの括弧を書かないの。
まさか他の言語と間違えてないよね?

> 1/1/1の場合、(1番目の頂点/1番目の頂点位置/1番目の法線)のように、
意味不明。なら何でCOR2のメンバがvertex1,vertex2,vertex3なのさ?
てっきり頂点1、頂点2、頂点3(各x/y/z)で1行が三角形を表してるもんだと思ってたが。

> ここで、頂点のパターンだけを"file2.txt"のなかに保存しておくことで、他のヘッダファイルで後に利用する関数内での処理に用いようと考えています。
じゃなくて、このクラスを使う側のプログラムがどのようにメソッドを呼び出すかだって。

int func(void)
{
    mesh_OBJ obj;
    obj.mesh();
}

ってI/Fはあり得ないでしょ。

431 :426:2009/12/06(日) 13:59:09
>>427
誰か名指ししないとだめなのかい
「皆が」って言ったつもりなんだが
一人に聞いても仕方ないだろう

432 :413:2009/12/06(日) 14:19:43
>>430

void Cauthentication_tDlg::OnBnClickedanalysis()
{
使用変更でメッシュパターンが変更された場合、1度だけ実行

mesh_OBJ make_mesh_pattern;

make_mesh_pattern.mesh();

}

433 :413:2009/12/06(日) 14:37:53
while(load){

load >> read;
if(read == "f"){


load >> val2.vertex1;
load >> val2.vertex2;
load >> val2.vertex3;

string str1(val2.vertex1);

if(str1.length() == 5){
save << str1.substring(0,1) << endl;
}
if(str2.length() == 8){
save << str1.substring(0,2) << endl;
}
if(str3.length() == 11){
save << str1.substring(0,3) << endl;
}
}


434 :413:2009/12/06(日) 14:38:34
現在、上記のようなプログラムで、val2.vertex1の中身が(1/1/1)~(9/9/9)までの場合、先頭から1文字
(10/10/10)~(99/99/99)までの場合、先頭から2文字、(100/100/100)~(999/999/999)までの場合、先頭から3文字といった形で
欲しい値を切り出そうとしています。これが成功すれば、val2.vertex2 , val2.vertex3も同様にして行うつもりなのですが、

'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_istream<_Elem,_Traits> &(__cdecl *)(std::basic_istream<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]

というエラーになってしまいます。初心者の私には、このエラーがなにを意味しているのかがわからない状態です。

file1.objの中には、

f 1/1/1 2/2/2 3/3/3
f 2/2/2 3/3/3 4/4/4
f 2/2/2 3/3/3 5/5/5
f 10/10/10 13/13/13 15/15/15

のような形のデータが入っています。

一行目の(1/1/1)をvertex1, (2/2/2)をvertex2, (3/3/3)をvertex3と見なしています。

435 :419:2009/12/06(日) 14:38:57
困ったな、何かツッコミ所がどんどん増えてきたぞ

436 :デフォルトの名無しさん:2009/12/06(日) 15:06:16
えーと…こういうことだろうか。

fはフェイスかなんかの略で、直後にトライアングル1枚分のデータを持ってる。
「頂点インデックス/座標インデックス/法線インデックス」が頂点1個分のデータで、
これがトライアングルの頂点分、つまり3つ並んでる。
それで、vertex1には各トライアングルの第1頂点の頂点インデックスのみ、
vertex2,3も同様に第2、第3頂点の頂点インデックスのみを格納したい、と。

437 :419:2009/12/06(日) 15:18:29
>>432
> void Cauthentication_tDlg::OnBnClickedanalysis() 
void Cauthentication_Dlg::OnBtnClickedanalysis()
の間違いなんだろうけど…。

・何で認証ダイアログ(?)でメッシュパターンの仕様変更しなきゃいけないの?
・一度だけ実行するんだったら別途コンソールアプリにでもすれば?
・変換する関数名がmeshっていくら何でもないでしょ。せめてconvertとか。
・入力ファイル名、出力ファイル名は固定なの?


>>433
多分>425>428で落ちてたのは
whileループの先頭でreadをクリアしてなかったからじゃないの?

while(load){}
    read = "";
    load >> read;
    (略)

読み込むべき行がないのにreadが"f"のままだからそのまま先に進んじゃって…


>>434
・「1/22/333」や「22/333/333」だったらどうすんの
・結局、何をどう出力したいの?

438 :デフォルトの名無しさん:2009/12/06(日) 15:26:29
標準C++ではソースファイルの1行あたりの
文字数制限はありますか?
また、現実的にはそれを守らない事による困った事態が起こった経験は
みなさんありますか?


439 :デフォルトの名無しさん:2009/12/06(日) 15:30:03
>>413 やりたいことだけハッキリさせろ。
#include <iostream>
#include <fstream>
using namespace std;

int main() {
  ifstream load("file1.obj");
  ofstream save("file2.obj");
  char a0[10], a1[10], a2[10], a3[10];

  if(!load || !save) {load.close(); save.close(); return 1;}
  while(load >> a0 >> a1 >> a2 >> a3) {
//    cout << a0 << '=' << a1 << '=' << a2 << '=' << a3 << endl;
    save << atoi(a1) << ' ' << atoi(a2) << ' ' << atoi(a3) << endl;
  }
  load.close(); save.close(); return 0;
}

440 :デフォルトの名無しさん:2009/12/06(日) 15:31:05
無いだろ。 文字数=読み込み可能ファイルサイズだろ。
エディタの編集サイズも影響ある。
コンパイラとしては ;  も、 ; + 改行 も違いなし。

441 :デフォルトの名無しさん:2009/12/06(日) 15:33:15
>>438
仕様的にはなかったと思うけど、
コンパイラによっては制限がある場合もある
といっても千文字以上とか普通にはあり得ないレベルだから
普通は気にしなくてもいい
(コードの自動生成とかしてると気にする必要はあるかもしれないが)

442 :デフォルトの名無しさん:2009/12/06(日) 15:34:03
>>440
プリプロセスでは改行は大きな意味を持つぜ

443 :413:2009/12/06(日) 15:36:32
>>436
その通りです。
わかりにくくてすみません。

>>437
実験用なので、別途のコンソールアプリを作成しなくても一度実行してファイルを作ってからコメントアウトすれば
とりあえずは問題ないのでこのようにしました。
入力ファイル名は固定です。
出力ファイル名は固定ではありません。

>>・「1/22/333」や「22/333/333」だったらどうすんの
このような状況は起こりません。
常に、先頭の"/"までの物と同じ数字が並んでいます。

>>read = " ";を追加

'substring' : 'std::basic_string<_Elem,_Traits,_Ax>' のメンバではありません。
というエラーをはかれてしまいます。

444 :デフォルトの名無しさん:2009/12/06(日) 15:54:52
>>438
行数じゃないが、VCで1万文字くらいの文字列リテラルを作ろうとして怒られたことならある

445 :419:2009/12/06(日) 15:57:19
>>443
せめて
class MeshConverter{
public:
    void convert( istream &in, ostream &out );
};
くらいにならんもんかね。まぁこれとて特別良いもんでもないけど…

void func(void)
{
    MeshConverter converter;

    ifstream ifs( "file1.obj" );
    converter.convert( ifs, cout );

    converter.convert( cin, cout );

    ofstream ofs( "file2.txt" );
    converter.convert( cin, ofs );
}

とか入力も出力も切り替え放題だろうに。

446 :419:2009/12/06(日) 15:58:24
>>443
> >>・「1/22/333」や「22/333/333」だったらどうすんの 
> このような状況は起こりません。 
> 常に、先頭の"/"までの物と同じ数字が並んでいます。
本当にないの?
だったら最初の数字だけ取ってくれば良かったじゃないの。
strtol使えば一発じゃないか。

> >>read = " ";を追加

> 'substring' : 'std::basic_string<_Elem,_Traits,_Ax>' のメンバではありません。 
> というエラーをはかれてしまいます。
いや、>425>428の頃のプログラムに対するレスだから。
てかその追加部分とsubstringが何で関係すると思ったのか。
そもそもstringクラスにsubstring等というメソッドは無い。

447 :デフォルトの名無しさん:2009/12/06(日) 16:04:33
そもそもC#なんじゃね?と思ってきた

448 :デフォルトの名無しさん:2009/12/06(日) 16:14:22
>413
わざわざC++でやらんでもsedでやっときゃいいじゃん
% sed e- 's/^f *//' -e 's|\([0-9][0-9]*\)/\1/\1|\1|g' < file1.obj > file2

449 :デフォルトの名無しさん:2009/12/06(日) 16:19:49
C++\(^o^)/オワタ

450 :デフォルトの名無しさん:2009/12/06(日) 16:21:14
>>438
Characters in one logical source line [65536].
(http://www.kuzbass.ru/docs/isocpp/limits.html より)
だそうだ

451 :448:2009/12/06(日) 16:37:34
訂正: × e- → ○ -e

452 :413:2009/12/06(日) 16:44:10
みなさんアドバイスありがとうございました。

結局、substringで宣言していたのが間違いなことに気づきました。
substring(0,1)→substr(0,1)
と変えたら欲しいデータが出てきました。

長いことアドバイスをありがとうございました。

453 :デフォルトの名無しさん:2009/12/06(日) 16:46:48
気付いたじゃなくて気付かされた、じゃないのー?

454 :438:2009/12/06(日) 17:00:54
>>441
>>444
>>450
一行の文字数に関しては
普通に打っていれば問題にはならないですね。
nestされたテンプレートがで17までとか
現実的にちょっと引っかかる恐れがあって、
そこからの類推で心配していました。
ありがとうございます。


455 :419:2009/12/06(日) 17:08:09
設計もネーミングもオチもひどいもんがあるなw

456 :デフォルトの名無しさん:2009/12/06(日) 17:17:31
自分の扱おうとしているデータの抽象化ができていない。

457 :デフォルトの名無しさん:2009/12/06(日) 19:11:36
まったく・・・

458 :デフォルトの名無しさん:2009/12/06(日) 20:02:15
STLのイテレーターをメンバ変数にするのはいいのかな?
listでキャシュみたいに使えばちょっとは早くなるかなぁと思ってみたり。

459 :デフォルトの名無しさん:2009/12/06(日) 20:38:54
>>458
イテレータ一般では無効になるタイミングに気をつけないといけないからちょっと危ない
気配がするけど、 list なら対象要素がコンテナ内にある限り大丈夫だし、他のコンテナでも
クラス内できっちり無効になるタイミングに気をつけて管理されていれば問題は無い。

460 :デフォルトの名無しさん:2009/12/06(日) 20:56:17
仕事さぼって2ちゃんねるで遊んでるやつを監視中

461 :デフォルトの名無しさん:2009/12/06(日) 21:00:59
やるんだったらラッパークラス用意してきっちり管理した方が良いと思う。
凄い面倒だけど。

それよりも中身自体をshared_ptrとかで共用したら?
イテレータを弄るときは大抵リストを操作するときなんだから、
あまり長時間保持するようなものじゃないと思う。


462 :デフォルトの名無しさん:2009/12/06(日) 22:00:54
Modern C++ Designに載ってる第4章のメモリプール的なものを作ってるんだけど、
オリジナルはvectorだけどlistの方がいいんじゃないかなと思って、
キャッシュ的に使うとなるとイテレータしかないのかなと考えたわけで。

463 :デフォルトの名無しさん:2009/12/06(日) 22:06:03
out_of_range

domain_error
はどう使い分けられるものでしょうか?


464 :デフォルトの名無しさん:2009/12/06(日) 22:18:44
>>463
http://www.geocities.jp/ky_webid/cpp/library/027.html
http://www.geocities.jp/bleis_tift/cpp/exception.html
これじゃだめ?

465 :デフォルトの名無しさん:2009/12/06(日) 22:20:36
>>464
そちらも拝見いたしましたが、
どうしても違いが分からないのです。
両方とも範囲外というエラーを表現しているのでは
ないかと思うのです。


466 :463:2009/12/06(日) 22:32:57
例えば、0除算エラーは
out_of_range

domain_error
のどちらで通知されるべきものなのでしょうか?


467 :デフォルトの名無しさん:2009/12/06(日) 22:35:34
>>463
数学的な関数における定義域についての「範囲外」が domain_error ってことで。
http://en.wikipedia.org/wiki/Domain_of_a_function

はっきりと数学的な意味を持たせたい場合以外は out_of_range でいいと思う。

468 :デフォルトの名無しさん:2009/12/06(日) 22:38:22
>>467
ありがとうございます。
そうさせていただきます。


469 :デフォルトの名無しさん:2009/12/06(日) 22:40:27
C++のdomain_errorはそういう意味じゃないけどね

470 :デフォルトの名無しさん:2009/12/06(日) 22:41:25
>>469
じゃ、どういう意味なんだ?

471 :デフォルトの名無しさん:2009/12/06(日) 22:48:08
問題領域だろ

472 :デフォルトの名無しさん:2009/12/06(日) 22:48:58
Application domainね

473 :デフォルトの名無しさん:2009/12/06(日) 22:50:44
C の errno.h で定義されてる数学関数( math.h )関連のエラー EDOM に対応して
用意しただけっぽいな。

domain_error が EDOM で range_error が ERANGE ってことで。
EDOM と ERANGE については C の規格 7.12.1 Treatment of error conditions を見れ。

474 :463:2009/12/06(日) 23:02:03
みなさんすみません。。。
規格を拝見してまいります。

475 :デフォルトの名無しさん:2009/12/07(月) 05:31:04
>>471
で?

476 :デフォルトの名無しさん:2009/12/07(月) 12:53:12
C++でサウンドファイルを操作するには
どうしたらいいでしょうか?

477 :デフォルトの名無しさん:2009/12/07(月) 12:55:35
C#で開発

478 :デフォルトの名無しさん:2009/12/07(月) 13:02:02
C++でサウンドファイルの形式をよみこんだりしたいです。
それとintは最大値を超えると最低値になるという理解であってますか?

479 :デフォルトの名無しさん:2009/12/07(月) 13:04:10
44kHzを22kHzに変換したいとかファイルを操作するだけなら fopen fseek fread fwrite fclose でおk

480 :デフォルトの名無しさん:2009/12/07(月) 13:13:08
再生もしたいです。

481 :デフォルトの名無しさん:2009/12/07(月) 13:41:36
ちなみにウインドーズ依存じゃないほうでよろしくお願いします。

482 :デフォルトの名無しさん:2009/12/07(月) 13:51:36
検索して
http://www.mega-nerd.com/libsndfile/
をみつけたんだけど、これって普通使いますか?
他にこれより良いやつあったらおしえてください。

483 :デフォルトの名無しさん:2009/12/07(月) 13:51:43
あなたでは不可能です
あきらめましょう

484 :デフォルトの名無しさん:2009/12/07(月) 13:57:27
>>483
ライセンスが売り物に出来るやつでも使えるの知りませんか?

485 :デフォルトの名無しさん:2009/12/07(月) 14:05:39
探してないなら自分で作るしかないだろ

486 :デフォルトの名無しさん:2009/12/07(月) 14:11:29
しかたないからつくるとしよう。

487 :デフォルトの名無しさん:2009/12/07(月) 14:35:25
>>485
作ってください。
1週間待ちますから。


488 :デフォルトの名無しさん:2009/12/07(月) 14:45:20
作ったらダウンロードしてお前も使うと言うことか?
絶対使うならソース公開してもいいが
1週間は無理だ

489 :デフォルトの名無しさん:2009/12/07(月) 16:46:15
配列サイズ(バイトサイズ?)を32や64などにすると
速度が上がると聞いたことがあるのですが、どのような
理由があるのでしょうか?

490 :デフォルトの名無しさん:2009/12/07(月) 16:57:28
きっちりしてるから

491 :デフォルトの名無しさん:2009/12/07(月) 18:56:24
>>490
木津さん、もうそれくらいにした方が。

492 :デフォルトの名無しさん:2009/12/07(月) 19:01:33
速いといってもいろいろ種類があるが2^nサイズだとメモリが無駄にならなくてアクセス距離が短くなったりGCの処理が軽くなったりといった理由だろう。
殆ど実装依存だが。
ちなみにC++の動的配列確保実装は配列のサイズをどこかに保持していなければならないのでそれも含めて丁寧に2^nサイズにする事は事実上不可能。

493 :デフォルトの名無しさん:2009/12/07(月) 19:41:23
実際はメモリ節約するのが一番。
100Mより10M
HDDに移動されると圧倒的な速度低下。
アルゴリズムから見直すべき

494 :デフォルトの名無しさん:2009/12/07(月) 19:55:37
>>490
木津さんっていう名前なの?

495 :デフォルトの名無しさん:2009/12/07(月) 19:58:18
tst

496 :デフォルトの名無しさん:2009/12/07(月) 20:06:41
int C_Status(void)
{int s;
if(P4.DR.BIT.B4==0||P4.DR.BIT.B5==0||P4.DR.BIT.B6==0||P4.DR.BIT.B7==0)
s=2;
else
s=0;
return(s);}

int main(void)
{(初期設定部分なので中略)
while(!C_Status());
while(1)
{seiten();
breek(); }}
上記のwhile(!C_Status());という記述の意味がいまいちわかりません。
どなたかご教授お願いします。

497 :デフォルトの名無しさん:2009/12/07(月) 20:07:49
その前にP4が何か書いてくrえ

498 :デフォルトの名無しさん:2009/12/07(月) 20:08:51
ペルソナ4です

499 :496:2009/12/07(月) 20:12:59
すいませんP4はポート4の事です。B4は4ビット目という意味です。
H8マイコンを使っています。

500 :デフォルトの名無しさん:2009/12/07(月) 20:13:45
C_Status関数が関数外部に対して副作用がないからスレッドで別プロセス走らせておいてその様子を見ているだけとえすぱー

501 :489:2009/12/07(月) 20:15:27
実測で試してみるくらいしかないような話なんですね。
わかりました。ありがとう。

502 :デフォルトの名無しさん:2009/12/07(月) 20:16:12
何実測だとか関係のない事言ってるんだよ

503 :デフォルトの名無しさん:2009/12/07(月) 20:43:15
>>496
「C_Status() が 0 を戻したら 「;」 (つまり “何もしない”)」
を、C_Status() が 0 以外を戻すまで繰り返す。

…そういうことでなくて?

504 :デフォルトの名無しさん:2009/12/07(月) 20:57:36
>>496
>上記のwhile(!C_Status());という記述の意味がいまいちわかりません。
C_Status()を呼んで、その返り値を論理否定して、真の間ずっとループ。
C/C++で整数を論理値として評価する時は、0はfalse, 0以外はtrue。
つまりP4の4ビット目か5ビット目か6ビット目か7ビット目のどれかが0になるまでループ。
「教授」じゃなくて「教示」。

505 :496:2009/12/07(月) 22:18:10
>>503
>>504
すごくよくわかりました。ありがとうございます。

506 :デフォルトの名無しさん:2009/12/07(月) 23:03:01
教授も教示も似たようなもんだ。
細かいな。

507 :デフォルトの名無しさん:2009/12/07(月) 23:06:51
セグるって一体なんなんですか。
delete obj;
の後
delete obj;
するとセグりますけど
最初のdelete obj;のときと
2回目のdelete obj;でobjは何が違うんですか。
一回目のdelete obj;でそこのアドレスから数バイトのバイナリ値が
何かに書き換えられてて2回目はその書き換えられた値を見て異常とか判断してるんでしょうか。
異常なobjと異常じゃないobjはどうやって見分けてるんでしょうか。

508 :デフォルトの名無しさん:2009/12/07(月) 23:09:54
今日、ウインドウに関するコードを読んでいたら
MainForm.hにクラスの宣言が3つほど書いてありました
普通は1つの*.hに1つのクラスしか宣言しないと思うのですが
これって、普通なんですかね?

509 :デフォルトの名無しさん:2009/12/07(月) 23:16:39
普通なんです

510 :デフォルトの名無しさん:2009/12/07(月) 23:23:24
>>507
見分けてるんじゃなくてヒープ領域の管理方法に依存する
つまり実装依存

大抵はリンクリスト+フリーブロックになっていて、deleteすると
リンクリストが書き換えられ、そこがフリーで利用可能であると
マークされる

それをもう一度deleteするとリンクリストがぶっ壊れる

511 :デフォルトの名無しさん:2009/12/07(月) 23:29:49
>>507
> 異常なobjと異常じゃないobjはどうやって見分けてるんでしょうか。
いや、見分けられないからこそ
異常なobjをdeleteしてしまってバグるのだよ。

見分けられたなら何度deleteしても問題ない仕様にするだろ?


512 :デフォルトの名無しさん:2009/12/07(月) 23:32:58
>>507
心配ならdeleteした直後にポインタに0を入れとけ
delete 0; をやっても何も起こらない事が保証されている

513 :デフォルトの名無しさん:2009/12/07(月) 23:38:50
>>512
それじゃ他で delete されたらアウトだろ

514 :デフォルトの名無しさん:2009/12/07(月) 23:46:04
何回でもdeleteしてやる

515 :508:2009/12/07(月) 23:51:07
>>509
1つの*.hに1つのクラスってことで、おk?

516 :デフォルトの名無しさん:2009/12/08(火) 00:05:26
>>512またおまえかw

517 :デフォルトの名無しさん:2009/12/08(火) 00:41:27
>>507 他
その前にセグるって言葉は一般的なのか?w

518 :デフォルトの名無しさん:2009/12/08(火) 00:44:19
>>508
C++なら一つのヘッダファイルに関連する複数のクラスの定義を書くのはごく普通。stlやboostの中身見てみな。

519 :デフォルトの名無しさん:2009/12/08(火) 01:10:38
>>507
一回目の delete obj が期待通りの動作をするのなら、その時点での obj は new で
生成したオブジェクトを指しているのだろう。その動作により obj はすでに破棄された
オブジェクトを指すようになので、2回目の delete obj は未定義の動作となる。

セグる == Segmentation fault は未定義の動作としてよく現れるもののひとつ。
http://ja.wikipedia.org/wiki/%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%81%95%E5%8F%8D

見分けるとしたらプログラマが見分けて同じポインタを2回 delete しないようにする
ことになる。

そんなのは面倒なので auto_ptr などのスマートポインタを使うと良い。 >>512 オマエもな。

520 :508:2009/12/08(火) 01:37:40
>>518
わかった。ありがとう

521 :デフォルトの名無しさん:2009/12/08(火) 07:48:58
>>517
セグるをしらないのか。だっせーw

522 :デフォルトの名無しさん:2009/12/08(火) 08:08:25
>>521

>>517
> セグるをしらないのか。だっせーw

523 :デフォルトの名無しさん:2009/12/08(火) 10:26:49
name spaceが何なのかわかりません
#include "hoge"だけじゃ何でダメなの?

524 :デフォルトの名無しさん:2009/12/08(火) 10:49:27
意味不明
namespaceと#includeは(直接は)関係ないし

525 :デフォルトの名無しさん:2009/12/08(火) 11:35:26
>>524
正しい使い方をみせてください・・・・・・

526 :デフォルトの名無しさん:2009/12/08(火) 11:43:35
>>525 標準ライブラリとか boost とか見れ。

527 :デフォルトの名無しさん:2009/12/08(火) 12:00:06
お前らしきりにSTLとかの中身見ろみろいうけどよ
アレは人間が見るものじゃないだろ
まぁ525はバカすぎて適当な対応したくなるのは同意

528 :デフォルトの名無しさん:2009/12/08(火) 12:44:05
>>525
みたいな低レベルな質問を見るとおぞけが


529 :デフォルトの名無しさん:2009/12/08(火) 12:46:49
もしかして : さむけ

530 :デフォルトの名無しさん:2009/12/08(火) 12:50:35
もしかして : おざき

531 :デフォルトの名無しさん:2009/12/08(火) 12:56:52
>>527
別に中身(実装?)を見る必要は無い。
名前空間の使われ方を知るにはライブラリリファレンスなどインターフェースを見るだけで十分でしょ。
もちろん、それ以上を知るために実装などを見ることも悪くは無い。

532 :デフォルトの名無しさん:2009/12/08(火) 12:58:53
//hogeが既にあるとして
hoge+hoge.f();
で、f()がhogeを変更するメンバ関数だった場合、上式は未定義の動作でしょうか。

533 :528:2009/12/08(火) 13:02:19
>>529-530
ちょw
おまえらも低レベルかよw

534 :デフォルトの名無しさん:2009/12/08(火) 13:05:27
もしかして : こわき

535 :デフォルトの名無しさん:2009/12/08(火) 13:15:39
>>532
hoge はクラス型のようなので operator+() も関数呼び出しとなり、
hoge.f() および operator+() の呼び出しの前後にシーケンスポイントが
あるので未定義の動作にはならない。

ただし operator+() 呼び出しについて引数の評価順序が未規定なので、
結果に移植性は無い。

536 :デフォルトの名無しさん:2009/12/08(火) 13:32:55
>>533
おまえ程ではないけどね

537 :デフォルトの名無しさん:2009/12/08(火) 14:03:01
独自にプレフィックスを付ければnamespaceなど不要

538 :デフォルトの名無しさん:2009/12/08(火) 14:30:09
>>536
絵に描いたような低脳特有の返し乙w

539 :デフォルトの名無しさん:2009/12/08(火) 14:40:36
>>537
namespaceを使えば独自のプレフィックスなど不要

540 :デフォルトの名無しさん:2009/12/08(火) 15:40:40
>>539
ところが、独自にプレフィックスを付ければnamespaceなど不要なんだよ

541 :デフォルトの名無しさん:2009/12/08(火) 16:36:36
単純反復動作

542 :デフォルトの名無しさん:2009/12/08(火) 18:14:36
名前解決で困る気がするような気がする

543 :528:2009/12/08(火) 20:41:08
俺の代わりに反論してくれたのはうれしいけど、
>>538とかがファビョって荒れたら大変だからほどほどに
しておくんなさいまし。


544 :デフォルトの名無しさん:2009/12/08(火) 20:55:11
 struct MyClass{
 //適当に実装してある。
 };
 
 try{
 //処理。
 throw MyClass();
 }
 catch(const MyClass& e){
 //eを用いた処理。eは変更されない。
 }

これが普通だと思うのですが、
もし
 try{
 //処理。
 throw MyClass();
 }
 catch(MyClass& e){
 //eを用いた処理。eが変更される。
 }
というコードだった場合、規格上未定義の動作になりますか?


545 :デフォルトの名無しさん:2009/12/08(火) 21:21:39
なる
catch節でeに触った瞬間に鼻から悪魔

546 :デフォルトの名無しさん:2009/12/08(火) 21:25:08
しらなかった

547 :デフォルトの名無しさん:2009/12/08(火) 21:26:53
inline catch(const MyClass &e){...}
とか欲しいな

548 :デフォルトの名無しさん:2009/12/08(火) 21:32:39
>>545
それは変更しなくても値を取得した瞬間に鼻から悪魔ということでしょうか?


549 :デフォルトの名無しさん:2009/12/08(火) 21:36:11
もうデストラクタ呼ばれて壊れてるからね

550 :デフォルトの名無しさん:2009/12/08(火) 21:37:49
>>549
でもそうだとしますと
const MyClass &e
でcatchした例外は
どうしてさわってOKなのでしょうか?


551 :デフォルトの名無しさん:2009/12/08(火) 21:50:55
 akiのHP(ヒットポイント)
 ttp://www.kk.iij4u.or.jp/~tomoki/shyou/k1.htm
ここではnon constな参照で受け止めている。
また、
 C++例外処理プログラミング
 ttp://www.02.246.ne.jp/~torutk/cxx/exception/programming.html
ここでは
> 3 参照渡しで受け取る void catchFuntion() {
> try {
> maybeThrowFunction2();
> } catch (const Exception& ex) {
> cerr << ex.what() << endl;
> }
> }
> 例外オブジェクトの生成、スライス問題ともに影響なし。
> テンポラリオブジェクトをconstでない参照引数へ渡すことは
> 関数呼び出しでは許されないが例外catchでは許される。
と明記されているようだ。
後はどなたか規格に詳しい有識者plz

552 :デフォルトの名無しさん:2009/12/08(火) 21:52:31
Boost.Exceptionなんか、書き換えた上で再throwまでやっているくらいだし、
catch節内での例外オブジェクトの書き込みも認められているのではないの?
ttp://www.kmonos.net/alang/boost/classes/exception.html

553 :551:2009/12/08(火) 21:55:54
>>552
パネェww

thx

554 :デフォルトの名無しさん:2009/12/08(火) 21:56:14
軽く調べてみた。

> 14882:2003 15.1/4
>The memory for the temporary copy of the exception being thrown is allocated in an unspecified way,
>except as noted in 3.7.3.1. The temporary persists as long as there is a handler being executed for that
>exception. In particular, if a handler exits by executing a throw; statement, that passes control to another
>handler for the same exception, so the temporary remains. When the last handler being executed for the
>exception exits by any means other than throw; the temporary object is destroyed and the implementation
>may deallocate the memory for the temporary object; any such deallocation is done in an unspecified way.
>The destruction occurs immediately after the destruction of the object declared in the exception-declaration
>in the handler.
最後の handler が処理されるまでは例外オブジェクトは破棄されないってことらしい。

>551
例外オブジェクトの型は最上位の cv qualifier はずした型になるって 15.1/3 で書いてある。

555 :デフォルトの名無しさん:2009/12/08(火) 21:59:09
>>549
finallyが不憫でなりません

556 :デフォルトの名無しさん:2009/12/08(火) 21:59:11
男はtryを使ってはダメだ!

557 :551:2009/12/08(火) 21:59:49
>>554
ありがとう。
> 例外オブジェクトの型は最上位の cv qualifier はずした型になるって 15.1/3 で書いてある。
ということは、>>544で、
const MyClass型のオブジェクトがthrowされたとしても
catch(MyClass& e)
でキャッチできるってこと・・・かな?


558 :デフォルトの名無しさん:2009/12/08(火) 22:00:52
>>555
finallyってどこの言語?

>>556
つまり男ならassertで断言するか死ぬかを選べ、と。

559 :デフォルトの名無しさん:2009/12/08(火) 22:02:29
>>558
ああ、ほんとごめんfinally忘れて

560 :デフォルトの名無しさん:2009/12/08(火) 22:03:36
>>558
オトメン乙

561 :558:2009/12/08(火) 22:06:00
>>560
俺オトメンかよ

562 :デフォルトの名無しさん:2009/12/08(火) 22:06:45
>557
#include <iostream>

int main(void)
{
  try {
    throw 1;
  } catch (int &i) {
    std::cout << i << std::endl;
  }

  return 0;
}

確かにこれで 1 って出力されたわ。
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)

563 :デフォルトの名無しさん:2009/12/08(火) 22:10:01
>>562
よく分からないけどどれかのデストラクタが呼ばれちゃうからダメだって

564 :デフォルトの名無しさん:2009/12/08(火) 22:11:55
#include <iostream>

int main(void)
{
  try {
    try { throw 1; }
    catch (int &i) {
      std::cout << i << std::endl;
      i = 2;
      throw;
    }
  } catch (int &i) {
    std::cout << i << std::endl;
  }

  return 0;
}

これで
1
2
になる。
変更した結果が throw で再送する結果に反映される事は 15.3/19 に記述あり。

565 :544:2009/12/08(火) 22:12:21
みなさま どうもありがとうございます。
ttp://codepad.org/6U9D9nMB
こんな感じで、確かにconstオブジェクトをnon constな参照で受け止めることもできているようです。
>>554氏の引用してくださった資料が決め手ですね。


566 :デフォルトの名無しさん:2009/12/08(火) 22:21:41
言っとくけど仕様に最後のhandlerが処理されるまで非konnsuto参照として扱っても良いのはtry{}ブロック内のスタックが破壊されない事を期待しているからだからな。

567 :デフォルトの名無しさん:2009/12/08(火) 22:27:11
> try{}ブロック内のスタックが破壊されない事を期待している
そしてその期待は規格により保証されている、と言いたいのですね?>>566

568 :デフォルトの名無しさん:2009/12/08(火) 22:30:40
例外処理が重いのは例外の発生した箇所から帰着できる部分を保存して処理を別の部分に渡すため。
適当だけど

569 :デフォルトの名無しさん:2009/12/08(火) 23:14:19
void temp(const hoge *h)
void temp(const hoge &h)
この2つは似たような意味ですが、どうやって使い分けているんですか?
参照があればポインタなんていらない気がするんですが

570 :デフォルトの名無しさん:2009/12/08(火) 23:15:57
その程度の用途ならいらないですね

571 :デフォルトの名無しさん:2009/12/08(火) 23:16:56
>>569
参照だと途中で付け替えられないけどポインタなら付け替えられるでしょ?
参照だとC++専用だけどポインタならC言語でも使い回せるでしょ?
参照だとnullptrとかないけどポインタならあるでしょ?(C++0xからだけど。)

とかかな。
あとfactoryメソッドやりたいときにポインタじゃないと困る・・・とか?
(でも普通はスマートポインタか。)

572 :デフォルトの名無しさん:2009/12/08(火) 23:22:08
ポインタは値渡し、
参照は参照渡し。
どちらも用途がある。
ローカル変数を参照渡し出来ない、不具合が出るとかある。

573 :569:2009/12/08(火) 23:24:36
ttp://d.hatena.ne.jp/ume-y/20060513/pointerandreference
こんなのがありました
安全性によって使い分けるのが、適切なのかな〜って思います

574 :デフォルトの名無しさん:2009/12/08(火) 23:24:58
>>572
> ローカル変数を参照渡し出来ない
別にアドレス渡し(ポインタ渡し)もできなくね?

575 :デフォルトの名無しさん:2009/12/08(火) 23:34:40
参照はクラス変数にするのがとてつもなくしんどい

576 :デフォルトの名無しさん:2009/12/08(火) 23:47:32
>>575
しかしそれはポインタも同じじゃないんですか?

577 :デフォルトの名無しさん:2009/12/08(火) 23:50:08
コンストラクタをオーバーロードしてると生きるのが苦痛になってくるな。

578 :デフォルトの名無しさん:2009/12/08(火) 23:53:52
>>577
そんなあなたに
this->destructor()

579 :デフォルトの名無しさん:2009/12/08(火) 23:54:11
参照はコンテナ使えないじゃない

580 :デフォルトの名無しさん:2009/12/09(水) 01:49:23
>>545,549,563,566
これ全部まちがいだよね?

581 :デフォルトの名無しさん:2009/12/09(水) 03:04:50
void func(){
int i = 3;
throw i;
}

int main()
{
try{func();}catch(int &i){}
}

この場合、funcのスタックっていつ捨てられるの?
とっとと捨てられてるけど、コピーが投げられるの?だとしたらコピーコンストラクタが動くの?

はてなだらけですまんす><

582 :デフォルトの名無しさん:2009/12/09(水) 04:26:23
>>581
func() のスタック(ローカル変数のための領域)は、もちろん関数を抜けるまで有効。
関数を抜けた後、実際にいつ捨てられるかは実装の勝手。

これに対して例外オブジェクトとして投げられるオブジェクトのための領域の有効期間に
ついては >>554 にあるとおり。

コピーコンストラクタによるコピーが必要になることがほとんどだけど、関数に引数を
渡す場合や return で戻り値を返す場合と同様に省略可能なので、必ず呼び出される
とまでは言えない。

583 :デフォルトの名無しさん:2009/12/09(水) 06:15:59
っていうか、 throw の引数にしたときだけはローカル変数の寿命が関数外まで延びる
なんて仕様だったら困るだろ。

584 :デフォルトの名無しさん:2009/12/09(水) 06:36:50
つまりthrowされたときに自動的にコピーされるってことは確かなのか。
ただしそれは実装次第では省略可能ということで。


585 :デフォルトの名無しさん:2009/12/09(水) 09:13:05
よくわからないからボクはconstでキャッチするよ

586 :デフォルトの名無しさん:2009/12/09(水) 12:27:23
ところで何でエラー通知に対してC++は
「例外」
という方法を選んだんだろう?
(他に何があるかは知らんけど。)
他の言語ではそれが主流だったからとか?


587 :デフォルトの名無しさん:2009/12/09(水) 12:29:15
自分でnewで確保したメモリは自分でdeleteしないと気が済まないから、僕はスマートポインタを使いません。

こういう馬鹿がたまにいるんだが、どう説得したら良い?


588 :デフォルトの名無しさん:2009/12/09(水) 12:50:52
使う必要もない場面なら使わなくていいんじゃないの

589 :デフォルトの名無しさん:2009/12/09(水) 12:56:39
メンバ変数にポインタを使っている場合、コピーコンストラクタでどうポインタを扱ってますか

590 :デフォルトの名無しさん:2009/12/09(水) 13:06:06
>>587
メモリの所有者を明確にした上でRAIIを徹底できるなら別にスマポ要らないよね。

>>589
ディープコピーが必要な場合はJavaのcloneかserializeを真似る

591 :デフォルトの名無しさん:2009/12/09(水) 14:51:09
>>590
その真似たソースを見せてほしいです

592 :デフォルトの名無しさん:2009/12/09(水) 14:57:40
スマポは基本的には推奨されるべきだが何でもかんでもスマポにすりゃいいってもんでもない
共有もしないし生成破棄タイミングも明確で開発・保守の際に間違いようがない場合(たとえば単純なpimplなど)
いちいちスマポ使うのは無意味。別に使っても見かけ上問題はないけど使う利点がない
さらに誤ってauto_ptrじゃなくて共有ポインタなんて使ったら参照カウンタ確保のための無意味なコストがかかる

>>587
「お前が完璧人間なのはわかったが、保守するかもしれないほかの人のことも考えてくれ」とでも言ってみるとか


593 :デフォルトの名無しさん:2009/12/09(水) 15:01:29
完璧主義相手なら下手に煽るより安全工学引き合いに出した方がいいんじゃないか

594 :589:2009/12/09(水) 15:10:25
>>591
お前、俺になりすましてレスすんな


595 :デフォルトの名無しさん:2009/12/09(水) 17:10:46
しかし、pimplの場合、たとえ参照カウントが要らなくても、微妙に楽できるのでついshared_ptrを使いたくなる。

596 :デフォルトの名無しさん:2009/12/09(水) 18:06:31
>>587
参照使わせろ。

597 :デフォルトの名無しさん:2009/12/09(水) 18:39:07
new だけが露出していて delete は隠蔽されている、というスタイルは嫌いだな

598 :デフォルトの名無しさん:2009/12/09(水) 20:01:48
>>597
boost::make_shared
deleteと同じようにnewからも開放されるだけでなく、
shared_ptrが抱える例外安全性の落とし穴からも守ってくれます

599 :デフォルトの名無しさん:2009/12/09(水) 20:13:28
メモリ管理は自前かクラスのデストラクタだけで良いよ。
それ以外はc++の速度が失われる

600 :デフォルトの名無しさん:2009/12/09(水) 20:39:53
>>597出直してこい

601 :デフォルトの名無しさん:2009/12/09(水) 21:34:28
Javaみたいでダサいもん
自分でmallocしたものは自分でfreeする
自分でfopenしたものは自分でfcloseする
自分でnewしたものは自分でdeleteする
そんな当たり前のことを当たり前に書けるのがC/C++の魅力のはず

602 :デフォルトの名無しさん:2009/12/09(水) 21:46:43
詩人が多いな
特に内容がない詩ばかりだが

603 :デフォルトの名無しさん:2009/12/09(水) 21:53:01
struct X
{
    struct Y
    {
        struct Z
        {
            int i;
        } z;
    } y;
} x;

x.y.z.i = 0;

上のようにネストを深くしても変数へのアクセスコストはコンパイル時にかかるだけで実行時はネストレベルに関係ありませんよね?

604 :デフォルトの名無しさん:2009/12/09(水) 21:53:08
class Test {
std::string s;
public:
Test(const std::string& s) {
this->s = s;
}

パラーメータを参照でもらって、メンバ変数を初期化したい。
ひとまずコンパイルが通ったのですが、これで大丈夫ですかね?

605 :デフォルトの名無しさん:2009/12/09(水) 22:02:05
>>603
残念ながらstructが被るとアライメント調整でsizeof(Y) != intになる可能性がある。
sizeof(Z) > sizeof(Y)にはならないが。

606 :デフォルトの名無しさん:2009/12/09(水) 22:09:47
Zにパディングが入ればアライメントは取れるから
Yにさらにパディングが入ることは考えづらいと思うが…

コンストラクタとか作るとどうなるかわかんないけど
PODだから大丈夫じゃないの?

607 :デフォルトの名無しさん:2009/12/09(水) 22:35:59
アラインメンドだのパディングだのはアクセスコストとは別問題じゃね

608 :デフォルトの名無しさん:2009/12/09(水) 22:39:21
.演算子はオーバーロードできないしこれで解決できるメンバは全てコンパイルタイムに確定しているから
アクセス速度は全て定数時間

609 :デフォルトの名無しさん:2009/12/09(水) 23:03:09
>>597
>>601
居たww

まあきっとbetter Cとして使っているから
最新のパラダイム(ってほどでも無いけど、風潮)が理解できないのかな。


610 :デフォルトの名無しさん:2009/12/09(水) 23:15:59
RAIIは良いものじゃ

611 :デフォルトの名無しさん:2009/12/09(水) 23:24:41
>>609
おまえさんが何を探して何に笑っているのかがわからないが、それは置いておこう

いつの時代からかはご想像に任せるが、俺は「最新」を盲信はしない主義でね
色んな形で「圧力」を受けたことがあるが腐っても面従腹背はしない
間違っているものは間違っていると、本心から納得できないものに対しては常に言う

ちなみに、まだ C++ 「ではない」ものを紹介されたが
それとて抽象化レベルの観点から異を唱えたことに対する反論とは受け取っていないぞ

612 :デフォルトの名無しさん:2009/12/09(水) 23:27:12
明後日の方向に長文書いて馬鹿がバレる例。

613 :デフォルトの名無しさん:2009/12/09(水) 23:27:22
>>605
それはない

614 :デフォルトの名無しさん:2009/12/09(水) 23:34:58
というか長文を書くヤツは大抵 ・・・いや止めておこう。

615 :デフォルトの名無しさん:2009/12/09(水) 23:36:05
>>611
> 色んな形で「圧力」を受けたことがあるが腐っても面従腹背はしない
> 間違っているものは間違っていると、本心から納得できないものに対しては常に言う
よし、じゃあ早速鏡に向かって叫んでくれ。


616 :デフォルトの名無しさん:2009/12/09(水) 23:44:32
>>611
居るよね、こうして自分を盲信している人。

新しい技術について行けない
->その技術は悪い物だからいいんだ

これ、心理学的に適応機制って言うんだぜw


617 :609:2009/12/09(水) 23:52:27
風呂から出て来たらなんかめっちゃ荒れとる
・・・元はといえば俺のせい・・・か。


>>616
すっぱい葡萄 - Wikipedia
ttp://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
自分の心の柱を守るためには
まあそれも大事だろ。

618 :デフォルトの名無しさん:2009/12/09(水) 23:56:31
よーするに個人煽りしかできないわけね
ム板におけるそのザマ自体が返事としては十分だ

十分だがつまんねーから寝るぜ

619 :デフォルトの名無しさん:2009/12/09(水) 23:59:44
>>618
>十分だがつまんねーから寝るぜ
age ながら言われてもな。
我が読解力では
 いじめないでよ
 もう逃げるから
としか読み取れない。


620 :デフォルトの名無しさん:2009/12/10(木) 00:01:11
マって中学生みたいな奴しかいないよな

621 :デフォルトの名無しさん:2009/12/10(木) 00:16:20
みんなでお遊戯しているよ

622 :デフォルトの名無しさん:2009/12/10(木) 00:19:27
まぁ、新しい技術に投資する場合はある程度選別しなければならないのも事実ではある。
C#とか絶対滅ぶ。間違いない。おれはJavaに投資して正解だった。これからはHaskelだ。

623 :デフォルトの名無しさん:2009/12/10(木) 00:21:24
           ,, -──- 、._ 
        .-"´         \.
        :/   _ノ    ヽ、_ ヽ.:
        :/   o゚((●)) ((●))゚oヽ:
      :|       (__人__)    |:
      :l        )  (      l:
      :` 、       `ー'     /:
       :, -‐ (_).        /
       :l_j_j_j と)丶─‐┬.''´
          :ヽ   :i |:
             :/  :⊂ノ|:

624 :デフォルトの名無しさん:2009/12/10(木) 00:34:55
てっきり>>611って「まったく関係のない話を延々するというボケ」だと思ってたけど、
もしかして本人は本当に妥当な論述だと思ってたの?

625 :デフォルトの名無しさん:2009/12/10(木) 00:41:53
C++の話しろよ

626 :デフォルトの名無しさん:2009/12/10(木) 00:52:26
>>604
それは代入。メンバ変数を初期化するには初期化リストを使う。

627 :デフォルトの名無しさん:2009/12/10(木) 01:05:09
データマンバにはm_とか後ろ_とかプレフィクスつけようぜ?
Javaの人はthis使いたがるけど。

628 :デフォルトの名無しさん:2009/12/10(木) 01:10:14
マンボ!

629 :デフォルトの名無しさん:2009/12/10(木) 01:21:01
後ろにつけたらプレフィックスじゃないだろ

630 :デフォルトの名無しさん:2009/12/10(木) 01:35:33
GCだのスマートポインタだのfinallyだのRAIIだの
確保したものを解放する責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない

631 :デフォルトの名無しさん:2009/12/10(木) 01:42:02
技術に道徳やら精神論は持ち込むなよ

632 :デフォルトの名無しさん:2009/12/10(木) 01:42:51
for だの while だの switch だの関数だの
正しい位置にジャンプする責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない

633 :デフォルトの名無しさん:2009/12/10(木) 01:44:38
変数だの配列だの構造体だのビットフィールドだの、
正しいメモリにアクセスする責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない

634 :デフォルトの名無しさん:2009/12/10(木) 01:47:36
コンパイラだのアセンブラだのプリプロセッサだのリンカだの、
プログラムをマシンコードで組み上げる責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない

635 :デフォルトの名無しさん:2009/12/10(木) 01:49:33
freeやdelete呼んだり、ファイルやソケット閉じたり、セマフォ返したりするのって
そんなに嫌なの?苦痛なの?
妙な言語仕様を付けたり奇怪なトリックを使ったり無用なオーバーヘッドをかけてでも
眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?

おかしいだろう
他人(OSとか)から借りたものを用が済んだらお返しするのは道徳的にも技術的にも当然だ
そこから無理矢理逃げ回ることが最新でございというのは納得いかない

636 :デフォルトの名無しさん:2009/12/10(木) 01:56:30
プログラム終端におけるfreeは必要/不必要論争とか今さらヤメてね

637 :デフォルトの名無しさん:2009/12/10(木) 01:57:00
返し忘れる阿呆が多いから仕方ないんだ
セーフティネットみたいなものだと思ってくれないか
世の中は真のプログラマだけがプログラミングする時代から一般人誰でもプログラミングする時代に変わりつつあるんだ

638 :デフォルトの名無しさん:2009/12/10(木) 02:00:57
呼ばれた場所にちゃんと返ったり、条件ジャンプ命令使い分けたり、ジャンプテーブル組んだりするのって
そんなに嫌なの?苦痛なの?
妙な言語仕様を付けたり奇怪なトリックを使ったり無用なオーバーヘッドをかけてでも
眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?

おかしいだろう
フローがわかっているものを正しくマシンコードに起こすのは道徳的にも技術的にも当然だ
そこから無理矢理逃げ回ることが最新でございというのは納得いかない

639 :デフォルトの名無しさん:2009/12/10(木) 02:01:26
黒魔術とか奇怪なトリックってことは
その技術を使いこなせてないか、それとも理解せずに使っているか
あるいはそもそもプログラム書いてない可能性すらあるな

640 :デフォルトの名無しさん:2009/12/10(木) 02:05:40
それぞれの理屈はわかるよ
でもどれもこれも大げさすぎるだろ
「delete書きたくない」ただそれだけのために

そんなのを論争してたり長々と解説してたりしてるのを見ると
「いいからサボらずにdelete書けよ」と言いたくなる

641 :デフォルトの名無しさん:2009/12/10(木) 02:08:26
>>635
> そんなに嫌なの?苦痛なの?
べつに。 RAII があるので楽チンです。

> 眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?
邪悪だから排除してるんじゃなくて、人間がやる必要は無いから機械に任せているだけ。

> 他人(OSとか)から借りたものを用が済んだらお返しするのは道徳的にも技術的にも当然だ
そうだね。 RAII はそのためのものです。

> そこから無理矢理逃げ回ることが最新でございというのは納得いかない
逃げ回る?
RAII はリソースを返さないで済ますためのものだと思ってるのかな?

642 :デフォルトの名無しさん:2009/12/10(木) 02:10:59
黒魔術じゃないだろ
C++にはGCがないので当たり前のテクニックです
メモリリークしたくなかったら黙って使え

643 :デフォルトの名無しさん:2009/12/10(木) 02:13:29
デストラクタを悪用して、解放のコードを見かけ上抹殺する黒魔術だな>RAII

こういうRAII信奉者にありがちなのが、解放に失敗がありうる状況だと途端に困っちゃうパターン
大体エラーを無視してRAIIを使い続けるという最悪の手段を選んで満足してしまう

やっぱり麻薬だ

644 :デフォルトの名無しさん:2009/12/10(木) 02:17:16
デバイスコンテキストからウィンドウに描画されてる情報をHBITMAPまで持って行ったのですが、
ここから特定のピクセル色を知りたいです。
何か関数は容易されてないでしょうか?
よろしくお願いします。

645 :デフォルトの名無しさん:2009/12/10(木) 02:20:43
デストラクタを怖がって、解放のコードを見かけ上増量させる黒魔術だな>明示的リソース破棄

こういう明示的リソース破棄信奉者にありがちなのが、処理中に失敗がありうる状況だと途端に困っちゃうパターン
大体例外を無視して明示的リソース破棄を使い続けるという最悪の手段を選んで満足してしまう

やっぱりアホだ

646 :デフォルトの名無しさん:2009/12/10(木) 02:25:04
> 処理中に失敗がありうる状況だと途端に困っちゃうパターン
ほぼ常に困りっぱなしじゃねぇかw

647 :デフォルトの名無しさん:2009/12/10(木) 02:27:52
アホはあんただよ
RAIIで例外を無視しないようにしようとすると、原理的に
「例外を投げるデストラクタ」というC++最大級の法度を犯すことになる

だが、たまたまfreeやdeleteが失敗しないように出来てるので、
(operator deleteは失敗させられるけど普通は禁忌とされてる)
RAII信者は「解放が失敗するかもしれない」なんてことは考えもせず
そういう場合はRAIIを捨てなければならないという判断を下すことが出来ない

だから怖いんだよ

648 :デフォルトの名無しさん:2009/12/10(木) 02:40:35
アホはあんただよ
明示的リソース破棄で例外を無視しないようにしようとすると、原理的に
「同じコードを何箇所にもばらまく」というプログラミング最大級の法度を犯すことになる

だが、たまたま C 時代のライブラリは例外を投げないように出来てるので、
( qsort() や bsearch() は投げることがあるけど普通はそんな比較関数は使わない)
明示的リソース破棄信者は「処理中に例外が発生するかもしれない」なんてことは考えもせず
そういう場合は明示的リソース破棄を捨てなければならないという判断を下すことが出来ない

だから怖いんだよ

649 :デフォルトの名無しさん:2009/12/10(木) 02:44:39
いまいちだな

650 :デフォルトの名無しさん:2009/12/10(木) 02:49:43
delete this;

651 :デフォルトの名無しさん:2009/12/10(木) 02:59:52
{
  int *i = new int[100];
  char *c = new char[80];
  short *s = new short[90];
  float *f = new float[32];
  double *d = new double[200];
}
これをスマポ使わずにメモリリークしないようにするのとか
考えるのも嫌だわ

と思ったけどローカルクラス使えばいいか

652 :デフォルトの名無しさん:2009/12/10(木) 03:12:23
そこは素直にstd::vector使っとこうぜ

653 :デフォルトの名無しさん:2009/12/10(木) 03:25:43
もちろん普段はvectort使ってるよw
ただスマポ等を黒魔術と言ってる人(ネタだと思うけど)は
上に書いたのをどう処理してるのかなと

654 :デフォルトの名無しさん:2009/12/10(木) 03:26:51
t入ってしまった…

655 :デフォルトの名無しさん:2009/12/10(木) 03:41:33
スマポが黒魔術だと思うならJavaなりC#で満足してろってこった
C++使う資格がない

だいたいデストラクタはメモリリークだけでなく一般的なリソースの
解放もできるのでGCより原理的に優れているんだ

使い方が面倒なだけで

656 :デフォルトの名無しさん:2009/12/10(木) 03:42:40
すぐれてるなんてことはない

657 :デフォルトの名無しさん:2009/12/10(木) 03:48:14
>>656
あんたも頑固だな
Javaでも使えカス

658 :デフォルトの名無しさん:2009/12/10(木) 03:55:33
int main() {
 vector<int ???> v; // <int>にすべきか<int *>にすべきか、が主題です
 AddVec(v);
}
void AddVec(vector<int> v) {
 int i = 0;
 v.push_back(i);
}
このiってスタックに作られますよね?一般的に。
それをvectorに積んでも良いの?
void AddVec(vector<int *> v) {
 int * p = new int(0); // これはヒープに確保されますよね
 v.push_back(p);
} // こっちが正解でしょうか?

vも(vector<int???> * v)で渡すべきですかね?

昔、Cプログラマだったので、なんでもかんでもポインター渡ししてたのですが(速度命)
最近の風潮だと値渡しもありなんですかねぇ?

659 :デフォルトの名無しさん:2009/12/10(木) 03:59:08
速度命は参照渡し

660 :デフォルトの名無しさん:2009/12/10(木) 04:01:09
昔のCプログラマならCPUの処理サイズ以下のデータは値渡しした方が効率的だという事くらい知ってそうだけど

661 :デフォルトの名無しさん:2009/12/10(木) 04:04:11
intのポインタを積んだら相当速度落ちるだろ。
intの実体がレジスタにあったとしても、int*はメモリに確保されるだろ。
int*を読んで、アドレスを特定してintを読みに行く。
intを直接読むより、手間とメモリが倍掛かる。 アドレス分。
超初心者だろ。・

662 :デフォルトの名無しさん:2009/12/10(木) 04:06:37
参照渡しはコンパイル時置換解決とアドレス渡しとで表記が混同できるのが利点であって
実行時となるとアドレス渡しでしか解決方法がないからここでポインタと参照を引き合いに出し合うのはナンセンス

663 :デフォルトの名無しさん:2009/12/10(木) 04:06:57
少なくとも10バイト以上のデータでポインタ渡しやれよ。可変長ならそれ以下があっても良いけど
アドレス読んでから実体にたどり着く部分と
メモリの無駄を無くすため。

664 :デフォルトの名無しさん:2009/12/10(木) 04:09:47
>>662
中身ではなくてまずここを変えれって事
void AddVec(vector<int> v)



void AddVec(vector<int> &v)


それに参照かポインタ渡しにしないと
元のvectorは変化しないが。

665 :658:2009/12/10(木) 05:14:20
ごめんなさい。質問が下手でした。もちろんintだけなんか積まないです。
知りたかったのは
 DATA d;
 v.push_back(d); // ここで勝手にコピーコンストラクタが呼ばれるの?
ということでした。
スタックに作られた変数を積んだら、
関数から戻ったときに実体なくなるよなぁ・・・って思ったので

666 :デフォルトの名無しさん:2009/12/10(木) 05:19:15
RAIIが黒魔術って
いまさら何を。

素直に私の頭じゃ理解できません首にしないでくださいって言えよww

667 :デフォルトの名無しさん:2009/12/10(木) 05:33:31
C++では、
複雑なコードの自動生成をしたいとすると
「プリプロセッサを自作する」
と言う話を聞きました。
…それってよくあることなんでしょうか?


668 :デフォルトの名無しさん:2009/12/10(木) 05:58:20
>>667
やろうと思ったことはあるが、
途中で冷静になってやめたわ(笑)


669 :デフォルトの名無しさん:2009/12/10(木) 05:58:31
>>667
Qtがそうじゃ無かったかな?

670 :667:2009/12/10(木) 06:06:29
>>668
まさに私もそんなに感じになっています。
>>669
mocですか。
なるほど、確かに。
ありがとうございます

671 :デフォルトの名無しさん:2009/12/10(木) 09:20:23
>>668
つくる能力がないだけ。

672 :デフォルトの名無しさん:2009/12/10(木) 10:25:17
パラメータで渡されたポインタは、どこでdeleteするのが適切なんですか?

673 :デフォルトの名無しさん:2009/12/10(木) 10:27:44
普通は渡した方が削除して渡された方はなにもしない

674 :デフォルトの名無しさん:2009/12/10(木) 10:29:20
>>673
なるほど、ありがとうございます

675 :デフォルトの名無しさん:2009/12/10(木) 10:39:18
>>674
お礼を言われるほどではない

676 :デフォルトの名無しさん:2009/12/10(木) 12:53:32
name spaceはjavaのパッケージと同じ事はわかりました
C++の場合javaのパッケージと同じく、name spaceごとにディレクトリを別けるのですか?

677 :デフォルトの名無しさん:2009/12/10(木) 12:54:35
テンプレ関数の部分特殊化って出来ませんか?
できないのならどのようにかいけつしたらいいですか?
例:
template<typename A,Typename B,int x> G<A,x>& operator+=(G<A,x> a, G<B,x> b);
のxについて部分特殊化したいけれど、出来ない場合を教えてください。

678 :デフォルトの名無しさん:2009/12/10(木) 13:06:36
>>676
>name spaceはjavaのパッケージと同じ事はわかりました
わかってねぇ…

679 :デフォルトの名無しさん:2009/12/10(木) 13:12:20
>>678
だったらわかるように説明してやれよ
できないのか?ん?

680 :デフォルトの名無しさん:2009/12/10(木) 13:14:34
>>677もお願いします。

681 :デフォルトの名無しさん:2009/12/10(木) 13:42:51
多重定義で代用できることが分かったのでもういいです。

newでオブジェクトの配列を初期化したとき={}で初期化できないんですがどうやりますか?

682 :デフォルトの名無しさん:2009/12/10(木) 13:44:24
>>676
C++でnamespaceをJavaのpackageと同じように使うのだけはヤメロ。
昔そういうコーディング規約を採用した会社を知っているが、
またたく間に会社が潰れ、社員の半数近くが悲惨な死を遂げた。南無。


683 :デフォルトの名無しさん:2009/12/10(木) 13:54:07
int[] iValule = new int[] { 1 , 2 , 4 , 8 };
のようにイコールをつけないことが分かったのでもういいです。

684 :デフォルトの名無しさん:2009/12/10(木) 14:22:09
>>682
それじゃただの FUD にしかならん。

具体的に何がマズかったの?

685 :デフォルトの名無しさん:2009/12/10(木) 15:18:52
御守りを買ったら神経痛が治ったとか
そういうのの逆verです。

686 :デフォルトの名無しさん:2009/12/10(木) 17:53:19
>>676
ファイルシステム上のディレクトリ構成とは無関係に階層を作れるのが(パッケージと比較しての)名前空間の特徴の1つ。
実際、ディレクトリと名前空間の階層が一致しない構成は良くある。

どういう構成にするのかはどちらかというとコーディング規約の範疇。
良くも悪くもコンパイラは関与しないので。

687 :デフォルトの名無しさん:2009/12/10(木) 18:27:08
教えると調子に乗るから教える必要はないだろ。
あと、そもそもC++にディレクトリという概念は存在しない…よな?


688 :デフォルトの名無しさん:2009/12/10(木) 18:28:49
>>671
お前の話は聞いてねぇよwwwwwww

689 :デフォルトの名無しさん:2009/12/10(木) 19:21:35
と、わざわざ相手の話を聞いてレス。

690 :デフォルトの名無しさん:2009/12/10(木) 20:01:04
g++はgccの一部なんですか?

691 :デフォルトの名無しさん:2009/12/10(木) 20:02:22
はい

692 :デフォルトの名無しさん:2009/12/10(木) 20:10:31
>>689
一理ある

693 :デフォルトの名無しさん:2009/12/10(木) 20:47:47
>>687
存在しないと思うよ。存在していたら、今わざわざapi叩いてフォルダ
扱うライブラリ作っていないw
boostだと日本語だめなんだよね。使えたら便利なんだけど。

694 :687:2009/12/10(木) 21:14:06
>>693
さらにインクルードパスの指定についても実は環境依存なんだよね。その意味も込めてのディレクトリの概念存在しない説。

695 :デフォルトの名無しさん:2009/12/10(木) 22:19:33
>>691
thx

696 :デフォルトの名無しさん:2009/12/10(木) 22:31:59
キー値が2つあるmapみたいなコンテナってないんですか

697 :デフォルトの名無しさん:2009/12/10(木) 22:34:24
その二つのキーをひとつに纏めるクラスを作れば良いだろ

698 :デフォルトの名無しさん:2009/12/10(木) 22:43:24
boostでないスマートポインタありますか。

699 :デフォルトの名無しさん:2009/12/10(木) 22:45:42
スマートポインタじゃないしスレッド対応してないけどauto_ptr

700 :デフォルトの名無しさん:2009/12/10(木) 22:50:27
マルチスレッドのいいやつ教えて

701 :デフォルトの名無しさん:2009/12/10(木) 22:51:17
std::tr1::shared_ptrってマルスレ対応じゃなかったっけ。

702 :デフォルトの名無しさん:2009/12/10(木) 22:52:15
boost使えなくてstd::tr1や0xの実装使える環境って一体・・・

703 :デフォルトの名無しさん:2009/12/10(木) 22:52:18
機種依存、バージョン依存を無くすため
boostからスマートポインタ部分だけ分離したいけど
多方面に関係して諦めた

704 :682:2009/12/10(木) 23:12:51
>>682
今さらって感じMAXで、申し訳ありません
JDのソースでnamespaceを見てみたら、javaのパッケージみたいになっていました
ktorrentのソースはjavaっぽくない

705 :704:2009/12/10(木) 23:14:08
名前を間違えた

706 :デフォルトの名無しさん:2009/12/10(木) 23:26:23
キーが2つって

std::map<std::pair<first, second>, value> とかにすればいいでしょ

3つ以上ならなら

std::map<std::tr1::tuple<省略>, value>とか

707 :デフォルトの名無しさん:2009/12/10(木) 23:30:29
一応動くようだ

int main()
{
std::map<std::pair<int, int>, double> miid;

miid[std::make_pair(1, 2)] = 3.0;
miid[std::make_pair(2, 3)] = 4.0;

std::cout << miid[std::make_pair(2, 3)] << std::endl;
}


708 :デフォルトの名無しさん:2009/12/10(木) 23:31:04
>>705
間違えたなら謝罪くらいしましょう

709 :デフォルトの名無しさん:2009/12/10(木) 23:34:13
うるせぇ、カス、ごめんよ、ぺっ。

710 :デフォルトの名無しさん:2009/12/10(木) 23:43:09
miil.insertとかmiid.findとかmiid.eraseとかの引数はどうやればいいですか

711 :デフォルトの名無しさん:2009/12/10(木) 23:45:15
std::mapの内部でtypedefされた型名があるからそれ使え

712 :デフォルトの名無しさん:2009/12/10(木) 23:47:02
boost multi_index

713 :デフォルトの名無しさん:2009/12/10(木) 23:47:51
いやです

714 :デフォルトの名無しさん:2009/12/11(金) 00:02:17
マルチスレッドで入力がvoid*限定なんですけど
これが変換不可能になります。どうすればいいですか

shared_ptr<NODE> node;
tserach( (void*)node );

error
shared_ptr<NODE> から void * へのキャストはできない (関数 main() )

715 :デフォルトの名無しさん:2009/12/11(金) 00:03:13
tserach( (void*)&node );

716 :デフォルトの名無しさん:2009/12/11(金) 00:05:44
nodeは4バイトしか使わないから放置でいいか。
NODEのメンバでスマートポインタ使っていれば
それはnodeを参照している物がなくなれば回収されますか。

717 :デフォルトの名無しさん:2009/12/11(金) 00:07:35
NODE *node;を
shared_ptr<NODE> node;
で置き換えてるので
それだと駄目と思うんですが。

718 :デフォルトの名無しさん:2009/12/11(金) 00:13:48
tr1::shared_ptrってマルスレ対応なんだ知らんかった
どうりであんなに遅かったのか

719 :デフォルトの名無しさん:2009/12/11(金) 00:37:13
cls *pの参照が無くなっも、メモリ解放されないです。



#include <string>
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;

class cls {
public:
shared_ptr<string> str;
cls(){ str=shared_ptr<string>(new string);str->resize(1<<20,'a'); }
};

void fnc(void *p){
cls *q=(cls*)p;
}


int main(){
int n;
for(n=0;n<1000;n++) {
cls *p= new cls;
cout<<n<<endl;
fnc(p);
}
}

720 :716:2009/12/11(金) 00:41:33
放置しないケースだとメモリリークしてないです。

#include <string>
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;

class cls {
public:
shared_ptr<string> str;
cls(){ str=shared_ptr<string>(new string);str->resize(1<<20,'a'); }
};

void fnc(shared_ptr<cls> p){
//cout<<p->str->substr(0,10)<<endl;
}


int main(){
int n;
for(n=0;n<1000;n++) {
shared_ptr<cls> p=shared_ptr<cls>(new cls);
cout<<n<<endl;
fnc(p);
}
}

721 :719:2009/12/11(金) 00:44:11
2回目以降のnew clsで先のアドレスにはアクセスできなくなるのですが
これは回収できないですか。
クラス内でスマートポインタ使っていても、本体がメモリに
存在するから無意味ですか。

722 :デフォルトの名無しさん:2009/12/11(金) 00:57:12
>>715
ポインタのポインタのようになってふくざつになりましたがこれで
メモリリークはしてないです。

void fnc(void *p){
shared_ptr<cls> *q=(shared_ptr<cls> *)p;
cout<<(*q)->str->substr(0,10)<<endl;

}


int main(){
int n;
for(n=0;n<1000;n++) {
shared_ptr<cls> p=shared_ptr<cls>(new cls);
cout<<n<<endl;
fnc(&p);
}
}

723 :デフォルトの名無しさん:2009/12/11(金) 01:01:07
auto変数を参照が残っている間は
生存させる方法ありますか。
これ出来たら簡単なのですが。

724 :デフォルトの名無しさん:2009/12/11(金) 01:05:43
XorShiftのソースコードを見ると、

unsigned long xor128(){
 static unsigned long x=123456789,y=362436069,z=521288629,w=88675123;
 unsigned long t;
 t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}

のようになっているのですが、
unsigned long t = (x^(x<<11));
としないのは何故でしょうか?

725 :デフォルトの名無しさん:2009/12/11(金) 01:39:43
>>719
解放してないんだからあたりまえ。

>>720
こっちもあたりまえ。

726 :デフォルトの名無しさん:2009/12/11(金) 01:42:00
>>723
ありません。

そんなことがしたい場合は new で作って shared_ptr で参照を持つようにするのが常套手段です。

727 :デフォルトの名無しさん:2009/12/11(金) 01:53:11
>>725
ヒントから、関数内でポインタ解放したら、スマートポインタ働いてメモリリーク無くなりました。
こっちのほうが簡単ですね。サンクス。

void fnc(void *p){
cls *q=(cls*)p;
delete q;
}

int main(){
int n;
for(n=0;n<1000;n++) {
cls *p= new cls;
cout<<n<<endl;
fnc(p);
}
}

728 :デフォルトの名無しさん:2009/12/11(金) 02:00:29
stringだけで自動解放するかも知れないと実験したら
解放されずスマートポインタの効果が実証できました。

#include <string>
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;

class cls {
public:
string *str;
cls(){ str=new string; str->resize(1<<20,'a'); }
};

void fnc(void *p){
cls *q=(cls*)p;
delete q;
}


int main(){
int n;
for(n=0;n<1000;n++) {
cls *p= new cls;
cout<<n<<endl;
fnc(p);
}
}

729 :728:2009/12/11(金) 02:18:34
リークはしないけど、関数呼び出し後に利用不可能になりました。

730 :デフォルトの名無しさん:2009/12/11(金) 02:55:13
>>727-729
とりあえず new と delete とスマートポインタについてひととおりネットなり本なりで勉強しなおせ。
ここに書かなくていいから。

731 :デフォルトの名無しさん:2009/12/11(金) 11:30:50
C++は参照があるのにポインタもあります。ポインタはレガシーな考え方じゃないですかね?
javaとかの言語はC++の参照しかないのに、ちゃんとプログラミングできるじゃないですか

732 :デフォルトの名無しさん:2009/12/11(金) 11:32:08
何を言ってるんだ。
「Javaでちゃんとプログラムできる」
という時点で間違っている。^^

あんな言語で何をちゃんとできるというのだ。w


733 :デフォルトの名無しさん:2009/12/11(金) 11:40:23
> ポインタはレガシーな考え方
iteratorを考えたら決してレガシーになってないぞ。むしろ昇華されてる。
あと各種API関係で使うからそれは避けようがないし。

734 :デフォルトの名無しさん:2009/12/11(金) 13:07:17
>>731
C でできることは C++ でもできなければならない。

…C99 で崩れちゃったけども。

735 :デフォルトの名無しさん:2009/12/11(金) 13:12:02
Javaアレは参照なのか?
ならば、どうしてヌルポになるのだ?

736 :デフォルトの名無しさん:2009/12/11(金) 13:42:03
だからJavaグラマとポインタの話は切れって。
向こうから振ってこられても話すな

737 :デフォルトの名無しさん:2009/12/11(金) 13:51:59
>>736
一言余計だ。反省しなさい。

738 :デフォルトの名無しさん:2009/12/11(金) 15:28:52
>>735
貴様…ぬるぽ誕生の歴史を繰り返そうというのか…ッ!

739 :デフォルトの名無しさん:2009/12/11(金) 16:51:56
Javaで〇〇

これをC++スレで言われても何にもならないという現実を理解してください

740 :デフォルトの名無しさん:2009/12/11(金) 16:57:29
ぬるぽ

741 :デフォルトの名無しさん:2009/12/11(金) 17:00:03
プロのグラマー美女、略してプログラマー

742 :デフォルトの名無しさん:2009/12/11(金) 17:01:58
>>740
がっ

743 :デフォルトの名無しさん:2009/12/11(金) 17:03:57
Javaが糞だと思うやつ挙手!

744 :デフォルトの名無しさん:2009/12/11(金) 17:57:13


745 :デフォルトの名無しさん:2009/12/11(金) 17:58:34
struct nullpointer_exception{
 vitrual ~nullpointer_exception(){}
};

746 :デフォルトの名無しさん:2009/12/11(金) 18:02:35
catch(nullpointer_exeption &e)
{
e.galtu();
}

747 :デフォルトの名無しさん:2009/12/11(金) 20:24:18
>>724
書いたのがC畑の人なんじゃないの?

748 :デフォルトの名無しさん:2009/12/11(金) 20:38:56
外寒すぎw

749 :デフォルトの名無しさん:2009/12/11(金) 20:58:13
stl=標準ライブラリ?

750 :デフォルトの名無しさん:2009/12/11(金) 21:04:13
そう。

751 :デフォルトの名無しさん:2009/12/11(金) 21:12:19
>>750
thx

752 :デフォルトの名無しさん:2009/12/11(金) 21:13:38
標準ライブラリはcstdlibやがな

753 :デフォルトの名無しさん:2009/12/11(金) 21:15:09
配列はポインタのシンタックスシュガー

754 :デフォルトの名無しさん:2009/12/11(金) 21:22:19
配列newは何かの間違い

755 :デフォルトの名無しさん:2009/12/11(金) 21:23:15
そんな事言われてもC++自体が機械語のシンタックスシュガーだし

756 :デフォルトの名無しさん:2009/12/11(金) 21:39:44
アセンブラがかわいそうに

757 :デフォルトの名無しさん:2009/12/11(金) 21:58:53
アセンブラは言語ではない。ニーモニックだ。

758 :デフォルトの名無しさん:2009/12/11(金) 22:06:06
01001000111100101001101110100101010101010101010100111110101100100
男なら0と1だけでプログラミングくらいしてみせぃ!

759 :デフォルトの名無しさん:2009/12/11(金) 22:11:50
機械語乙

760 :デフォルトの名無しさん:2009/12/11(金) 22:20:16
>>752
つまり、stlは標準に近いけどおまけみたいな感じ?

761 :デフォルトの名無しさん:2009/12/11(金) 22:35:21
std::vector って == 使えるんだね。。。

C++ Reference (ttp://www.cplusplus.com/reference/stl/vector/)
に載ってないんだけど何故?
グローバル関数だから?

# これを知らないばかりに無駄なソースコードが大量に・・・。

762 :デフォルトの名無しさん:2009/12/11(金) 22:40:39
メンバ関数として定義されてないから

763 :デフォルトの名無しさん:2009/12/11(金) 23:26:43
今自動エロ動画探索プログラムつくろうとおもっていて、まずは関連ワードから検索して動画を探知するまでのアルゴリズムがどういった流れでやればいいのかわかりません。
だれか動画探索プログラムのやり方わかる方いらっしゃいますか?

764 :デフォルトの名無しさん:2009/12/11(金) 23:32:30
「ネットは広大だわ」が出来上がるのでやめなさい

765 :デフォルトの名無しさん:2009/12/11(金) 23:32:36
ああ回答がない
アイディア盗まれるしやっぱり書き込まなきゃよかった

766 :デフォルトの名無しさん:2009/12/11(金) 23:34:56
アルゴリズムと自らのリビドーを満たす方法は違う

767 :デフォルトの名無しさん:2009/12/11(金) 23:49:22
>>763のアイデアのおかげですばらしいエロ動画探索プログラムができました。


768 :767:2009/12/11(金) 23:51:05
>>763のアイデアのせいで児ポ動画まで拾ってしまい送検されました。

769 :デフォルトの名無しさん:2009/12/11(金) 23:58:26
適当に動画サイトを見つけて動画っぽい拡張子全部落として、サイト内のリンクを再帰的に・・・

770 :デフォルトの名無しさん:2009/12/12(土) 00:03:38
perlでvipろだの画像をダウンロードするスクリプトを書いた事がある
しかし、書いてみると書く前のウハウハとは違う気持ちが沸いてくる

771 :デフォルトの名無しさん:2009/12/12(土) 01:32:50
>>749,760
Standard Template Library は C++ Standard Library の一部として取り込まれました。

772 :デフォルトの名無しさん:2009/12/12(土) 02:22:04
>>763
エロサイトを基準として探索してひたすらダウンロードするだけなら作ったことあるけど、
ネットは広大だな、と思って全部捨てたわ

773 :デフォルトの名無しさん:2009/12/12(土) 10:56:00
2chの半角で"神"か"キタ"というレスが付いたリンク先の画像や動画をダウンロードすればおk

774 :デフォルトの名無しさん:2009/12/12(土) 13:29:51
download板を巡回してハッシュをp2pソフトにぶち込むプログラム

775 :デフォルトの名無しさん:2009/12/12(土) 15:46:20
>>773
今更なにを。。。

776 :デフォルトの名無しさん:2009/12/12(土) 15:52:16
見事グロ画像ゲット

777 :デフォルトの名無しさん:2009/12/12(土) 15:54:16
通報されそう

778 :デフォルトの名無しさん:2009/12/12(土) 16:02:56
自動巡回とか楽しくなさそう

779 :デフォルトの名無しさん:2009/12/12(土) 17:46:34
boostのuBLASを利用してクラスを作ろうとしています。
classのヘッダ内で行列を定義しようとすると
error: expected identifier before numeric constant
error: expected ‘,’ or ‘...’ before numeric constant
ってエラーが起こるんですけど、原因わかる方いましたらお願いします。

780 :デフォルトの名無しさん:2009/12/12(土) 17:57:46
>>779
エラーが出てるところ意外を削って問題が再現する最小限のコードを作ってみるといい。

781 :デフォルトの名無しさん:2009/12/12(土) 18:41:23
http://codepad.org/l3gojFgj

とりあえずその辺のサイトのソースを参考にクラス化してテストするとこうなりました。
boostのスレで聞いた方が良いのでしょうか?

782 :デフォルトの名無しさん:2009/12/12(土) 18:48:29
メンバ変数の宣言時に初期化とか...
C++の仕様をちゃんと覚えてからboost覚えなさい

783 :デフォルトの名無しさん:2009/12/12(土) 18:56:17
>>781
もっと削れるだろ。
struct test { int x(0); };

784 :デフォルトの名無しさん:2009/12/12(土) 18:57:26
C++には「インターフェイスと抽象クラスを区別する」考え方が無いんですか?

785 :デフォルトの名無しさん:2009/12/12(土) 18:58:19
>>784
C++ には無いが、 C++ プログラマにはある。

786 :784:2009/12/12(土) 19:07:14
>>785
なるほど、適切な解答ありがとうございます

787 :デフォルトの名無しさん:2009/12/13(日) 01:38:01
int *p=new int[n]ってやってn+1個目が欲しくなったらどうすればいいの?


788 :デフォルトの名無しさん:2009/12/13(日) 01:40:31
deleteしてnewしなおす

789 :デフォルトの名無しさん:2009/12/13(日) 01:41:25
やっぱりいままでのデータをどっかに格納して交換しかないか・・・

790 :デフォルトの名無しさん:2009/12/13(日) 01:47:17
STL使えばいいじゃない

791 :デフォルトの名無しさん:2009/12/13(日) 01:48:03
struct mem{ void *ptr; std::size_t size; };
class flexible_deque : public std::deque<mem>{ ... };
構造的に、flexible_dequeの各々の要素のptrがまちまちなサイズの確保されたメモリ領域を指している形になる。
これなら既存の領域を包括するメモリを再度アロケートする必要はない。

operator []とかは自分で考えろ

792 :デフォルトの名無しさん:2009/12/13(日) 02:58:18
>>787
ああCのrealloc()みたいのがないって話か

newはコンストラクタ呼び出しを伴い、またオブジェクトのコピーは
コピーコンストラクタや代入演算子を呼び出すのでrealloc()に
相当する物は意味があまりないとして削られたんだな

793 :デフォルトの名無しさん:2009/12/13(日) 05:15:53
reallocなことやりたくて、new/deleteじゃなくてmalloc/free使ってることはよくあるよ
いろんなソフトである

794 :デフォルトの名無しさん:2009/12/13(日) 06:37:22
>>791
64K 128Kなど固定長ブロックを保持する方が無駄が少ない

795 :デフォルトの名無しさん:2009/12/13(日) 10:39:47
>>793
C++でもclassではなくPOD型を扱う時はmalloc/freeで十分
まあ俺はそういう場合でもnew/deleteで統一してるけどな

796 :デフォルトの名無しさん:2009/12/13(日) 10:41:06
C++では「staticなメソッド」と「普通の関数」のどちらも書く事ができますが、
作業用に使う時はどちらを使えばいいのですか?

797 :デフォルトの名無しさん:2009/12/13(日) 10:43:53
>>796
class間で共通したい作業ならstaticメソッド
そうでなければ普通の関数

別にどっちでもいいんだが、そういう風にかき分けると読む人に
意図が伝わりやすい

798 :デフォルトの名無しさん:2009/12/13(日) 10:50:20
あー悪い
どっちでも同じじゃないや
staticメソッドはprivate属性やprotected属性、const属性を
付ける事が出来るので、classに関連した操作はstaticメソッドで
やるべきだな

799 :796:2009/12/13(日) 10:51:44
>>797
>class間で共通したい作業ならstaticメソッド
すいませんが、共通したいの意味がわかりません

800 :デフォルトの名無しさん:2009/12/13(日) 10:58:17
>>799
staticメソッドにはthisポインタが渡らないので、極端な話を言えば
インスタンスを一つも作らなくても使える

例えば

struct Test {
static void pirnt() { cout << "Hello" << endl; }
};

とやってインスタンスを作らず

Test::print();

とやれば呼び出せる

共通してやりたい作業とは、例えばインスタンスが今いくつ存在するかの
カウンタを入れたい時とか

カウント式のスマートポインタを作る場合に使えるね

801 :デフォルトの名無しさん:2009/12/13(日) 11:14:15
>>796
作業用がなんの作業かによるだろ

802 :796:2009/12/13(日) 11:42:16
>>800
わかりました
ありがとうございます

803 :デフォルトの名無しさん:2009/12/13(日) 11:54:58
>>796
(1
private、protectedなメンバ変数/関数にアクセスせず、
一つのファイルでしか使わないなら

// xxxx.cpp
namespace {
  関数();
}

(2
private、protectedなメンバ変数/関数にアクセスせず、
外部に公開したいなら

普通の関数();

(3
private、protectedなメンバ変数/関数にアクセスして、
外部に非公開にしたいなら

class hoge {
private:
  非静的メンバ関数();
  静的メンバ関数(hoge&);
};

804 :デフォルトの名無しさん:2009/12/13(日) 11:55:39
(4
private、protectedなメンバ変数/関数にアクセスして、
外部に公開したいなら

class hoge {
  friend フレンド関数(hoge&);
};

(5
private、protectedなメンバ変数/関数にアクセスして、継承先クラスに公開、
継承先クラスでアクセス制御を変更したいなら

class hoge {
protected:
  非静的メンバ関数();
  静的メンバ関数(hoge&);
};

(6
private、protectedなメンバ変数/関数にアクセスして、外部に公開、
継承先クラスでアクセス制御を変更したいなら

class hoge {
public:
  非静的メンバ関数();
  静的メンバ関数(hoge&);
};

805 :デフォルトの名無しさん:2009/12/13(日) 14:49:58
ttp://codepad.org/SObcsiok
#ifは小数の比較はできないのですか?


806 :デフォルトの名無しさん:2009/12/13(日) 17:59:14
クラステンプレートの部分特殊化はOKなのに
関数テンプレートの部分特殊化は禁じられている

この仕様はどうしてこうなのですか?
深い理由があってのことでしょうか?


807 :デフォルトの名無しさん:2009/12/13(日) 18:00:03
1ファイルに1クラスでコードを書いてるんですがcppの行数が1万行に達しました。クラスを分けずにどうやってファイルに分割して行数を減らしていったらいいですか。

808 :デフォルトの名無しさん:2009/12/13(日) 18:16:58
関数ごとにファイル分割

809 :デフォルトの名無しさん:2009/12/13(日) 20:32:22
クラス設計を見直すのをおすすめするが、
cppをincludeすると一応分割はできる。
C++にもパーシャルクラス欲しいよな。

810 :デフォルトの名無しさん:2009/12/13(日) 20:37:46
>>807
10000行ならよほど低スペックマシンじゃない限り許容範囲じゃね?

811 :デフォルトの名無しさん:2009/12/13(日) 20:40:59
クラスという手段がクラスにするという目的に変わってしまっているような

812 :デフォルトの名無しさん:2009/12/13(日) 21:10:54
C++ って、変数i ( i >0 )をstring型に出来ないのかな?

ifstream ifs(file.dat);

datファイルの中身は、

1 ABC
2 12
3 arfe3

の様に、インデックスとそれに対応する中身がしるされているんだが、下の様なプログラムで処理しようと思ったが、
なかなか出来ないんですよね・・・

for( i = 0; i < 100; i++){

while(ifs){

if( ifs == "○"){

処理実行;

}
}
}


813 :デフォルトの名無しさん:2009/12/13(日) 21:14:08
string s;
ifs >> s;
if (s == "○"){

814 :デフォルトの名無しさん:2009/12/13(日) 21:14:38
itoa

815 :デフォルトの名無しさん:2009/12/13(日) 21:15:57
何がしたいのか分からない

816 :デフォルトの名無しさん:2009/12/13(日) 21:17:09
>>810
人間のスペック的な問題だろ
てかそのクラスはでかすぎると思う
どんなクラスなんだろう

817 :デフォルトの名無しさん:2009/12/13(日) 21:18:18
class ManageEnemy
{

818 :デフォルトの名無しさん:2009/12/13(日) 21:21:35
class ManageEnemy
{
    :
  class Enemy00
  {
    :
  };
  class Enemy01
  {
    :
  };

  (インナークラスがたくさん)
};
敵の種類が多くなりすぎてcppの行数が一万行越えますた。。
設計的には悪くないと思っている。

819 :デフォルトの名無しさん:2009/12/13(日) 21:27:06
いいえ最低です

820 :デフォルトの名無しさん:2009/12/13(日) 21:30:39
どう考えてもおかしい
設計的には悪いてか思いつかない

821 :デフォルトの名無しさん:2009/12/13(日) 21:35:10
インナークラスを使うのが問答無用で悪いってこと?
別にこれでうまく動いてるんだが。

822 :デフォルトの名無しさん:2009/12/13(日) 21:36:52
期待している通りに動くことが「正しい」なら別にいいんじゃね?
非機能要件は無視するってことで。

823 :デフォルトの名無しさん:2009/12/13(日) 21:37:56
なんだ叩きたいだけのクズか。

824 :デフォルトの名無しさん:2009/12/13(日) 21:38:56
10000行もあるようなクラスはたいがいモノリシックで悪い設計。
・・・と、ものしりっくに書いてみた^^。

825 :デフォルトの名無しさん:2009/12/13(日) 21:40:48
対案を示さず叩くだけならバカでもできるよ

826 :812:2009/12/13(日) 21:42:32
>> 815

つまり、"○"の部分にインデックス番号(i)が入ると、インデックスがiの列だけを取り出して処理を行いたい。

827 :デフォルトの名無しさん:2009/12/13(日) 21:45:17
(i)←まんこ

828 :デフォルトの名無しさん:2009/12/13(日) 21:45:46
誰が何の対案を求めてるの?
ファイル分割に関しては>>809が既に解決策を提示している

829 :デフォルトの名無しさん:2009/12/13(日) 21:47:09
C++にはJavaやC#にあるToStringメソッドや
VBのように自動で文字列⇔数値に変換する機能はありません。^^

boost::lexical_castを使いましょう。
localeにも対応する強力なライブラリです。

830 :デフォルトの名無しさん:2009/12/13(日) 21:49:55
設計的に悪いと言っているからもっと良い設計を知ってるんだろう

831 :デフォルトの名無しさん:2009/12/13(日) 21:51:07
>>826
いっぺんまるごと読んでstringの配列に行を保存すれば?

832 :デフォルトの名無しさん:2009/12/13(日) 21:57:14
>>819
>>820
お手本の設計教えてくださいよ。

833 :デフォルトの名無しさん:2009/12/13(日) 21:58:59
>>828
「○○が対案を求めてる」なんて誰も言ってないと思うが。
何につっかかってるの?

834 :デフォルトの名無しさん:2009/12/13(日) 21:59:24
>>832
ファクトリ使えよクズ

835 :デフォルトの名無しさん:2009/12/13(日) 22:03:14
仕様も分からないのにお手本教えてくれとか、
冗談で言ってるんだよね?
設計が悪いとかってのはファイル分割が
出来てない時点で...

836 :デフォルトの名無しさん:2009/12/13(日) 22:06:15
行数が多い=設計が悪い、だろうか

837 :デフォルトの名無しさん:2009/12/13(日) 22:08:12
一つの指標だわな

838 :デフォルトの名無しさん:2009/12/13(日) 22:40:31
>>835
思わせぶりなことしか書けない無能なら
いちいち出てこなくていいのに。

839 :デフォルトの名無しさん:2009/12/13(日) 22:41:26
>>838
はあ?おまえがでてくるな

840 :デフォルトの名無しさん:2009/12/13(日) 22:43:34
>>838
仕様とお前のコード晒せよ
ボロクソにこき下ろしたあとにお手本見せてやるよ

841 :デフォルトの名無しさん:2009/12/13(日) 22:49:03
仕様とコード見ないとお手本見せられないくせに何で設計が悪いと判断できるの?

842 :806:2009/12/13(日) 22:53:35
私の質問にお答えくださる方はいらっしゃいませんでしょうか?


843 :デフォルトの名無しさん:2009/12/13(日) 22:54:06
インナークラスは宣言だけにすればいいじゃないか
問題は他にも山積みなんだろうけど

844 :デフォルトの名無しさん:2009/12/13(日) 22:55:29
>>842
オーバーロードとごっちゃになるし、オーバーロードで事足りるからでは

845 :デフォルトの名無しさん:2009/12/13(日) 22:56:58
オーバーロードとの衝突を理由にするならデフォルト引数も禁じられるべきだが

846 :デフォルトの名無しさん:2009/12/13(日) 23:00:56
部分特殊化が必要になるのはどういうとき?

847 :デフォルトの名無しさん:2009/12/13(日) 23:05:28
改行減らせばいいだけでは?
小学生でもわかることなのに

848 :デフォルトの名無しさん:2009/12/13(日) 23:08:49
2chにぶっ放してもいい情報少ないからな・・・

849 :デフォルトの名無しさん:2009/12/13(日) 23:10:37
>>847
小学生でも?ほう・・・

850 :デフォルトの名無しさん:2009/12/13(日) 23:12:17
関数テンプレートの部分特殊化って必要ですか?
こんなこと↓はオーバーロードでできるけど

template<typename A, typename B>
struct X {};

template<typename Q>
void f(Q x) {}

template<typename A>
void f(X<A, int> x) {}

851 :デフォルトの名無しさん:2009/12/13(日) 23:17:05
>>839
馬鹿でも食い下がれるトコでだけ頑張らなくていいですよ、無能さん。

852 :デフォルトの名無しさん:2009/12/13(日) 23:18:06
>>840
じゃあ俺はお前の稚拙な手本をこき下ろすわw

853 :806:2009/12/13(日) 23:21:01
うろおぼえながら、例としては
 std::swapの特殊化をする時にテンプレートを使って特殊化したい
等が確かEffective C++でも挙げられていたと思います。
C++0xでできるようになればいいのですが。
期待できないですね。

854 :デフォルトの名無しさん:2009/12/13(日) 23:29:11
敵の種類が100種類超えるようなゲームをお前は作ったことがあるのかと。
作ったことないくせに一生懸命作ってる奴に文句だけ言って何のアドバイスもなしとかもう人間として本当の意味でレベルが低いというかこの手の卑しい人間は育ちが悪いとしかいいようがない。

855 :デフォルトの名無しさん:2009/12/13(日) 23:31:05
で、結局>>807は問題を解決できたのか?

856 :デフォルトの名無しさん:2009/12/13(日) 23:32:29
>>853
それは名前空間stdの禁止事項を緩和すればいい話です
部分特殊化が必要なのではなく、STLの設計が良くないということです

多分

857 :デフォルトの名無しさん:2009/12/13(日) 23:39:22
>>856
template < typename T >
std::swap < boost::shared_ptr< T > >{〜}

>STLの設計が良くないということです
もう一度言い直してくれ。


858 :デフォルトの名無しさん:2009/12/13(日) 23:45:46
0と-0の違いが分かりません。
どうにも2種類あるように思えてならないのですが。
このあたり扱いはどうなっているのでしょうか?


859 :デフォルトの名無しさん:2009/12/13(日) 23:52:23
1の補数?

860 :デフォルトの名無しさん:2009/12/14(月) 00:00:00
// enemy_manager.h
class enemy_manager {
  class enemy;
  enemy *enemy_;
};

// enemy_manager.cpp
#include "enemy_manager.h"
#include "enemy.h"

// enemy.h
#include "enemy_manager.h"
class enemy_manager::enemy {
};

// enemy.cpp
#include "enemy.h"

861 :デフォルトの名無しさん:2009/12/14(月) 00:00:42
>>858
浮動小数点で仮数部と指数部が0で符号ビットが1のときじゃなかったっけ?<-0

862 :デフォルトの名無しさん:2009/12/14(月) 00:08:14
>>857
template<typename T>
std::swap(boost::shared_ptr<T>&,boost::shared_ptr<T>&){}

は文法違反ですか?

863 :デフォルトの名無しさん:2009/12/14(月) 00:27:26
そもそもswapなんてswap対象のクラスと同じ名前空間に定義するものでしょ。

864 :デフォルトの名無しさん:2009/12/14(月) 00:34:52
>>863
それだと std::swap が隠れちゃって不便なときがあるんじゃ

865 :デフォルトの名無しさん:2009/12/14(月) 00:36:07
質問を投げっぱなしの奴ってどんな育て方されてんだろ

866 :デフォルトの名無しさん:2009/12/14(月) 00:40:27
早寝早起きを教えられたんだろう

867 :デフォルトの名無しさん:2009/12/14(月) 00:48:30
一生懸命プログラム作ってる奴もいれば、質問放り出して寝る奴もいる。
そんなもんだ。

868 :デフォルトの名無しさん:2009/12/14(月) 00:57:02
少しは心を広くしようぜ

869 :デフォルトの名無しさん:2009/12/14(月) 01:03:08
>>868
そうだな。>>854にも言ってやれよ。

870 :デフォルトの名無しさん:2009/12/14(月) 01:31:31
初めから全員に言ってるんじゃないの?
特に「狭い」奴が>>869みたいなヒスっぽいレス返すのも想定の上で。

871 :デフォルトの名無しさん:2009/12/14(月) 01:50:37
STLのvectorでintの配列を作って、5番目の要素を他の値に変えるのは
どうすればいい?

872 :デフォルトの名無しさん:2009/12/14(月) 01:53:31
v[4] = x;

873 :デフォルトの名無しさん:2009/12/14(月) 01:57:36
[4]とか[]を使ったやり方は推奨されないって記述をどっかで見かけたけど、
気にすることはない?

874 :デフォルトの名無しさん:2009/12/14(月) 02:03:36
その推奨してない奴は誰だ

一応 v.at(4)=x; という書き方もあって、こっちは要素が足りないと例外投げる
(v[4]は未定義動作になる)
ただし恐ろしく遅いので存在が保証されてれば[]を使うべき

という話を誤解したか歪めて伝えてるバカがいるんだな

875 :デフォルトの名無しさん:2009/12/14(月) 02:05:23
判り易い説明ありがとう。これで気兼ねなく使える

876 :858:2009/12/14(月) 06:59:40
>>859
>>861
そして-0と0は同一なのですね。
ありがとうございます。


877 :876:2009/12/14(月) 07:01:07
×同一
○等価

878 :デフォルトの名無しさん:2009/12/14(月) 08:33:39
同一協会
等価学会

879 :デフォルトの名無しさん:2009/12/14(月) 15:56:10
で?

880 :デフォルトの名無しさん:2009/12/14(月) 16:15:15
>>874
横書きの日本文に「,.」を用いるのは朝鮮人だよ。日本語は横書きでも「、。」が正しい。
韓国語では、縦書き文書では「、」が用いられ、横書き文書では「,」が用いられる。
この用い方は統一されているため、縦書き文書に「,」を、横書き文書に「、」を用いるのは誤り。
だから日本語で書くときもカンマピリオドの癖が出るんだろうね。

881 :デフォルトの名無しさん:2009/12/14(月) 16:18:38
>>880 のような無知蒙昧の輩はさっさと死ねばいいのに。

882 :デフォルトの名無しさん:2009/12/14(月) 16:21:48
バカは放置するとして
なんで技術系誌や論文ではカンマとピリオドを使うんだろうな?
カンマはともかく, ピリオドは見づらいわ.

883 :882:2009/12/14(月) 16:27:25
http://www5d.biglobe.ne.jp/~Jusl/Bunsyo/BunSakusei.html
これが元か。
ピリオドを使う奴はバカと思うことにした。

スレ違い失礼

884 :デフォルトの名無しさん:2009/12/14(月) 18:53:49
>>880
お前、教養のある他の人様に見てもらう
公式文書とか書いたことないだろ。

・・・ま、お前のレベルでは必要のないことだから
気にしなくて良いよ。


885 :デフォルトの名無しさん:2009/12/14(月) 18:56:21
>>884
えっ・・・

886 :861:2009/12/14(月) 19:07:05
>>876-877
規格的な話は分からないのだが
+0 0 -0 としたときに
+0 は“表現できる絶対値が最小の値”と0の間の正の値。
-0 は“表現できる絶対値が最小の値”と0の間の負の値。
とりあえずこっちの環境(C++)では等価として扱われているけどすべての言語体系で等価であるとは限らないから注意したほうがいいと思う
C++の規格としてどうかは詳しい人に聞いておくれ

887 :デフォルトの名無しさん:2009/12/14(月) 19:13:36
定数 0 に正負の単項演算子が適用されるだけじゃないの?

888 :デフォルトの名無しさん:2009/12/14(月) 19:59:50
浮動小数点数の規格はC++に限らないような
ってか0とepsの間なんてあったっけ

889 :デフォルトの名無しさん:2009/12/14(月) 20:18:01
共有ライブラリの中で例外が起きたときの catch の仕方を終えてください。
ライブラリの中で try - catch しても、呼び出し側で try - catch しても
捕捉できないのですがそういうものですか?

890 :デフォルトの名無しさん:2009/12/14(月) 20:32:11
ライブラリ内で例外を処理して処置をプログラマーに委ねない設計なら、そういうものだろう。

891 :デフォルトの名無しさん:2009/12/14(月) 20:36:45
そういう意味ではなく。
自分で作ったライブラリで起きた例外がどうやっても catch できないのですが
どうやって catch すればいいですか、という意味です。


892 :デフォルトの名無しさん:2009/12/14(月) 20:37:49
【FF13はライトニング死亡END】
召喚獣は6体しか使えないは嘘。隠し含めて12体
セラがルシになってクリスタルになるまでは一本道
中盤で訪れるエデンにファルシがいて、ちょっとしたクライマックスになる。
終盤で過去のエデンに行った時にルシになる前のライトニングがいて、セラは実の妹ではなく記憶がファルシに植え付けられていたことを知る。
記憶を取り戻してからは、オーディンの姿やアビリティが変化する。
ラ ス ダ ンはコクーンシティ。機械と融合したファルシの暴走と司教の陰謀を止めるのが最終目標。
ラ  ス ボ  スは司教エスラクゥス・マター。3回変身して最後はデスピサロみたいになる。
EDラストは3年後に仲間がみんな集まって再会。墓地で誰かの墓参りかと思ったら、ライトニングの墓。
墓石に本名のセラフィナ・ラ・マターと刻まれているのが映ってジエンド。

893 :デフォルトの名無しさん:2009/12/14(月) 21:15:39
C++の好きなところは西部の風を感じられるところ。
荒削り。だが、それが良い。
風を捕まえろ。

894 :デフォルトの名無しさん:2009/12/14(月) 22:41:24
>>886
ありがとうございます。


895 :デフォルトの名無しさん:2009/12/15(火) 01:12:41
>>889
ライブラリじゃなければ補足できたものがライブラリにまとめたらできなくなったってこと?
環境とかコードとか出さないと話にならない気がする。

896 :デフォルトの名無しさん:2009/12/15(火) 02:07:21
>>892
ホント?
本体ごと買う為の動機をありがとう^^

897 :デフォルトの名無しさん:2009/12/15(火) 13:01:00
すみません、
class templatesのテンプ引数を<int T>のようにやって
Tの数ごとに特殊かして実装のみ変えた別バージョンクラスを作ろうとおもっているのですが、
このやりかたは本に乗ってないので何かいけない理由とかあるんですか?
あと、Tをテンプレート引数にしたら実行時にメモリーを多く消費したりしませんよね?

898 :デフォルトの名無しさん:2009/12/15(火) 13:11:59
ない
何の本か知らないが全部の事柄をいちいち説明してたらキリがないから独断と偏見で不要と思われた部分を端折ったのでは
コードが増えるぶんのメモリは消費するけどそれ以上に何か消費したりはしない

899 :デフォルトの名無しさん:2009/12/15(火) 13:21:20
コードはコンパイルタイムだから増えないんじゃないんですか?

900 :デフォルトの名無しさん:2009/12/15(火) 13:22:51
コードを実行するためには、そのコードをメモリに読み込む必要がある

901 :デフォルトの名無しさん:2009/12/15(火) 13:26:07
そうじゃなくてテンプレート引数のintのことですよ。

902 :デフォルトの名無しさん:2009/12/15(火) 13:44:02
テンプレート展開によるコードサイズの増加は、場合によっては無視できないくらいになることもある
コードサイズが増えれば、実行時にその増えたコードをロードするためのメモリ領域が必要になる
テンプレートの規模にもよるし実装方法にもよるし使い方にもよるけれど
いまどき数MB増えたくらいじゃびくともせんよって人もいれば、1KBでも削りたいって人もいるかもしれない
俺は幸い気にしないで済んでる気楽な身だが、あなたがどうなのかは俺にはわからないので

903 :デフォルトの名無しさん:2009/12/15(火) 15:36:14
std::strstream(<strstream>)をどうしても使いたいのですが、
いまどき古すぎてネットでも余り書く方がいないようで、なかなか良い資料が見つかりません。
どうか参考となるサイトを教えて下さい。


904 :デフォルトの名無しさん:2009/12/15(火) 15:56:40
>>900
だがTEXTセクションがROMに配置されるようになっていたらどうかな?

905 :デフォルトの名無しさん:2009/12/15(火) 16:19:14
>>904
ROMをいっぱい使うだけじゃね?
お前の中ではROMはメモリに含まれないの?

906 :デフォルトの名無しさん:2009/12/15(火) 16:30:48
含まれないね

907 :デフォルトの名無しさん:2009/12/15(火) 17:33:06
ワラタ

908 :デフォルトの名無しさん:2009/12/15(火) 17:54:40
>>906
ふーん。

909 :デフォルトの名無しさん:2009/12/15(火) 17:56:10
どうでも良いことで残り少ないこのスレを埋めるな。

910 :デフォルトの名無しさん:2009/12/15(火) 18:01:44
ですねえ。

911 :デフォルトの名無しさん:2009/12/15(火) 18:20:37
少なくともROMに読み込むという表現は使わないなぁ

912 :デフォルトの名無しさん:2009/12/15(火) 18:29:02
ROMに書き込む前にメモリに読み込まなくてはいけません。

913 :デフォルトの名無しさん:2009/12/15(火) 19:02:50
なるほどそりゃメモリ消費量も気になるところだな
っておい

914 :デフォルトの名無しさん:2009/12/15(火) 19:44:25
ありゃ〜

915 :デフォルトの名無しさん:2009/12/15(火) 19:50:09
C**とかC//はないの?

916 :デフォルトの名無しさん:2009/12/15(火) 19:51:32
C** 動的C言語
C// C言語コメント

917 :デフォルトの名無しさん:2009/12/15(火) 20:01:20
ttp://ja.wikipedia.org/wiki/C*-%E7%92%B0

918 :デフォルトの名無しさん:2009/12/15(火) 20:39:02
http使ってアクセスにはどんな方法ありますか?
初心者でもとっつきやすいものができればよいのですが…
よろしくお願いします

919 :デフォルトの名無しさん:2009/12/15(火) 20:55:48
Boost.Asio

920 :デフォルトの名無しさん:2009/12/15(火) 21:02:08
HTTPより1個下の水準、ソケットを扱うという点で取っつきやすいかに疑問符がつく。
ソケット扱いたいんですという質問だったら自分もおすすめなんだけど。

921 :デフォルトの名無しさん:2009/12/15(火) 21:18:41
foo()関数の引数がn個とn+1個の2種類を作りたい場合、
オーバーロードを使わず、
デフォルト引数にしたほうが
いいのですか?
(どちらでも書けるとして。)

922 :デフォルトの名無しさん:2009/12/15(火) 21:22:26
iiyo

923 :デフォルトの名無しさん:2009/12/15(火) 21:24:03
>>922
え?

924 :903:2009/12/15(火) 21:24:22
解決しました。


925 :デフォルトの名無しさん:2009/12/15(火) 22:16:48
using namespace std;

ってやるヤツって何なの?


926 :デフォルトの名無しさん:2009/12/15(火) 22:54:18
ヒミツの魔法

927 :デフォルトの名無しさん:2009/12/15(火) 22:58:01
あるあるww

928 :925:2009/12/15(火) 23:00:49
ああごめん
俺が言いたいのは

std名前空間にせっかく入れてあるのにわざわざ引っ張り出してくる
プログラマって何なの!?

って言いたかったのだ。

929 :デフォルトの名無しさん:2009/12/15(火) 23:01:26
c++でメソッドにconstをつけると何が起きるのですか?

930 :デフォルトの名無しさん:2009/12/15(火) 23:02:23
>>929
何も起こらなくなる。


931 :デフォルトの名無しさん:2009/12/15(火) 23:02:35
>>929
ふふふ知りたいか?

932 :デフォルトの名無しさん:2009/12/15(火) 23:04:07
>>929
constなインスタンスからもメンバ関数を呼べるようになる。
代わりに、すべてのメンバ変数とthisがconst扱いになる。

933 :929:2009/12/15(火) 23:09:24
>>932
つまり、定数(インスタンス)からメンバ関数を呼び出せるようになるという事ですか?

934 :930:2009/12/15(火) 23:15:39
>>933
> 定数(インスタンス)
どういうこと?
何が言いたいのかわからん。


935 :デフォルトの名無しさん:2009/12/15(火) 23:34:47
struct sutorakuto{ void foo() const{ } };
sutorakuto obujekuto;
const sutorakuto konsuto_obujekuto;
obujekuto.foo(); // ok!
konsuto_obujekuto.foo(); //error!

メンバ関数をconstで修飾する事は、そのオブジェクト内のメンバを変更しないという事を宣言する意味。
ちなみにmutable修飾されたメンバ変数ならconstメンバ関数内からでも変更できる。何のためにあるのかは知らん。・

936 :デフォルトの名無しさん:2009/12/15(火) 23:36:57
参照をメンバに持ってるとデフォルトの代入が封印されるのは仕様ですか?

937 :デフォルトの名無しさん:2009/12/15(火) 23:38:56
struct test{
 int &a;
 test(int &a_) : a(a_){}
 test(const test &obj) : a(obj.a){} //コピーコンストラクタもちゃんと書こう!
};

938 :929:2009/12/15(火) 23:41:53
>>935
大体は、constの機能がわかりました
しかし、constなインスタンスが、constなメンバ関数しか呼び出せないメリットがわかりません

939 :デフォルトの名無しさん:2009/12/15(火) 23:43:54
>>938
void bar(const sutorakuto &obj){
 obj.foo(); // fooが非constメンバ関数だとfooの実行によりobjが変更される可能性があり引数宣言const sutorakuto&の型が意味を成さない
}

940 :929:2009/12/15(火) 23:53:04
>>939
constなインスタンスは完全に読み取り専用だから、
メンバ関数もconstにしなければならないということですね?

941 :デフォルトの名無しさん:2009/12/16(水) 00:48:15
>>928 マジレスすると「おまじない」とか「魔法」とか言って main の外で
使う入門書やら入門サイトが昔はやたら多かった.今は知らないけど.

そういった本で覚えた人は何も考えずに使うんだろう.

個人的にはこういうの↓も嫌いなんだけど

FILE *fp;
if ((fp = fopen("smpl.txt", "r")) == NULL){
  printf("file open error!!\n");
}


942 :デフォルトの名無しさん:2009/12/16(水) 00:49:44
>>916
残念ながら C++ における C とは Traditional C であって // は構文エラー

943 :デフォルトの名無しさん:2009/12/16(水) 02:14:29
質問があります。

Fedora12 + gcc-c++-4.4.2-7.fc12.i686 って環境です。
コンパイルを実行しようとすると、

make: 警告: ファイル `include/HadrontherapyRunAction.hh' の修正時刻が 2.7e+04 秒分未来の時刻です

こういう風にエラーが出て、ファイルの依存関係確認が延々とループします。
対処方法とかってあるのでしょうか?
識者の方、ご教示頂けたらと思います。よろしくお願いいたします。

944 :デフォルトの名無しさん:2009/12/16(水) 02:17:24
>>943
PC の時刻設定か、ファイルの修正時刻か、どちらかがおかしいので確認すべし。
対処方法は、まぁわかるだろ。

945 :デフォルトの名無しさん:2009/12/16(水) 02:25:07
>>944
2台のPCのうち1台で編集した物を、もう1台に移してコンパイルを行った場合に必ず出ます。
PCは2台ともネットで時刻同期を取っています。

今の所、怒られたファイルを開き、スペースやエンターを入れて保存を繰り返しているのですが、
いかんせん扱っているファイル数が多いので、延々とこの作業をやるのかと思うと
気が滅入ってしまうのです…。

タイムスタンプのチェックを外すオプションか何かがあるのかなと思って質問した次第ですが、
無いようですね…。
諦めてファイルを1個1個編集していきます。

確か前は、警告は出るがコンパイルは滞りなく行われてた気がするんですが…
変わったんでしょうかね。

946 :デフォルトの名無しさん:2009/12/16(水) 02:38:05
>>945
> PCは2台ともネットで時刻同期を取っています。
だからって時刻設定を確認しないの?何なの?バカなの?

あと、手動で対処するぐらいなら touch で一括対処しろよ。

947 :デフォルトの名無しさん:2009/12/16(水) 03:04:28
>>943-946
スレ違いどころか板違いだ。
Linux 板にでも行け。

948 :デフォルトの名無しさん:2009/12/16(水) 03:47:20
>>943 02:14:29
>>944 02:17:24
>>945 02:25:07

949 :デフォルトの名無しさん:2009/12/16(水) 04:56:01
自演って言いたそうだけど、自演する意味なくないか、内容的に?

文章書くの遅い人だと、>>945を7分半後に書き込めるわけない!
って考えるのかな。

950 :デフォルトの名無しさん:2009/12/16(水) 06:27:32
>>941
それは何が嫌なの?
NULLと比較してること?

951 :デフォルトの名無しさん:2009/12/16(水) 08:31:34
変数に戻り値を代入しつつその値を比較しているってところだろ
俺もあの書き方は嫌いだ
1行に複数の処理を記述すんじゃねーよと
fopenとNULLチェックで2行に分けろと
ついでに戻り値が0非0の判定の「!=0」も省略するんじゃねーよと

952 :デフォルトの名無しさん:2009/12/16(水) 08:43:07
C++ではインターフェイスが無いので、インターフェイスは使わずに多重継承だけするのですか?

953 :デフォルトの名無しさん:2009/12/16(水) 09:01:54
>>952
言語機能として直接「インターフェース」と呼ばれるものはありませんが、
純粋仮想関数を持ち実装を持たないクラスが他の言語の「インターフェース」と同様に使えます。
このようなクラスを「インターフェース(クラス)」と呼ぶこともあります。

954 :デフォルトの名無しさん:2009/12/16(水) 09:19:08
>>951
まあそう怒るなよ。昔は1画面20行くらいしか表示できなかったんだ。プリンターも遅かったしな。
こんな書き方でも慣れてしまうとなんとも思わない。

今はメリットないだろうけどね。

955 :デフォルトの名無しさん:2009/12/16(水) 10:11:04
>>954
> 昔は1画面20行くらいしか表示できなかったんだ。
行数はここでは関係無いんじゃないかな。>>941>>951が望むのはこういうのでしょう。
FILE* fp = fopen("smpl.txt", "r");
if (!fp){
  printf("file open error!!\n");
}

>>941にある書き方は、1行目に情報が少なすぎるのに、2行目は逆に多すぎて、
思考の負荷分散的に醜く感じる。

956 :デフォルトの名無しさん:2009/12/16(水) 10:13:52
>>945
>2台のPCのうち1台で編集した物を、もう1台に移してコンパイルを行った場合に必ず出ます。
今どきgitもhgもsvnも使ってないの?


957 :デフォルトの名無しさん:2009/12/16(水) 10:20:45
次スレ建て時、テンプレ貼り忘れ注意。

958 :デフォルトの名無しさん:2009/12/16(水) 11:43:07
>>955
Cでその書き方ってできたっけ?

959 :デフォルトの名無しさん:2009/12/16(水) 11:44:49
>>958
特に問題ない。
関数の途中で変数を宣言したいならC99をつかえ。
ちなみにここはC++相談室。

960 :デフォルトの名無しさん:2009/12/16(水) 11:45:55
間違えた。宣言じゃなくて定義だった。

961 :952:2009/12/16(水) 13:22:40
>>953
ありがとうございます

962 :デフォルトの名無しさん:2009/12/16(水) 14:36:01
Cで途中で変数宣言したかったらスコープ書いちゃうかな
途中から最後までとか微妙なスコープだと悩むけど

963 :デフォルトの名無しさん:2009/12/16(水) 14:42:25
2038年問題に対してどう対策すればよいでしょうか

964 :デフォルトの名無しさん:2009/12/16(水) 14:53:34
その頃にはCPUが全部64-128bitになってtime_tも64-128bitになってるだろうから
心配すんな
それよりもC言語そのものがないかもしれない

965 :デフォルトの名無しさん:2009/12/16(水) 14:55:26
29年後・・・想像もつかんな。その頃には年金も破綻してて生活保護とかで暮らしてるのかな

966 :デフォルトの名無しさん:2009/12/16(水) 15:00:45
年金が破綻したら生活保護も破綻するんじゃねーの

967 :デフォルトの名無しさん:2009/12/16(水) 15:00:53
CPUは余り関係ないな。

968 :デフォルトの名無しさん:2009/12/16(水) 15:05:55
年金と生活保護ではその資金源が異なるが
まぁその頃までには日本は無いかもしれんな
恐るべし小沢&鳩山ってとこかな

969 :デフォルトの名無しさん:2009/12/16(水) 15:07:27
>>964
その頃には〜とか言ってほったらかした結果がY2Kだよ!

970 :デフォルトの名無しさん:2009/12/16(水) 15:10:03
パソコンの日時いじって実際にどういう事が起きるかテストしてみればいいさ

971 :デフォルトの名無しさん:2009/12/16(水) 15:11:18
誰か2038年1月19日3時14分7秒の30秒前くらいにPCの日時設定して試してみて。

972 :デフォルトの名無しさん:2009/12/16(水) 15:13:21
やめておけ爆発して焼け野原だぞ
俺の友達はそれやって死んだ

973 :デフォルトの名無しさん:2009/12/16(水) 15:13:52
先日 random() という関数を見かけました(多分自作でない)。
rand()ならお馴染みですが、random()は初めてです。
何が違うのでしょうか?

974 :デフォルトの名無しさん:2009/12/16(水) 15:16:17
Ramdomクラスとかじゃなくて関数?残念ながら俺は知らん

975 :デフォルトの名無しさん:2009/12/16(水) 15:17:35
その正体は関数オブジェクトに7777ギタン賭ける

976 :デフォルトの名無しさん:2009/12/16(水) 15:18:49
>>971
こういうのをあちこちのスレにコピペしまくったらどういう事態が生じる?

977 :デフォルトの名無しさん:2009/12/16(水) 15:21:20
ここ3〜4年の間に発売されたPCなら2038年問題は対策されてるから大丈夫

978 :デフォルトの名無しさん:2009/12/16(水) 15:25:43
2000年製PCが現役稼動中だぜ・・・

979 :デフォルトの名無しさん:2009/12/16(水) 15:31:53
>>978
2038年1月19日3時14分7秒の30秒前に設定して30秒後どうなるか詳しく報告してくれ。

980 :デフォルトの名無しさん:2009/12/16(水) 15:34:07
>>978
たぶん大丈夫だと思うから設定して試してみて。お願い

981 :デフォルトの名無しさん:2009/12/16(水) 15:40:54
>>973
rand() の質が悪かった昔、random() が作られた。
でも今は同じなので、標準Cで規定された rand() を使うよろし。

982 :978:2009/12/16(水) 15:43:58
>>979-980
別になんともなかったよ。いろんなソフト起動してみたけどどれも正常だった。よかったね

983 :973:2009/12/16(水) 17:25:35
>>974
>>981
ありがとうございます。

984 :デフォルトの名無しさん:2009/12/16(水) 17:50:00
>>982
俺も試してみたけどなんともなかった
2038年問題なんてなんで騒いでるかワカンネ

985 :デフォルトの名無しさん:2009/12/16(水) 19:42:09
コピーコンストラクタの説明で、メンバ変数にポインタを使っている解説が少ないのですが
メンバ変数にポインタを使う事は推奨されていないのでしょうか?

private:
int hoge;
public:
Test(const Test& t) { t.hoge; }
また、t.hogeは何故シンタックスエラーにならないのか教えてください

986 :デフォルトの名無しさん:2009/12/16(水) 19:43:19
業務系のアプリなんて怖くてガクブルだろうな
C系で業務系アプリって関わったこと無いから
実在すんのかしらんけど。

987 :デフォルトの名無しさん:2009/12/16(水) 19:53:57
>>985
解説が面倒いからじゃないか
その必要があれば、いくらでも使っていいよ

C/C++では式は何でもセミコロンを付ければ式文になる
1;
とか
0;
とか
2 + 3;
とかも意味がないだけで構文的には問題ない

988 :デフォルトの名無しさん:2009/12/16(水) 20:19:36
>>987
thx

989 :デフォルトの名無しさん:2009/12/16(水) 20:41:58
>>987
> t.hogeは何故シンタックスエラーにならないのか教えてください
おれはここの部分の意図が理解できなかったのだが、
良く察したな。
さては魔女だな。

990 :デフォルトの名無しさん:2009/12/16(水) 21:07:08
>>985
コピコンは参照と決まっているだけ
つーか、そんくらいやってみればわかるだろ
理由は禿本に書いてあるし

逆に「少ない」って表現が気になる

991 :デフォルトの名無しさん:2009/12/16(水) 21:56:53
一応確認ですが、
string s("str");
hoge(str);

hoge(string("str"));は同じですよね?

992 :デフォルトの名無しさん:2009/12/16(水) 22:00:16
違います

993 :デフォルトの名無しさん:2009/12/16(水) 22:12:42
2行目でコンパイルエラーだな

994 :991:2009/12/16(水) 22:15:03
間違えました
hoge(str)じゃなくて、hoge(s)ですね

>>992
why ?

995 :デフォルトの名無しさん:2009/12/16(水) 22:24:05
>>992
そうなの?

996 :デフォルトの名無しさん:2009/12/16(水) 22:34:53
>>992
warum?

997 :デフォルトの名無しさん:2009/12/16(水) 22:44:39
おおかた>992は>993の理由で違いますと言ったんだろうよ。

>994-996
しつけぇw
どんだけ陰険なんだ低脳のくせに。


998 :デフォルトの名無しさん:2009/12/16(水) 22:45:28
1000なら次スレ廃止

999 :デフォルトの名無しさん:2009/12/16(水) 22:46:31
1000ならクリスマス用彼女ロボットプログラミング開始

1000 :デフォルトの名無しさん:2009/12/16(水) 22:47:40
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||ii''''""" "''''"" """"'ii||||||||||||||||||||||||||||||
||||||||||||||||||iiii'''''""           .,,,,,,,,,, , """'''ii||||||||||||||||
|||||||||||||||||i'" .,,iillll|||||lllli,,.      '''"~~"''''・;;,,..  il|||||||||||||||
|||||||||||||||〃 i''"              ,,,,,,,,, .   ||||||||||||||||
|||||||||||||||  ,,ii'".iillliiミi,.ミi,     .,ッ'~.,illllllliェ. 'i,,  i|||||||||||||||||
|||||||||||||||| l|" il|||||||||li `|li   ,,iii'" ,i|||||||||||i i,  l||||||||||||||||
|||||||||||||||| 'il|l,,.ミl||||||リ.,,ii|l"  "l||ミェ, ミi|||||||lリ.,li,  i|||||||||||||||||
||||||||||||||||  "'''iilllllllリ''""     "'ミiilllllliiリ''""  i||||||||||||||||
|||||||||||||||          .,;             il||||||||||||||
||||||||||||||||        .;:,,.    .,,.          il||||||||||||||
il||||||||||||||i,             '".;:          il||||||||||||
illl||||||||||||||i,     .,,,,,メiiiiiメiiillllilllliiiョュ,,,,..       il||||||||||||
 iill|||||||||||||i,    "iii,..  ,. ,. .,. .,.,,i||||li;.      ,il||||||||||||
   'i||||||||||ii,    ''ill||""'iil"iiゞゞヾllll|||l'"    .il||||||||||||”
    "i|||||||||ii,,.    "'iii'""""'iiiii'"".    ..,,iil|||||||||||”"
     "i|||||||||||iii,,             .,,iiillll||||||||”
      """"""""            '''""""

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

215 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)