トップページ⇒tech
1001コメント270KB

C++相談室 part75

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

前スレ
C++相談室 part74
http://pc12.2ch.net/test/read.cgi/tech/1256397778/
0002デフォルトの名無しさん2009/11/28(土) 16:33:06
最近のマシンはメモリが安価で優秀なのでSTLで実行ファイルの大きさが10倍になっても特に問題ありません。
0003デフォルトの名無しさん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)に対応。
0004デフォルトの名無しさん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/
0005デフォルトの名無しさん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/
0006デフォルトの名無しさん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

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

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

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

0009デフォルトの名無しさん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;
}
0010デフォルトの名無しさん2009/11/28(土) 16:55:00
throw() があるとpaafekuto
0011デフォルトの名無しさん2009/11/28(土) 17:01:08
 ttp://codepad.org/UcVzc48I

このコードにて
20行目と21行目が、どうしてClassDと表示されないのですか?
0012デフォルトの名無しさん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))
と解釈され、正しい式となる。
0013デフォルトの名無しさん2009/11/28(土) 17:16:39
条件演算子(?:)って同じ型しか返せないんじゃなかったかな。
だから classD も classB に暗黙に変換される。
0014デフォルトの名無しさん2009/11/28(土) 17:16:40
あとJIS的には条件演算子じゃなくて
二択条件演算子
っていうんだね。
0015デフォルトの名無しさん2009/11/28(土) 17:24:11
>>10
::operator newってbad_allocをthrowしないの?知らなかったじぇ
0016112009/11/28(土) 17:25:12
ありがとうございます。
 ttp://codepad.org/869c7q1b
こうしてみたらClassYが多くなりました。
現在JIS規格を眺めておりますが
複雑な事が書かれています。

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

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

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

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

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

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0018112009/11/28(土) 17:40:21
 ttp://codepad.org/XACh4bms
両方を暗黙の型変換可能にするとコンパイルエラーになるようですね。
0019デフォルトの名無しさん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++のバグと言うことでしょうか?
0020デフォルトの名無しさん2009/11/28(土) 18:36:40
そうですよ
0021デフォルトの名無しさん2009/11/28(土) 18:51:11
かもね
0022デフォルトの名無しさん2009/11/28(土) 18:51:20
  ∧_∧
 ( ´∀`)
 (    )
 | |  |
 (__)_)
0023デフォルトの名無しさん2009/11/28(土) 18:52:43
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{
0024デフォルトの名無しさん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++){
0025デフォルトの名無しさん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);
}
というようなことをやりたいんですが。
0026デフォルトの名無しさん2009/11/28(土) 18:57:57
for(SOME_IDX idx=AAA; idx<SOME_IDX_NUM; idx++){
  func(idx);
}
0027デフォルトの名無しさん2009/11/28(土) 18:58:00
ちょっと頭悪すぎますね?
0028デフォルトの名無しさん2009/11/28(土) 18:58:40
なんだと
0029デフォルトの名無しさん2009/11/28(土) 18:59:48
++がコンパイルエラーになります
0030デフォルトの名無しさん2009/11/28(土) 19:02:53
for(int idx=AAA; idx<SOME_IDX_NUM; idx++){
  func(idx);
}
0031デフォルトの名無しさん2009/11/28(土) 19:04:20
funcの引数の型がIDXなので変換できないと怒られます
0032デフォルトの名無しさん2009/11/28(土) 19:05:29
static_cast<IDX>(idx)
0033デフォルトの名無しさん2009/11/28(土) 19:07:04
質問が糞過ぎて釣りだと思ってた
0034デフォルトの名無しさん2009/11/28(土) 19:08:18
答える側も釣ってるんだと思ってた
0035デフォルトの名無しさん2009/11/28(土) 19:08:21
できますたありがとうございました。
0036デフォルトの名無しさん2009/11/28(土) 19:09:09
oprator++を定義する
0037デフォルトの名無しさん2009/11/28(土) 19:11:10
1発で答えられてねえし
0038デフォルトの名無しさん2009/11/28(土) 19:22:26
C++0xをVSが取り入れるのはいつですか
0039192009/11/28(土) 19:22:35
やっぱりバグですか…。
VC++で、どうすればこれを回避できますでしょうか?
0040デフォルトの名無しさん2009/11/28(土) 19:24:42
>>38
C++0xはまだ出来上がってないから、当然まだ取り入れられることもないだろ。
0041デフォルトの名無しさん2009/11/28(土) 19:28:48
VS2010で完全じゃないけど一部の機能が取り入れられるよ
0042デフォルトの名無しさん2009/11/28(土) 19:35:26
>>19
return flag ? MyString(hoge.value) : (flag ? hoge : MyString(hoge.value));と書くのはだめなの?
0043192009/11/28(土) 19:37:42
>>42
ありがとうございます。
なるほどcastで解決するのですね。
0044デフォルトの名無しさん2009/11/28(土) 19:47:29
C++の余命を教えてください(>_<)
まじめな質問してごめんなさい(>_<)
0045デフォルトの名無しさん2009/11/28(土) 19:49:16
1000 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 17:09:20
1000なら3年後までにC++衰退
0046デフォルトの名無しさん2009/11/28(土) 20:05:19
呪術はお呼びじゃねえよ
0047デフォルトの名無しさん2009/11/28(土) 20:10:02
C++03が衰退するのは間違いない
0048デフォルトの名無しさん2009/11/28(土) 20:13:34
またコーディング規約に禁止事項が増えるのか
0049デフォルトの名無しさん2009/11/28(土) 20:28:03
コーディングが禁止される禁治産者が増えるの間違いだろう
0050デフォルトの名無しさん2009/11/28(土) 20:54:13
教えてくれてありがとうございます(>_<)
それでは皆さん、何時もの様にクダラナイ質問をどうぞ(>_<)
0051デフォルトの名無しさん2009/11/28(土) 21:03:45
よくわからんけどC++03xはC99と同じでコンパイラメーカーが
無視する可能性はある

C++98/2003で作られたプログラムが多いからだ
0052デフォルトの名無しさん2009/11/28(土) 21:18:36
(>_<) これつかうやつは女が多い
ありがとうございました!! と小文字の!を2度使うやつも
0053デフォルトの名無しさん2009/11/28(土) 21:20:55
そりゃC++03xは無視だろさ
C++0xに関してはVC++とGCCはサポートするのが既定路線
0054デフォルトの名無しさん2009/11/28(土) 22:57:13
 ttp://codepad.org/X0l4gJpf
これですが、手元で自分で
 g++ ソースファイル.cpp -O0
として実行しても
 ClassY()デフォルトコンストラクタ
 ClassX()デフォルトコンストラクタ
 /////////以下foo()/////////
 ClassX()デフォルトコンストラクタ
 ClassY(const ClassX&)コンストラクタ
と表示されるだけで、両方とも最後のコピーコンストラクタが
実行されません。

この違いはどこから来ているのでしょうか?
また、codepadと手元のg++はどちらが正しい挙動ですか?
0055デフォルトの名無しさん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. ...
0056デフォルトの名無しさん2009/11/28(土) 23:16:42
>>55
ありがとうございます。
> 一定の条件が満たされれば
> たとえコピーコンストラクタやデストラクタが副作用を持っていたとしても
> 省略可能
なんですね。

ttp://codepad.org/b2yZXUQi
このように15行目だけstatic_castを付けて変えたのですが
これも同様の理由で省略されたと考えられるのですね。
ありがとうございました。
0057デフォルトの名無しさん2009/11/29(日) 00:39:46
//↓このように定義して
typedef boost::shard_ptr< std::vector<T> >  PtrVector<T>;//実際はエラーになる

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

とういふうに使いたいんだけど,どのように書けば良いですか?
0058デフォルトの名無しさん2009/11/29(日) 00:46:13
template<typename T>
struct PtrVector {
typedef boost::shared_ptr<vector<T> > type;
};

PtrVector<std::string>::type ptrVecString;
0059デフォルトの名無しさん2009/11/29(日) 00:48:10
ありがとうございました。
0060572009/11/29(日) 01:15:33
>>58
できました!ありがとう!
0061デフォルトの名無しさん2009/11/29(日) 04:50:29
>>14
ISO のほうでは "Conditional operator" で C も C++ もいっしょなのに、
なんで JIS C++ だけ余計なもんが付いてるのかねぇ?
0062デフォルトの名無しさん2009/11/29(日) 04:58:22
配列にクラスの型を入れてnewできますか?
0063デフォルトの名無しさん2009/11/29(日) 05:04:49
>>62 C++ でおk
0064デフォルトの名無しさん2009/11/29(日) 05:08:16
例を
0065デフォルトの名無しさん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];
}
0066デフォルトの名無しさん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]();
0067デフォルトの名無しさん2009/11/29(日) 07:00:24
newじゃなくて関数ポインタの配列を使ってCreateClassx()を並べればできるかもな。
あとは全部にClone()実装した具象クラスの配列とか。

ただし、そこまでやる価値があるかどうかは俺は知らん。
0068デフォルトの名無しさん2009/11/29(日) 08:09:41
class Hoge{};
Hoge* operator[](type_t x){
switch(x)
0069デフォルトの名無しさん2009/11/29(日) 10:07:42
VC++2008EE使ってるんですがオプションのVC++ディレクトリで必要なライブラリやインクルードファイルの場所指定してるのに必ずリンカでエラー起こします
何が原因でしょうか?

しょうがないのでプロジェクトのプロパティから追加もしてみましたがリンカでエラーでした
0070デフォルトの名無しさん2009/11/29(日) 10:26:27
>>66
前スレにこんなん書いてくれてた人いたよ
ttp://codepad.org/6AIfsQCH
0071デフォルトの名無しさん2009/11/29(日) 10:27:48
>>17の地鎮祭だけど、
ダイナミックリンクだろうがなんだろうが
テンプレートライブラリであるstd::vectorを使って、
ファイルサイズが増えないのは効果あるんじゃないの?
0072デフォルトの名無しさん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でしょうか?

0073デフォルトの名無しさん2009/11/29(日) 13:42:07
初歩的な質問なんですが、基底クラステンプレートから派生された2つのクラステンプレート
のインスタンスを基底クラスに代入するときは基底クラステンプレートのポインターの宣言時に
<>はいらないですか?
0074デフォルトの名無しさん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でもできる
ようにしたいのですが、良い方法が思いつきません。

よろしくお願い申し上げます。
0075732009/11/29(日) 13:53:09
仮引数だと<>をつけなくても宣言できますよね。
と言うことはポインターや参照の宣言でも<>いらないってことですか?
0076デフォルトの名無しさん2009/11/29(日) 13:54:22
クラス使えよ
0077742009/11/29(日) 13:59:55
>>76
それをヒントに
ttp://codepad.org/juyxCSp8
これで解決しました。
ありがとうございました。
0078デフォルトの名無しさん2009/11/29(日) 14:53:43
>>73と>>75もよろしくお願いします。
0079デフォルトの名無しさん2009/11/29(日) 14:58:49
>>78
試せばわかるだろカス
0080デフォルトの名無しさん2009/11/29(日) 15:04:17
>>79
試したけどわかりませんでした。
よろしくお願いします。
0081デフォルトの名無しさん2009/11/29(日) 15:04:33
なんで分からないんだよ
0082デフォルトの名無しさん2009/11/29(日) 15:07:20
ほっとけ
0083デフォルトの名無しさん2009/11/29(日) 15:29:27
たぶん何を試して良いのか
質問している方も分かってないんじゃね?

分かっているというなら
 ” ソースみせろ ” 
0084デフォルトの名無しさん2009/11/29(日) 15:38:29
>>73
これはテンプレート初心者が良く疑問に思う良い質問ですね。
私も疑問に思っていて未だに試す機会が無いので
こういった質問してくれるととても助かります。
0085デフォルトの名無しさん2009/11/29(日) 15:45:19
>>84
本人乙、としか言いようがない。
0086デフォルトの名無しさん2009/11/29(日) 15:49:19
>>85
君は超能力者かいな!!
0087デフォルトの名無しさん2009/11/29(日) 15:51:01
2ch に書き込みできてフリーのコンパイラは使えないなんてやつはなかなかいない。
質問してくれただけで助かることなんて無いし、あったとしてもわざわざそれだけを
書き込む意味がない。
「良く疑問に思う良い質問」だと言うのならよくある回答をしてあげればいいのに。
0088デフォルトの名無しさん2009/11/29(日) 15:51:06
ハァァァァァァァァ
0089デフォルトの名無しさん2009/11/29(日) 15:52:13
>>87
コナンの見すぎwww
0090デフォルトの名無しさん2009/11/29(日) 15:53:18
くせぇ流れだな
だから構うなって言ったんだよ
0091デフォルトの名無しさん2009/11/29(日) 15:55:00
応答時間がやたら早すぎな人工無能
0092デフォルトの名無しさん2009/11/29(日) 15:55:40
>>90=>>98=>>88>>=>>87=>>86=>>85=>>83=>>82=>>81
0093デフォルトの名無しさん2009/11/29(日) 16:03:55
素直にこたえてりゃあこんなこたーにならねかったのになー
0094デフォルトの名無しさん2009/11/29(日) 16:04:59
>>91
人工無能フイタw

たぶん、俺が思うに
>>73と>>84は別人で、
ただバカにする意図を込めて>>84のレスをしたのではないかと。
0095デフォルトの名無しさん2009/11/29(日) 16:21:39
istringstreamとostringstream
の違いが分かりません。
教えてください!or分かるサイトを教えてください!
0096デフォルトの名無しさん2009/11/29(日) 16:24:34
こんなスレで聞くよりyahoo知恵袋で聞いた方がいいよ。
0097デフォルトの名無しさん2009/11/29(日) 16:29:32
>>95 http://ja.lmgtfy.com/?q=istringstream+ostringstream
0098デフォルトの名無しさん2009/11/29(日) 16:37:22
>>97
死ねばいいのに
0099デフォルトの名無しさん2009/11/29(日) 16:39:17
ちゃんとistringstreamとostringstreamの違いが分かるサイトをおしえてあげたのに
ひどい言われようだな。
0100デフォルトの名無しさん2009/11/29(日) 16:47:55
>>99
え?頭おかしいんじゃない?w
0101デフォルトの名無しさん2009/11/29(日) 17:07:55
>>97
助かります!
0102デフォルトの名無しさん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/

覚える必要があるなら全部覚えればいいさ
0103952009/11/29(日) 17:20:36
>>102
ありがとうございます!
0104742009/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を捨てるのが一番な気がしますが、
どうかよろしくお願いします。
0105742009/11/29(日) 18:48:54
やっぱbcc捨てます。

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

F8 キー押せ
0108デフォルトの名無しさん2009/11/29(日) 18:59:06
もしくはエラーメッセージをダブルクリック
01091062009/11/29(日) 19:01:19
事故解決しました
0110デフォルトの名無しさん2009/11/29(日) 19:01:28
それか Ctrl + G 押して
行番号指定して OK ボタンを押す
0111デフォルトの名無しさん2009/11/29(日) 19:02:14
それにまだまだいろいろあるんだが
解決したんなら必要ないか
0112デフォルトの名無しさん2009/11/29(日) 19:11:03
ディレクトリの探索をwin linuxで行うにはどうすればいいですか
boostとか大かがりなのはいやです
追加が最小のやり方かいいです
0113デフォルトの名無しさん2009/11/29(日) 19:22:44
>>112
いやboostにしとけ。
> boostとか大かがりなのはいやです
十分使われて検証されているヤツがいいに貴マットル。
0114デフォルトの名無しさん2009/11/29(日) 19:34:13
>>112
#ifdef
をつかって2通り書け。
それが
> 追加が最小のやり方
だ。
0115デフォルトの名無しさん2009/11/29(日) 19:36:39
そうなってるヘッダわけてくれお
0116デフォルトの名無しさん2009/11/29(日) 19:37:23
自分で書く量もすくないのがいいんです
0117デフォルトの名無しさん2009/11/29(日) 19:38:16
>>112
環境依存のものは
↓で聞いたほうがいい回答得られるんじゃない?

【初心者歓迎】C/C++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
01181132009/11/29(日) 19:42:45
そもそもなんでboostじゃダメなのか
わからない。
俺なんて自分や同僚のコードより絶対boostを信頼して
使うけどなぁ。
0119722009/11/29(日) 20:02:09
すみません
どなたか
>>72
をお願いします。
0120デフォルトの名無しさん2009/11/29(日) 20:07:37
>>119
ttp://codepad.org/
0121722009/11/29(日) 20:12:27
貼りました。
http://codepad.org/HuDbGicA
だと、1と3が暗黙の型変換で、2が明示的な型変換でしょうか?
0122722009/11/29(日) 20:13:51
http://codepad.org/HqcL8MHl
hoge_tの該当するコンストラクタにexplicitが付いていると
できなくなるのが「1と3」ではなく「3だけ」という結果でした。

0123デフォルトの名無しさん2009/11/29(日) 20:23:10
>>118
自分だけで使うなら良いんですがソース配布して標準のコンパイラで
コンパイルできた方が良いんです
0124デフォルトの名無しさん2009/11/29(日) 20:36:12
>>117
環境に依存しないようにしたいんです 少なくともwinとlinuxで動作するのがいいいんです
01251142009/11/29(日) 20:40:58
>>124
> 環境に依存しないようにしたいんです 少なくともwinとlinuxで動作するのがいいいんです
ちょ!
その一文が無茶。
ファイルやディレクトリの形式が違うことは知ってるだろ?
書け。自力で。それっきゃないだろ。
だいたいそうじゃないと
> ソース配布して
この時困ったことになるぞ?
0126デフォルトの名無しさん2009/11/29(日) 20:43:06
>>116のところで皆教える気が失せた。
0127デフォルトの名無しさん2009/11/29(日) 21:01:23
まあ#ifdef _WIN32で
opendir()とFindFirstFile()を使い分けるくらいしか無いべさ
0128デフォルトの名無しさん2009/11/29(日) 21:18:51
windowsの場合は
dirent.h windows
でぐぐってきたやつぶち込んでやってみることにしました。
0129デフォルトの名無しさん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
}

最新版はちゃんとバグ取れてるよ
0130デフォルトの名無しさん2009/11/29(日) 22:22:52
あ、ごめん
ECC6.2.0(Embarcadero C++ Compiler)だった
0131742009/11/29(日) 23:11:35
>>129-130
ありがとうございます。
ECC6.2.0(Embarcadero C++ Compiler)は有償版でしょうか?
無償で公開されている中での一番新しい版はBCC5.5.1だと思っているのですが。

0132デフォルトの名無しさん2009/11/30(月) 00:12:36
g++でmakefileを作らないで分割コンパイルを1行のコマンドでやるときどんなオプションをつけないといけないですか?
0133デフォルトの名無しさん2009/11/30(月) 00:38:13
>>132
ふつうに
g++ a.cpp b.cpp c.cpp
でよくね?
0134デフォルトの名無しさん2009/11/30(月) 00:44:48
>>133
レスの無駄になるので1レスで詳しく説明してください
0135デフォルトの名無しさん2009/11/30(月) 00:53:31
またかよ。
0136デフォルトの名無しさん2009/11/30(月) 01:00:57
しりかよ。
0137デフォルトの名無しさん2009/11/30(月) 01:53:34
std::bad_allocを利用して例外処理をしているのですがちゃんと動作するか確認をしたいのですがどうすれば良いのでしょうか?
意図的にメモリリークなんて起こせるんですか?
0138デフォルトの名無しさん2009/11/30(月) 02:01:04
急いでおりますので、早急にお答えいただけると幸いです。
0139デフォルトの名無しさん2009/11/30(月) 02:05:53
>>137
仮想メモリのある PC 環境ではメモリリークしたからってすぐに std::bad_alloc は出ない。
それっぽいところで自分で throw std::bad_alloc() すればいいよ。
0140デフォルトの名無しさん2009/11/30(月) 02:16:03
>>139
素早い回答ありがとうございます!早速試してみますね(・∀・)
0141デフォルトの名無しさん2009/11/30(月) 07:07:40
>>125
boostのはそこのところうまくやるようにできてる

正直追加ライブラリに関しては
「boost使うか自分で書け」
だよなぁ
次点はACEくらい?1回しか使ったことないけど
0142デフォルトの名無しさん2009/11/30(月) 08:10:08
>>137
環境にもよるけど、new char[(std::size_t)-1]のように、明らかに確保できなさそうなほど大きな値でnewするとbad_alloc飛んでくるよ。
0143デフォルトの名無しさん2009/11/30(月) 10:02:25
>>142
わかりました!!それも試してみますね(・∀・)
0144デフォルトの名無しさん2009/11/30(月) 10:06:16
Windowsのどのコンパイラでもlinux gccのコードが動かせるラッパーはないですか
0145デフォルトの名無しさん2009/11/30(月) 10:48:19
ラッパー程度で動くのなら cygwin はなぜあんなに巨大なんだ
0146デフォルトの名無しさん2009/11/30(月) 10:51:38
エミュレートではなく、ラッパーlinux gccインターフェースを
winAPIに書き換えるだけで良いのですが。
0147デフォルトの名無しさん2009/11/30(月) 10:54:02
その都度、ネットで適当なヘッダー見つけてきて動作確認して組み込むのは
面倒です
セットがあれば楽なんですが
0148デフォルトの名無しさん2009/11/30(月) 10:57:59
とりあえず実装依存可の他のスレで相談してみては?
0149デフォルトの名無しさん2009/11/30(月) 12:09:54
>>147
mingw
それで足りなければcygwin
0150デフォルトの名無しさん2009/11/30(月) 14:22:46
どこでdownloadするんですか
0151デフォルトの名無しさん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)
{
}
};
0152デフォルトの名無しさん2009/11/30(月) 15:18:49
デフォルトコンストラクタ作るか
newするしかないですか?
0153デフォルトの名無しさん2009/11/30(月) 15:20:41
03以前のC++では配列内要素の各々にデフォルトコンストラクタ以外のコンストラクタを呼び出させる事は不可能
0154デフォルトの名無しさん2009/11/30(月) 15:25:38
ありがとうございます
ひどい話だ
0155デフォルトの名無しさん2009/11/30(月) 15:56:00
配列まわりは、もっと酷いはなしが色々と
0156デフォルトの名無しさん2009/11/30(月) 16:23:51
kwsk
0157デフォルトの名無しさん2009/11/30(月) 16:49:47
配列を継承元の型で delete してみるとか
0158デフォルトの名無しさん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];

と考えたのですが、他にいい方法ってありますか?
0159デフォルトの名無しさん2009/11/30(月) 17:00:22
int buf[100];
0160デフォルトの名無しさん2009/11/30(月) 17:10:32
>>158
class Hoge
{
static const int BUF_SIZE = 100;
int buf[BUF_SIZE];

これがだめなコンパイラでは、回避策として>>158のenum。
0161デフォルトの名無しさん2009/11/30(月) 17:18:59
float 定数はどうしてる?
0162デフォルトの名無しさん2009/11/30(月) 17:21:52
namespace 使う
0163デフォルトの名無しさん2009/11/30(月) 17:39:52
>>158
それenum hackというやつ
名前付いてるぐらいだから問題ないと思う
ただ>>160のいうやつが通るならそれがいい
01641582009/11/30(月) 18:21:51
>>159-163
ありがとうございます。
>>160はコンパイル通りましたが、メモリをケチるならenumという感じですかね。
namespaceでもマクロ定義はダメみたいです。
enumがそれなりにベターならこれで解決とさせてもらいます。
0165デフォルトの名無しさん2009/11/30(月) 18:40:11
>>161の質問の返答が>>162の予感
0166デフォルトの名無しさん2009/11/30(月) 19:01:50
>>165
はあ?
0167デフォルトの名無しさん2009/12/01(火) 01:13:47
>>161
クラス定義内での初期値指定ができないこと以外はいっしょ。
0168デフォルトの名無しさん2009/12/01(火) 03:32:07
>>164
メモリをケチるならenum
そんなことないので>>160が通るならそれで。
0169デフォルトの名無しさん2009/12/01(火) 10:48:54
>>166
えっ
namespaceとdefine組み合わせるつもり?
本気で言ってるの?
0170デフォルトの名無しさん2009/12/01(火) 15:54:08
質問させてください。

C++2008でテトリスを作ろうと思っています。
初心者なので、とりあえずソースコードをテキストの内容を一つずつ真似して
行こうと思ってるのですが、いきなりタイトルがsample.cとなっています。
この.cというのはどこにあるのでしょうか?
新規作成のプロジェクトからやるのでしょうか?
私はform.hと出てくるものしか知らないのですが…よろしくお願いします。
0171デフォルトの名無しさん2009/12/01(火) 16:00:35
馬鹿じゃねーの
0172デフォルトの名無しさん2009/12/01(火) 16:10:51
日本語から、学ぶべきだと思うんだ。
0173デフォルトの名無しさん2009/12/01(火) 16:11:55
C言語以前の問題だな
使ってるコンパイラのスレにいきなさい
0174デフォルトの名無しさん2009/12/01(火) 16:33:05
c++ならソースコードは.cpp
でおk?
0175デフォルトの名無しさん2009/12/01(火) 17:33:29
form.hって
C++で.NETか、
がんばれ
0176デフォルトの名無しさん2009/12/01(火) 18:14:04
>>170
無理。

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


0177デフォルトの名無しさん2009/12/01(火) 18:27:20
>>176
ちょw
ヤムチャってこんな弱いのwww
0178デフォルトの名無しさん2009/12/01(火) 18:42:40
>>176
ヤムチャてw
0179デフォルトの名無しさん2009/12/01(火) 18:43:26
ヤムチャにはカメハメ波きかないんだぜ
0180デフォルトの名無しさん2009/12/01(火) 18:54:01
でもセルならカメハメ波出す必要もなさそうだな。

const char * const p = 〜;
って書く程度で死亡できる。
0181デフォルトの名無しさん2009/12/01(火) 19:17:13
type_infoって本当に実行時の型情報を取得できるの?
0182デフォルトの名無しさん2009/12/01(火) 19:24:47
>>170
この人の真似をしたらいいべさ
http://www.nicovideo.jp/watch/sm8517855
0183デフォルトの名無しさん2009/12/01(火) 19:48:51
struct Hoge {
int id;
...
};
struct HogeCollection {
public:
void add(const Hoge& hoge){...}
void remove(int id){...}
...
};
addとremoveは対になっているわけですが、引数の型が揃っていません。
こういうのってどう思いますか?気持ち悪い?
0184デフォルトの名無しさん2009/12/01(火) 19:50:36
>>183
addが戻り値としてidを返すといいんじゃね
0185デフォルトの名無しさん2009/12/01(火) 20:00:08
>>184
addを呼び出した時の情報(戻り値)で、removeが呼び出せれば整合性がとれているという事でしょうか。
しかし、addの引数に渡したhogeのメンバ変数idがそのまま返ってくるというのも冗長に感じるのですが、
そんなことはないんでしょうか?
0186デフォルトの名無しさん2009/12/01(火) 20:18:35
>>185
確かに冗長かもね。
今のままでも良いと思うよ。
気になるならSTLのvectorとか参考にしてみたら良いんじゃね。
0187デフォルトの名無しさん2009/12/01(火) 20:29:00
>>186
どうもです。
参考になりました。
0188デフォルトの名無しさん2009/12/01(火) 20:48:15
例外のコストってどんなもんなんですか??
誰か検証してください・・・
0189デフォルトの名無しさん2009/12/01(火) 21:17:22
boost::filesystemのような、複数の系統のOSにまたがって使える
ファイルやディレクトリを操作する系のC++ライブラリで、
ヘッダをインクルードするだけで使えるものはありませんでしょうか?
0190デフォルトの名無しさん2009/12/01(火) 21:46:59
誰もいないのでしょうか?
0191デフォルトの名無しさん2009/12/01(火) 22:05:43
>>189
linuxにあわせるヘッダを用意してlinuxソースを書く。
01921892009/12/01(火) 22:27:40
ライブラリを作る話でなく、ネット上に公開されているものをご教示いただけませんでしょうか
0193デフォルトの名無しさん2009/12/01(火) 22:41:00
わざと書いてるだろ
氏ね
0194デフォルトの名無しさん2009/12/01(火) 22:42:19
つ
インストールがいるが。

Microsoft Windows Services for UNIX 3.5
POCO C++ Libraries.
01951892009/12/01(火) 22:48:38
>>193
私ですか?

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

例えば
> long long型が存在している環境ではlong long型をMyIntegerに、
> 存在していない環境ではlong型をMyIntegerに
> typedefする
これは標準C++の範囲で可能ですか?
0197デフォルトの名無しさん2009/12/01(火) 23:37:34
確実にある型を組み合わせればいい。
サイズは最低保障されているだけだろ。
int = long longだってあり得る。
0198デフォルトの名無しさん2009/12/02(水) 00:40:34
ありがとうございました。
0199デフォルトの名無しさん2009/12/02(水) 01:02:03
>>188
環境による。プログラムにもよる。自分で測れ。
0200デフォルトの名無しさん2009/12/02(水) 03:34:15
>>189
最終的にはwinAPIに変換するからわざわざC標準使う意味ないと
考えていたけど、最近は全てのCコンパイラで動いて、かつ速度低下がわずかを
目指してる。
0201デフォルトの名無しさん2009/12/02(水) 11:03:44
#include <limits.h>
#ifdef LLONG_MAX
typedef long long MyInteger;
#else
typedef long MyInteger;
#endif
0202デフォルトの名無しさん2009/12/02(水) 14:52:52
わわわわわ!
0203デフォルトの名無しさん2009/12/02(水) 15:57:19
VC++やgccのlongは何バイトですか?
x86で
0204デフォルトの名無しさん2009/12/02(水) 15:58:12
sizeofで調べましょう!
0205デフォルトの名無しさん2009/12/02(水) 17:12:27
x86 つっても
Windows なら 4 バイトだろうし
Solaris なら 8 バイトだろうし。
0206デフォルトの名無しさん2009/12/02(水) 17:29:13
上のレスを見ていて思い出したんだが、
C++0xから公式にlong long型が導入される予定だなんだよね。
LONGLONG_MAX
と
LLONG_MAX
ってどっちが公式なの?
0207デフォルトの名無しさん2009/12/02(水) 17:32:16
linuxでカレントディレクトリを移動する命令ってなんですか
0208デフォルトの名無しさん2009/12/02(水) 17:46:45
判明しました。chdirでした。
異なるヘッダ名に収録されている命令を、
コンパイル時にヘッダが存在するかどうか調べる方法ありますか。
0209デフォルトの名無しさん2009/12/02(水) 18:15:31
>>208
自分のレスをもう一度
読み直し、
日本語でどーぞ。
0210デフォルトの名無しさん2009/12/02(水) 18:19:50
windowsでchdirの収録してあるヘッダを読みたいのですが。
コンパイラによるんです
0211デフォルトの名無しさん2009/12/02(水) 18:26:59
<windows.h> で SetCurrentDirectory を使えばコンパイラによらない
0212デフォルトの名無しさん2009/12/02(水) 18:29:17
delete this;

ってちゃんとデストラクタが呼ばれて、メモリからも解放されるんですか?
02131962009/12/02(水) 18:31:18
>>201
ありがとうございます。
0214デフォルトの名無しさん2009/12/02(水) 18:51:59
N次元配列をtemplateで作り込もうとおもってます。
でも、、、
どのようにすれば、arrayの入れ子をつくれるのかがわかりません・・・
誰か教えてください。

template<class T, int N> array;
0215デフォルトの名無しさん2009/12/02(水) 19:16:16
template<class T, int N> class array{ typedef array<class T, int N - 1> down_array; };
あとは自分でなんとかしろ
0216デフォルトの名無しさん2009/12/02(水) 19:19:50
Nが0になったときの動作は一体・・・??
0217デフォルトの名無しさん2009/12/02(水) 19:26:58
template<class T>
class array<T, 0>{ T &opereetaa [](int i){ ritaan array_[i]; } T array_[M]; };

の様な形で特殊化しろ
0218デフォルトの名無しさん2009/12/02(水) 19:28:29
ありがとうございます。
0219デフォルトの名無しさん2009/12/02(水) 19:39:40
ここできくようなやつがテンプレート使うな
効率、コンパイル時間が落ちる
0220デフォルトの名無しさん2009/12/02(水) 19:42:32
継承 テンプレート 下手に使うと内部のコード分量が凄いことになる。
ライブラリ化するときくらいに使えよ
0221デフォルトの名無しさん2009/12/02(水) 19:44:45
>>219
いいんじゃない?
>>214はテンプレートでも簡単なテンプレートの話じゃないし。
中・上級者の第一歩ってことで。
02222142009/12/02(水) 19:45:56
>>220
わかりました。
0223デフォルトの名無しさん2009/12/02(水) 19:46:08
>>219-220
何があったのかは知らんが心の病気だから病院に行ってみたらどうだ
0224デフォルトの名無しさん2009/12/02(水) 19:50:28
>>222と>>223の間、レス早すぎだろ

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

0225デフォルトの名無しさん2009/12/02(水) 19:50:52
ww
02262142009/12/02(水) 19:52:12
>>224
え・・・?僕ですか??
>>223は僕じゃないっす
0227デフォルトの名無しさん2009/12/02(水) 19:54:04
222と223は間隔が短すぎるからむしろ別人だという証拠だろ
そして224もその意味で使ってる
02282242009/12/02(水) 19:57:14
ホントだ40sec制限引っかかってるw

すまねぇ。

今日はもうROMるわ。
02292142009/12/02(水) 19:57:33
そうですか。
まあ僕もテンプレートを使いこなせるようにがんばります・・・
02302242009/12/02(水) 19:58:04
>>227
ごめんその意味じゃなかったorz

買いかぶってくれてすまない。
マジで。
0231デフォルトの名無しさん2009/12/02(水) 19:59:40
まあ、しゃあないわな
0232デフォルトの名無しさん2009/12/02(水) 20:13:23
まあその気になれば40sec制限なんて回避できるけどな。
でもどうでもいい話だな。
0233デフォルトの名無しさん2009/12/02(水) 20:38:57
え、できんの??
0234デフォルトの名無しさん2009/12/02(水) 20:45:34
ここみたいなID出ない板なら、単に生とP2を使い分けるだけでも出来るでしょ。

でも>>232が言うように、どうでもいい話。
0235デフォルトの名無しさん2009/12/02(水) 20:45:55
ちなみにこういうことね。
0236デフォルトの名無しさん2009/12/02(水) 21:00:42
というか>>233だってケータイ持ってるだろ。
それから書き込めば余裕だろ?

0237デフォルトの名無しさん2009/12/02(水) 21:06:26
まぁそりゃそうだけど。携帯は自明すぎるから、それ抜きで語ってる流れだと思った。
0238デフォルトの名無しさん2009/12/02(水) 21:13:27
wchar_t文字列の先頭が L"\\\\\?\\"なのかチェックしたいのですが
どうやればいいですか。
windowsでは、8バイトの比較ですが、unixなどでは不明です。
0239デフォルトの名無しさん2009/12/02(水) 21:29:57
一字ずつチェックが確実そうですね
0240デフォルトの名無しさん2009/12/02(水) 21:45:55
>>206
LLONG_MAX
C99でもそうだったし、最新ドラフトN3000でもこれ。

>>238
std::equalとかstd::wmemcmpとか。
0241デフォルトの名無しさん2009/12/02(水) 22:04:21
string使えば、4文字取り出して=で比較すれば良いだけですが
C言語では1文字ずつがいいですか
02422062009/12/02(水) 22:15:16
>>240
thanks a lot!
0243デフォルトの名無しさん2009/12/02(水) 22:36:27
CYG winは、linuxのバイナリ作れますか?
0244デフォルトの名無しさん2009/12/02(水) 22:59:24
>>243
Cygwin自体にはLinux用バイナリを作る方法は用意されていないが、
自分でLinuxターゲットのGCCをビルドすれば実現可能。
0245デフォルトの名無しさん2009/12/02(水) 23:07:11
ターゲットのかえ方がわかりません。
0246デフォルトの名無しさん2009/12/02(水) 23:12:59
サンクス
0247デフォルトの名無しさん2009/12/02(水) 23:59:39
delete obj;
のあとに
obj = NULL;
ってしとけば誤って複数回delete obj;しても大丈夫だから
delete obj;するときにはojb = NULL;する習慣を付けた方が良いって本当ですか
0248デフォルトの名無しさん2009/12/03(木) 00:03:21
事実関係は正しい。良いかどうかは自分で判断せよ。
0249デフォルトの名無しさん2009/12/03(木) 00:09:38
誤って複数回deleteするようなプログラムを書かない習慣をつけろよw
0250デフォルトの名無しさん2009/12/03(木) 00:12:27
>>247
本当ですよ
0251デフォルトの名無しさん2009/12/03(木) 00:14:45
何回でもdeleteしてやる
0252デフォルトの名無しさん2009/12/03(木) 00:41:00
そんな何回もdeleteしてしまう奴はその10倍くらいdeleteし忘れやポインタ上書きメモリリーク地獄だろ。
設計が出来ていないのだからな。
0253デフォルトの名無しさん2009/12/03(木) 01:21:32
>>247
そんな習慣を今からつけるぐらいなら、より簡単で安全で本質的な解決策である
std::auto_ptr や boost::smart_ptr を使う習慣を付けるべき。
0254デフォルトの名無しさん2009/12/03(木) 01:30:21
>>253
そのとおりですよ
0255デフォルトの名無しさん2009/12/03(木) 02:23:04
>>247
void object::destroy()
{
  delete p_;
  p_ = 0;
}
obj.destroy();
obj.destroy();

分かってるとは思うけど
こういうことするなら必須
0256デフォルトの名無しさん2009/12/03(木) 06:30:42
void Close(){ delete resource_; resource_= NULL; }
~dtor(){ if(resource_ != NULL) delete resource_; }
なんてやることはある。
0257デフォルトの名無しさん2009/12/03(木) 07:13:40
>>256
ですね
0258デフォルトの名無しさん2009/12/03(木) 08:40:19
>>256
え?
0259デフォルトの名無しさん2009/12/03(木) 09:24:18
え?って言ってる奴は何なの?
ウザすぎる。もうはやってねーし
0260デフォルトの名無しさん2009/12/03(木) 10:05:05
ウザ過ぎる返答が返ってくる程お前の書き込みがウザかったって事にいい加減気づけ。
0261デフォルトの名無しさん2009/12/03(木) 10:06:12
もう少しうまい屁理屈で言い返したほうがいいんじゃね?
0262デフォルトの名無しさん2009/12/03(木) 10:07:42
誰もそういうの求めてないから
0263デフォルトの名無しさん2009/12/03(木) 10:09:49
え?
0264デフォルトの名無しさん2009/12/03(木) 10:19:04
> ウザ過ぎる返答が返ってくる程お前の書き込みがウザかった
意味わからん
「卑劣な通り魔に刺される程お前が卑劣だったことに気付け」くらい前後の脈絡が無い
0265デフォルトの名無しさん2009/12/03(木) 10:19:52
何回でもdeleteしてやる
0266デフォルトの名無しさん2009/12/03(木) 10:26:01
>>264
そのたとえ話の方が脈絡がないだろ。
0267デフォルトの名無しさん2009/12/03(木) 10:31:40
>>265
たいへんですね
0268デフォルトの名無しさん2009/12/03(木) 10:45:22
>>264
「ウザいものにはフタ」ってことです。
0269デフォルトの名無しさん2009/12/03(木) 11:04:56
>>266
あるよ
「やった奴と同じ業を、やられた奴も持っていたからそれが起きたんだ」という主張が
めちゃくちゃだという話
0270デフォルトの名無しさん2009/12/03(木) 11:10:16
業ってw
下らない書き込みしたから下らない流れになっただけだろうが。
発端が何を偉そうに言ってるんだか。
0271 [―{}@{}@{}-] デフォルトの名無しさん2009/12/03(木) 11:14:38
std::pow(-0.001, 1.0 / 3.0) が -0.1 じゃなくて -1.#IND000000000000 に
なってしまうのは仕様でしょうか?VC++2008を使っています.
数学的には -0.1 が正解だと思うのですが・・・
0272デフォルトの名無しさん2009/12/03(木) 11:15:22
>>256
絶対そういう例出すやついると思った。
でも delete NULL; はOkなのだから、
if (resource_ != NULL) で場合分けするのが無駄なのは明白。
0273デフォルトの名無しさん2009/12/03(木) 11:15:27
負数の冪根を求めてはいけない
0274デフォルトの名無しさん2009/12/03(木) 11:17:12
>>270
発端ってw
俺は>>264が最初の書き込みだが、いったい誰と戦ってんのw

> 何を偉そうに
と書いてるレスが一番偉そうというギャグだってんなら、3点くらいあげてもいい
0275デフォルトの名無しさん2009/12/03(木) 11:17:13
IEEE754だと負数の冪根を求めるとNaNになる。
VC++2008はNaNを-1.#INDと表示する処理系
0276デフォルトの名無しさん2009/12/03(木) 11:23:00
1.256が下らないネタにもならないクソな書き込みをする
2.同じく258が下らないレスをする
3.259が258に対して「ウザすぎる。もうはやってねーし」等とのたまう

256 = 259だったらとんだ茶番だな。
この一連の流れは頭おかしいだろ。
0277デフォルトの名無しさん2009/12/03(木) 11:33:16
初歩的な質問なんですが、
コピーコンストラクターで、なぜ仮引数のプライベートな部分にまで
アクセスできるんですか?本を見たけどわかりませんでした。
0278デフォルトの名無しさん2009/12/03(木) 11:34:39
クラスが同じならインスタンスが自分以外のものであってもアクセスできる。
当然ながらクラスが違えばアクセスできない。
0279デフォルトの名無しさん2009/12/03(木) 11:35:47
ありがとうございます。
thisとかも同じですか?
あと、継承されたクラスも同じですか?
0280デフォルトの名無しさん2009/12/03(木) 11:43:07
基底クラスは別クラスだからインスタンスが同じであろうと派生クラスから基底クラスのprivateメンバへはアクセスできない。
ただしprotectedは別。
0281デフォルトの名無しさん2009/12/03(木) 11:52:04
ありがとうございます。
なんとなくわかりました。
0282デフォルトの名無しさん2009/12/03(木) 11:59:33
家のPCが無駄にクアッドコアなんですがプログラミング作ったとき何か指定しないと4コア使って計算してくれませんか?
OpenMpとか
0283デフォルトの名無しさん2009/12/03(木) 12:01:55
何も指定されないプログラムが四つ同時に走る事を想定して作ってあるから安心しろ
0284デフォルトの名無しさん2009/12/03(木) 12:03:20
>>271
errnoにエラーの情報が入るはず
vcならmatherrだったかも
0285デフォルトの名無しさん2009/12/03(木) 12:03:42
>>283
ありがとうございます
0286デフォルトの名無しさん2009/12/03(木) 12:04:16
>>285
283って答えになってなくね?
0287デフォルトの名無しさん2009/12/03(木) 12:06:29
>>286
ありがとうございます
0288デフォルトの名無しさん2009/12/03(木) 12:08:09
OpenMp使った4コア使った並列計算と何も指定しないで4コア使った計算はたぶん別物ですよね
指定しない場合はどんな計算を行うのでしょうか?
0289デフォルトの名無しさん2009/12/03(木) 12:10:52
>>282
・プログラミングは作れません。
・コンパイラはもしかしたら複数コアを使ってコンパイルするかもしれません。
・コンパイラによっては、OpenMPを使わなくても複数コアを使うようなコードを出力することができる場合があります。
・一般的には、複数コアを使うコードを出力するにはOpenMPなりpthreadなりを使う必要があります。
・そもそもOSはプログラムを適宜異なるコアで動くように管理するので余り神経質になる必要はありません。
・いずれにしても、C++は言語仕様としてスレッドの概念もなければマルチコアの概念もないのでスレ違いです。
0290デフォルトの名無しさん2009/12/03(木) 12:11:44
0xにはスレッドあるが
0291デフォルトの名無しさん2009/12/03(木) 12:11:54
>>288
OpenMPを使わずに計算を行います。
0292デフォルトの名無しさん2009/12/03(木) 12:14:09
>>290
議論したければC++0xスレへどうぞ。
0293デフォルトの名無しさん2009/12/03(木) 12:14:16
女の友達にプライベートな部分を見せてと言ってもみせてくれないとおもうのですが。
なぜフレンド関数はプライベートな部分まで見ることが出来るんですか?
0294デフォルトの名無しさん2009/12/03(木) 12:17:32
>>293
私は見せて貰ってますよ。友達だと思っているのはあなただけなのではないですか?
0295デフォルトの名無しさん2009/12/03(木) 12:17:33
マ板でやれ
0296デフォルトの名無しさん2009/12/03(木) 12:17:40
>>293
C++のフレンドは、女の友達よりは正義超人の友情に近いからです。
0297デフォルトの名無しさん2009/12/03(木) 12:18:10
>>293
なぜでしょうね。
0298デフォルトの名無しさん2009/12/03(木) 12:19:46
すると、その女友達が単一継承を行うと単為生殖になるのでしょうか
0299デフォルトの名無しさん2009/12/03(木) 12:20:02
>>295
ですよね
0300デフォルトの名無しさん2009/12/03(木) 12:21:04
>>293
セックスフレンド関数なんです。
0301デフォルトの名無しさん2009/12/03(木) 12:49:29
自分のクラス名::メンバー関数とthis->メンバー関数の違いってありますか?
0302デフォルトの名無しさん2009/12/03(木) 12:54:30
前者は名前、後者は実体。
0303デフォルトの名無しさん2009/12/03(木) 13:16:26
effective C++3版のテンプレートの最後のアイテムに乗ってる
3個の例の行列の掛け算をコピーしないとかのとかの具体的に乗ってるホームページや
本をお願いします。
0304デフォルトの名無しさん2009/12/03(木) 13:55:14
Traitsみたいな奴で数を表すクラスのゼロ元とか単位元をあらわすdefineみたいなので
intだと0と1がでるみたいなやつのある初めから出来ているやつ知りませんか?
0305デフォルトの名無しさん2009/12/03(木) 14:00:28
代数的な操作がしたいならC++は適さないのでは
0306デフォルトの名無しさん2009/12/03(木) 14:52:15
クラステンプレートとテンプレートクラスの違いをおしえてください。
03072562009/12/03(木) 15:23:36
あくまで例だよ。お前ら喧嘩すんなw
オブジェクトのポインタがフラグとしても意味をなすよってことをいいたかった。
リソース自身がオブジェクト化されていた場合で
Close(){ res_->Close(); res_ = NULL; }
~Dtor(){ if(res_!=NULL) res_->Close(); }
こう書けばよかったな
単にcharとかintとかなら、NULLで埋めるだけで問題ない
0308デフォルトの名無しさん2009/12/03(木) 15:33:17
>>307
ですね
0309デフォルトの名無しさん2009/12/03(木) 15:39:13
>>306
後者は前者の誤記
0310デフォルトの名無しさん2009/12/03(木) 15:51:13
>>309
私もそう思っていた時期もありましたが、
そうでもないみたいなので。
0311デフォルトの名無しさん2009/12/03(木) 17:23:31
>>306
クラスのテンプレート。template<class T> class HOGE{};
テンプレートのクラス・・・では意味不明だからクラステンプレートにパラメータを与えて実体化させたクラス。HOGE<int>,HOGE<double>,...
0312デフォルトの名無しさん2009/12/03(木) 19:11:30
214です。
しばらくテンプレートの特殊化について調べていたのですが、
いまいちどういうことなのかわかりません。
助言、参考になるサイトなどありましたら、教えてください。
0313デフォルトの名無しさん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
0314デフォルトの名無しさん2009/12/03(木) 19:23:14
調べているのですが… m(_ _)m

orz
0315デフォルトの名無しさん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 になる
03163122009/12/03(木) 20:03:52
なるほど!
ありがとうございます。
0317デフォルトの名無しさん2009/12/03(木) 22:04:21
メンバ変数を初期化したいのですが、
javaで他のコンストラクタを呼び出す
『this(String s)』に相当する方法はありませんか?
0318デフォルトの名無しさん2009/12/03(木) 22:05:12
>>307
>>256といい、釣りもほどほどにしとけよ
0319デフォルトの名無しさん2009/12/03(木) 22:37:32
釣りだと思うなら、釣られるのもほどほどにしとけよ
0320デフォルトの名無しさん2009/12/03(木) 22:39:52
class A
{
0321デフォルトの名無しさん2009/12/03(木) 22:40:50
コンストラクタはinit()を呼び出すだけにして初期化はinit()でやるようにすればいいよ
03223172009/12/03(木) 22:47:50
>>321
やっぱり、それしか方法が無いんですか
わかりました、ありがとうございます
0323デフォルトの名無しさん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 メンバ関数を用意してどうにかします。
0324デフォルトの名無しさん2009/12/04(金) 05:27:24
>>318
なるほど
0325デフォルトの名無しさん2009/12/04(金) 06:20:47
どのようにすればC/C++からXMLを操作することが出来
るのでしょうか?
0326デフォルトの名無しさん2009/12/04(金) 08:02:40
>>325
いくつか方法がある。
- 自分で標準関数を使って一生懸命XMLを操作するライブラリを書く
- 開発環境にデフォルトで入ってるライブラリを使う(Qtとか)
- Xercesとかlibxmlみたいな外部ライブラリ使う
0327デフォルトの名無しさん2009/12/04(金) 10:04:28
msxml
0328 [―{}@{}@{}-] デフォルトの名無しさん2009/12/04(金) 10:56:59
今はxmlliteの時代だぜ
ttp://home.att.ne.jp/banana/akatsuki/doc/xmllite/first01/index.html
0329デフォルトの名無しさん2009/12/04(金) 14:04:39
自作 正規表現で良いだろ
読み取るだけなら
生成するなら、ライブラリ
習得に手間掛かるが
自分で正規な出力するよりかは楽
0330デフォルトの名無しさん2009/12/04(金) 14:22:21
fstreamについてなんですが、
ifstreamクラスで文字列を読みとろうとすると、改行まで読み取られます。
空白まで読み取るというようには出来ないでしょうか?
0331デフォルトの名無しさん2009/12/04(金) 14:46:33
すいません。
半角スペースは区切りになってます。
ただ、全角スペースを区切りとして認識してもらう方法ってありませんか?
0332デフォルトの名無しさん2009/12/04(金) 15:14:15
自分で区切れやチンカス
0333デフォルトの名無しさん2009/12/04(金) 15:31:18
短い処理時間を計測したいのでclockよりも精度の高いgettimeofdayを使いたいのですが、
gettimeofdayが使用されたネット上のコードを見ると
#include <time.h>
#include <sys/time.h>
とあるようにtime.hとは別にsys/time.hをインクルードする必要があるみたいです。

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

整数を入力: 12
反転するビットの位置を入力(0〜31): 2
反転した結果: 8
0336デフォルトの名無しさん2009/12/04(金) 16:29:21
>>335
それで、質問の内容は?
「整数を入力のやり方がわかりません」 とか、具体的に書いてください
0337デフォルトの名無しさん2009/12/04(金) 16:48:11
struct Hoge{
  operator Hoge&()const{
    return *this;
  }
};
このキャスト演算子が無限ループにならないような参照の返し方ってありますか?
0338デフォルトの名無しさん2009/12/04(金) 16:59:39
C#DLLをCでNET不要で利用する方法ありますか
0339デフォルトの名無しさん2009/12/04(金) 17:04:52
DLLがNET使ってるから無理か。
C#DLLをC++DLLにする方法ありますか。
ソースのC#->C++化でも良いです
0340デフォルトの名無しさん2009/12/04(金) 17:49:50
一カ所、NET汚染されただけで、ほぼネイティブの実行ファイルなのに
NET入れないと動かないのが嫌なんです。
DotNetZipLibというのを使いたいのですが、いい方法無いですか。
zip64の追記が出来る方法でも良いです、
03413402009/12/04(金) 17:59:09
DotNetZipLibは、追記できませんでした。
tmpを生成してから追記してました。
元のファイルに直接追記できるやつありますか。
0342デフォルトの名無しさん2009/12/04(金) 18:01:20
>>341
俺も気になるから調べてみるか
0343デフォルトの名無しさん2009/12/04(金) 18:08:33
フォーマットの微妙な違いをチェックするためにtmp作成するのだと思いますが。
zipはそのライブラリのフォーマットであると仮定すればtmpなしでいけると思うのですが
0344デフォルトの名無しさん2009/12/04(金) 18:30:58
zipの追記ネタって前スレでもやってなかったか?
まだやってんのか
0345デフォルトの名無しさん2009/12/04(金) 18:40:23
作業につかう領域を減らしたいというのであれば可能
ディスクの読み書きを減らしたいというのであれば不可能
0346デフォルトの名無しさん2009/12/04(金) 18:48:57
ライブラリ(のurl)のうpが無いのですが
0347デフォルトの名無しさん2009/12/04(金) 18:52:20
webページの収集で使いたいのですが。
実行毎にtmp生成して追記するのは都合が悪いです。
0348デフォルトの名無しさん2009/12/04(金) 18:54:09
ttp://www.pkware.com/documents/casestudies/APPNOTE.TXT
ここ見たらディスクの読み書きも減らせそうだったわ頑張れ
0349デフォルトの名無しさん2009/12/04(金) 18:55:29
zipでまとめるのやめたらいいんじゃね
0350デフォルトの名無しさん2009/12/04(金) 19:01:13
5Gとか貯まったら、毎回コピー発生するのはかなり都合が悪いです。
zipは必須なんです。容量節約とindex付きでアクセス速度が良くなるので。
0351デフォルトの名無しさん2009/12/04(金) 19:03:21
>>348
zip64の追記ライブラリ公開してくれお
需要あってアクセス出ると思うよ
0352デフォルトの名無しさん2009/12/04(金) 19:16:22
ファイル毎か何個か毎に圧縮すれ
0353デフォルトの名無しさん2009/12/04(金) 19:16:49
>>350
いくつかの書庫に分割すればいいんじゃね?
0354デフォルトの名無しさん2009/12/04(金) 19:25:47
アクセスするときが都合悪いけどそれが良いですかね。
zipをマウントするとき、複数同時にしないと行けないので。
10Mくらいずつでやってみます。これならコピーがあっても困らないので。
0355デフォルトの名無しさん2009/12/04(金) 21:04:25
BCCのSTLport binary置いてあるところしりませんか。
0356デフォルトの名無しさん2009/12/04(金) 21:14:21
あと、boostもあるといいです。
0357デフォルトの名無しさん2009/12/04(金) 21:15:07
しりませんよ。
0358デフォルトの名無しさん2009/12/04(金) 21:17:48
修正しないとビルドできないようです。あと最新版ではBCCの対応がカットされてます。
古いやつでも良いので動作するバイナリ教えてください・
0359デフォルトの名無しさん2009/12/04(金) 21:18:43
>>356
あるといいですね。
0360デフォルトの名無しさん2009/12/04(金) 21:19:07
bccなんてなんで使うの?
0361デフォルトの名無しさん2009/12/04(金) 21:19:35
VC2008用のバイナリから
インポートライブラリ作ってみたのですが
ヘッダで文法エラーでます。
0362デフォルトの名無しさん2009/12/04(金) 21:19:52
>>353
出番ですよ。
0363デフォルトの名無しさん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 です。
0364デフォルトの名無しさん2009/12/04(金) 23:38:28
C言語を勉強しようと思ってるんですけど 
マイクロソフトのVisual C++2008のソフトをインストールしたのですが 
その後スタート→新規作成→プロジェクトを選択して 
Win32→Win32コンソールアプリケーションを選択してプロジェクト名をsampleにしてOKタブをクリックしようとしてもOKボタンが表示されませんがどうしたらいいか分かりません 
ぜひアドバイスをお願いします
0365デフォルトの名無しさん2009/12/04(金) 23:40:58
初心者はbccにしとけ
vc++は実戦向きツール
0366デフォルトの名無しさん2009/12/04(金) 23:43:44
ボタンやメニューのグレー表示は、コード書くたびに罪悪感を憶えるな
冷たいUIの教科書みたいなもんでさ
0367デフォルトの名無しさん2009/12/04(金) 23:56:57
>>364
bccやVCを勉強する前に
スレタイを読む練習が必要だと思うんだけど。
自分でもそう思わない?

> C言語
C言語やるならbccが良いと思う。
0368デフォルトの名無しさん2009/12/05(土) 00:10:15
>>367
同じく
0369デフォルトの名無しさん2009/12/05(土) 01:44:23
zlibは複数スレッドで圧縮 展開しても辞書は壊れませんか。
03703692009/12/05(土) 03:07:28
つか、辞書データは一体どこへ記録されるの?
0371デフォルトの名無しさん2009/12/05(土) 04:05:31
複数スレッドで圧縮して、辞書は共通って出来るの?
ロックして、圧縮関数にはシングルスレットと同じ風にみせればいいけど・。
パフォーマンスが落ちるから同時に圧縮したいけど。
0372デフォルトの名無しさん2009/12/05(土) 07:41:12
おちつけ
0373デフォルトの名無しさん2009/12/05(土) 11:25:29
z_stream をスレッドごと (ファイルごと) に別々にご用意ください
0374デフォルトの名無しさん2009/12/05(土) 11:43:36
TestClass t;
TestClass *t = new TestClass();
この2つはインスタンスを作るという意味では同じ事をやっているわけですが、
どうやって使い分けるんですか?
0375デフォルトの名無しさん2009/12/05(土) 11:46:04
インスタンスをいつ削除するかによって
0376デフォルトの名無しさん2009/12/05(土) 12:35:45
>>375
本当にそれだけ何ですか?
0377デフォルトの名無しさん2009/12/05(土) 12:47:27
そのインスタンスがかなり大きい場合、スタック領域の消費を抑えるために常にnewを選ぶこともあります
0378デフォルトの名無しさん2009/12/05(土) 12:50:55
>>377
なるほど、ありがとうございます
0379デフォルトの名無しさん2009/12/05(土) 12:58:24
>>375
>>377
この二つが本当のところじゃない?
それ以外の理由は・・・pimplやりたいとか?
0380デフォルトの名無しさん2009/12/05(土) 13:18:11
>>377
スタック領域を節約したいってどういう状況?
0381デフォルトの名無しさん2009/12/05(土) 13:22:17
節約したいんじゃなくてスタックに入りきらない場合だろ
0382デフォルトの名無しさん2009/12/05(土) 13:24:47
組み込み環境とか
PCみたいに何MBもスタックあるような環境じゃ普通は気にしないな
0383デフォルトの名無しさん2009/12/05(土) 13:40:51
>>382
たしかに気にしないですね
0384デフォルトの名無しさん2009/12/05(土) 14:25:23
と言うかスタックに大きなデータを配置できるほど事前情報が揃ってる事自体稀だろ
0385デフォルトの名無しさん2009/12/05(土) 16:48:54
c++のnullって意味ないんだね
ダメじゃん
0386デフォルトの名無しさん2009/12/05(土) 17:15:01
そうだ。 0 を使え。別に困らないから。
0387デフォルトの名無しさん2009/12/05(土) 17:15:46
Cygwin用の統合環境ありませんか。
コマンドプロンプトがやりにくいです
0388デフォルトの名無しさん2009/12/05(土) 17:22:48
C++はvoid *の扱いが厳しくなったからNULLがだめになったんだ
0389デフォルトの名無しさん2009/12/05(土) 17:23:45
0 もマジックナンバーと考えると NULL を使うべきだろう
0390デフォルトの名無しさん2009/12/05(土) 17:28:05
>>388
別に C でも NULL は役に立たんよ。ヘッダをインクルードするほうがめんどくさい。
0391デフォルトの名無しさん2009/12/05(土) 17:30:12
#define NULL reinterpret_cast<void*>(0)
0392デフォルトの名無しさん2009/12/05(土) 17:32:02
set_emptyとか作れよ
0393デフォルトの名無しさん2009/12/05(土) 17:35:34
>>391-392 なにそれこわい
0394デフォルトの名無しさん2009/12/05(土) 17:54:32
ヌルポインタ経由でメンバ関数呼び出すのって鼻から悪魔だっけ?
0395デフォルトの名無しさん2009/12/05(土) 17:56:04
カナダでは法律で禁止されてる
0396デフォルトの名無しさん2009/12/05(土) 18:02:48
>>394 未定義動作
0397デフォルトの名無しさん2009/12/05(土) 18:15:35
だからC++0xでnullptrが入るんだろうが
0398デフォルトの名無しさん2009/12/05(土) 18:58:11
void *p = 0;って64bitでバグらないの?
0399デフォルトの名無しさん2009/12/05(土) 19:02:00
てことはC++/CLRの選択は正しかったのですか
0400デフォルトの名無しさん2009/12/05(土) 19:02:42
言語名を間違う俺に隙はなかった
0401デフォルトの名無しさん2009/12/05(土) 19:08:45
>>398 なんで 64 bit とか関係あると思うの?
0402デフォルトの名無しさん2009/12/05(土) 19:13:50
誤爆すか
04034022009/12/05(土) 19:15:41
>>399-400へ言った言葉ね。
0404デフォルトの名無しさん2009/12/05(土) 19:16:46
>>396
ぬるぽじゃないの?
0405デフォルトの名無しさん2009/12/05(土) 19:20:49
大至急の質問があります。

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

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

#if defined(_MSC_VER)
#include <sys/utime.h>
#else
#include <utime.h>
#endif
0407デフォルトの名無しさん2009/12/05(土) 19:31:54
utime.h
って標準じゃない・・・よね?
0408デフォルトの名無しさん2009/12/05(土) 19:40:36
標準でないから位置が違うんです。
04094072009/12/05(土) 19:42:35
そもそも標準が何らかのディレクトリの中に入っているわけがないか。
04103872009/12/05(土) 20:12:53
エクリプスとくらべて話題が少ないと思いますが
NetBeans IDE はかるく、CYGwinが動作していいです。
0411デフォルトの名無しさん2009/12/05(土) 21:33:49
>>401
なんで関係ないと思うの?
0412デフォルトの名無しさん2009/12/05(土) 23:04:14
まともに情報を引き出せないような質問はクソだ
0413デフォルトの名無しさん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];
};

04144132009/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");

0415デフォルトの名無しさん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
04164132009/12/06(日) 00:57:24
415=413です。

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

よろしくお願いします。
0417デフォルトの名無しさん2009/12/06(日) 00:59:23
>>415
>char find2[10] = "123456789";

0は無しですか?
0418デフォルトの名無しさん2009/12/06(日) 01:02:53
あ、見つけるのだけだから0はイランの根
0419デフォルトの名無しさん2009/12/06(日) 01:27:10
まずstrpbrkの使い方くらい調べろ。
p1〜p3が最初の/を指してるところから疑問に持て。
04204132009/12/06(日) 01:39:26
p1~p3で"/"から始まる文字列になっているのでq1~q3の処理は先頭の"/"を読み取ってしまっていることは
アドバイスで分かりました。

ありがとうございます。

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

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

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


アドバイスよろしくお願いします。
04214132009/12/06(日) 03:01:57
string vertex1
string vertex2
string vertex3
として val2.vertex1, val2.vertex2, val2.vertex3に格納されているデータの長さを取り出したいのですが、

ネットで調べても

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

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

どのようにすればよいでしょうか?
0422デフォルトの名無しさん2009/12/06(日) 07:47:58
>>418
ムダレスやめろw
0423デフォルトの名無しさん2009/12/06(日) 10:00:11
>415
strstrの用途を勘違いしている。
そこはstrpbrkを使うところ。
(手っ取り早くすますならq1++するだけでいい)

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

>421
エラーが起こったじゃ分からんわ。
エラーメッセージを読んでいないことだけは分かったがな。
04244192009/12/06(日) 11:44:41
おはようさん。もう出来たかい?
まだなら作ってもいいけど…

まず仕様を明確にしてくれ。
何がしたいクラスなのか、どう使いたいのかさっぱりわからん。
・1/1/1と来たとき最後のデータしかいらないのか、そもそもそれは何なのか
・メンバとして保持すべきなのはどこまでなのか
04254132009/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]
0426デフォルトの名無しさん2009/12/06(日) 12:35:23
C++で(出来れば汎用的に)DB扱うのに何使うのがいいかなーと思って、
何がいいかは環境によって違うだろうけど、皆が何使ってるか聞きたい。
環境と使ってるもの合わせて書いてみてー
0427デフォルトの名無しさん2009/12/06(日) 12:41:58
>>426
誰に頼んでるんだい?
>>425に頼みなさい。
04284132009/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"のなかに保存しておくことで、他のヘッダファイルで後に利用する関数内での処理に用いようと考えています。
04294132009/12/06(日) 12:50:31
>>424
の間違えでした。

環境はVC++ 2008です。

よろしくお願いします。
04304192009/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はあり得ないでしょ。
04314262009/12/06(日) 13:59:09
>>427
誰か名指ししないとだめなのかい
「皆が」って言ったつもりなんだが
一人に聞いても仕方ないだろう
04324132009/12/06(日) 14:19:43
>>430

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

mesh_OBJ make_mesh_pattern;

make_mesh_pattern.mesh();

}
04334132009/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;
}
}
04344132009/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と見なしています。
04354192009/12/06(日) 14:38:57
困ったな、何かツッコミ所がどんどん増えてきたぞ
0436デフォルトの名無しさん2009/12/06(日) 15:06:16
えーと…こういうことだろうか。

fはフェイスかなんかの略で、直後にトライアングル1枚分のデータを持ってる。
「頂点インデックス/座標インデックス/法線インデックス」が頂点1個分のデータで、
これがトライアングルの頂点分、つまり3つ並んでる。
それで、vertex1には各トライアングルの第1頂点の頂点インデックスのみ、
vertex2,3も同様に第2、第3頂点の頂点インデックスのみを格納したい、と。
04374192009/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」だったらどうすんの
・結局、何をどう出力したいの?
0438デフォルトの名無しさん2009/12/06(日) 15:26:29
標準C++ではソースファイルの1行あたりの
文字数制限はありますか?
また、現実的にはそれを守らない事による困った事態が起こった経験は
みなさんありますか?
0439デフォルトの名無しさん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;
}
0440デフォルトの名無しさん2009/12/06(日) 15:31:05
無いだろ。 文字数=読み込み可能ファイルサイズだろ。
エディタの編集サイズも影響ある。
コンパイラとしては ;  も、 ; + 改行 も違いなし。
0441デフォルトの名無しさん2009/12/06(日) 15:33:15
>>438
仕様的にはなかったと思うけど、
コンパイラによっては制限がある場合もある
といっても千文字以上とか普通にはあり得ないレベルだから
普通は気にしなくてもいい
(コードの自動生成とかしてると気にする必要はあるかもしれないが)
0442デフォルトの名無しさん2009/12/06(日) 15:34:03
>>440
プリプロセスでは改行は大きな意味を持つぜ
04434132009/12/06(日) 15:36:32
>>436
その通りです。
わかりにくくてすみません。

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

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

>>read = " ";を追加

'substring' : 'std::basic_string<_Elem,_Traits,_Ax>' のメンバではありません。
というエラーをはかれてしまいます。
0444デフォルトの名無しさん2009/12/06(日) 15:54:52
>>438
行数じゃないが、VCで1万文字くらいの文字列リテラルを作ろうとして怒られたことならある
04454192009/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 );
}

とか入力も出力も切り替え放題だろうに。
04464192009/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等というメソッドは無い。
0447デフォルトの名無しさん2009/12/06(日) 16:04:33
そもそもC#なんじゃね?と思ってきた
0448デフォルトの名無しさん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
0449デフォルトの名無しさん2009/12/06(日) 16:19:49
C++\(^o^)/オワタ
0450デフォルトの名無しさん2009/12/06(日) 16:21:14
>>438
Characters in one logical source line [65536].
(http://www.kuzbass.ru/docs/isocpp/limits.html より)
だそうだ
04514482009/12/06(日) 16:37:34
訂正: × e- → ○ -e
04524132009/12/06(日) 16:44:10
みなさんアドバイスありがとうございました。

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

長いことアドバイスをありがとうございました。
0453デフォルトの名無しさん2009/12/06(日) 16:46:48
気付いたじゃなくて気付かされた、じゃないのー?
04544382009/12/06(日) 17:00:54
>>441
>>444
>>450
一行の文字数に関しては
普通に打っていれば問題にはならないですね。
nestされたテンプレートがで17までとか
現実的にちょっと引っかかる恐れがあって、
そこからの類推で心配していました。
ありがとうございます。
04554192009/12/06(日) 17:08:09
設計もネーミングもオチもひどいもんがあるなw
0456デフォルトの名無しさん2009/12/06(日) 17:17:31
自分の扱おうとしているデータの抽象化ができていない。
0457デフォルトの名無しさん2009/12/06(日) 19:11:36
まったく・・・
0458デフォルトの名無しさん2009/12/06(日) 20:02:15
STLのイテレーターをメンバ変数にするのはいいのかな?
listでキャシュみたいに使えばちょっとは早くなるかなぁと思ってみたり。
0459デフォルトの名無しさん2009/12/06(日) 20:38:54
>>458
イテレータ一般では無効になるタイミングに気をつけないといけないからちょっと危ない
気配がするけど、 list なら対象要素がコンテナ内にある限り大丈夫だし、他のコンテナでも
クラス内できっちり無効になるタイミングに気をつけて管理されていれば問題は無い。
0460デフォルトの名無しさん2009/12/06(日) 20:56:17
仕事さぼって2ちゃんねるで遊んでるやつを監視中
0461デフォルトの名無しさん2009/12/06(日) 21:00:59
やるんだったらラッパークラス用意してきっちり管理した方が良いと思う。
凄い面倒だけど。

それよりも中身自体をshared_ptrとかで共用したら?
イテレータを弄るときは大抵リストを操作するときなんだから、
あまり長時間保持するようなものじゃないと思う。
0462デフォルトの名無しさん2009/12/06(日) 22:00:54
Modern C++ Designに載ってる第4章のメモリプール的なものを作ってるんだけど、
オリジナルはvectorだけどlistの方がいいんじゃないかなと思って、
キャッシュ的に使うとなるとイテレータしかないのかなと考えたわけで。
0463デフォルトの名無しさん2009/12/06(日) 22:06:03
out_of_range
と
domain_error
はどう使い分けられるものでしょうか?
0464デフォルトの名無しさん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
これじゃだめ?
0465デフォルトの名無しさん2009/12/06(日) 22:20:36
>>464
そちらも拝見いたしましたが、
どうしても違いが分からないのです。
両方とも範囲外というエラーを表現しているのでは
ないかと思うのです。
04664632009/12/06(日) 22:32:57
例えば、0除算エラーは
out_of_range
と
domain_error
のどちらで通知されるべきものなのでしょうか?
0467デフォルトの名無しさん2009/12/06(日) 22:35:34
>>463
数学的な関数における定義域についての「範囲外」が domain_error ってことで。
http://en.wikipedia.org/wiki/Domain_of_a_function

はっきりと数学的な意味を持たせたい場合以外は out_of_range でいいと思う。
0468デフォルトの名無しさん2009/12/06(日) 22:38:22
>>467
ありがとうございます。
そうさせていただきます。
0469デフォルトの名無しさん2009/12/06(日) 22:40:27
C++のdomain_errorはそういう意味じゃないけどね
0470デフォルトの名無しさん2009/12/06(日) 22:41:25
>>469
じゃ、どういう意味なんだ?
0471デフォルトの名無しさん2009/12/06(日) 22:48:08
問題領域だろ
0472デフォルトの名無しさん2009/12/06(日) 22:48:58
Application domainね
0473デフォルトの名無しさん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 を見れ。
04744632009/12/06(日) 23:02:03
みなさんすみません。。。
規格を拝見してまいります。
0475デフォルトの名無しさん2009/12/07(月) 05:31:04
>>471
で?
0476デフォルトの名無しさん2009/12/07(月) 12:53:12
C++でサウンドファイルを操作するには
どうしたらいいでしょうか?
0477デフォルトの名無しさん2009/12/07(月) 12:55:35
C#で開発
0478デフォルトの名無しさん2009/12/07(月) 13:02:02
C++でサウンドファイルの形式をよみこんだりしたいです。
それとintは最大値を超えると最低値になるという理解であってますか?
0479デフォルトの名無しさん2009/12/07(月) 13:04:10
44kHzを22kHzに変換したいとかファイルを操作するだけなら fopen fseek fread fwrite fclose でおk
0480デフォルトの名無しさん2009/12/07(月) 13:13:08
再生もしたいです。
0481デフォルトの名無しさん2009/12/07(月) 13:41:36
ちなみにウインドーズ依存じゃないほうでよろしくお願いします。
0482デフォルトの名無しさん2009/12/07(月) 13:51:36
検索して
http://www.mega-nerd.com/libsndfile/
をみつけたんだけど、これって普通使いますか?
他にこれより良いやつあったらおしえてください。
0483デフォルトの名無しさん2009/12/07(月) 13:51:43
あなたでは不可能です
あきらめましょう
0484デフォルトの名無しさん2009/12/07(月) 13:57:27
>>483
ライセンスが売り物に出来るやつでも使えるの知りませんか?
0485デフォルトの名無しさん2009/12/07(月) 14:05:39
探してないなら自分で作るしかないだろ
0486デフォルトの名無しさん2009/12/07(月) 14:11:29
しかたないからつくるとしよう。
0487デフォルトの名無しさん2009/12/07(月) 14:35:25
>>485
作ってください。
1週間待ちますから。
0488デフォルトの名無しさん2009/12/07(月) 14:45:20
作ったらダウンロードしてお前も使うと言うことか?
絶対使うならソース公開してもいいが
1週間は無理だ
0489デフォルトの名無しさん2009/12/07(月) 16:46:15
配列サイズ(バイトサイズ?)を32や64などにすると
速度が上がると聞いたことがあるのですが、どのような
理由があるのでしょうか?
0490デフォルトの名無しさん2009/12/07(月) 16:57:28
きっちりしてるから
0491デフォルトの名無しさん2009/12/07(月) 18:56:24
>>490
木津さん、もうそれくらいにした方が。
0492デフォルトの名無しさん2009/12/07(月) 19:01:33
速いといってもいろいろ種類があるが2^nサイズだとメモリが無駄にならなくてアクセス距離が短くなったりGCの処理が軽くなったりといった理由だろう。
殆ど実装依存だが。
ちなみにC++の動的配列確保実装は配列のサイズをどこかに保持していなければならないのでそれも含めて丁寧に2^nサイズにする事は事実上不可能。
0493デフォルトの名無しさん2009/12/07(月) 19:41:23
実際はメモリ節約するのが一番。
100Mより10M
HDDに移動されると圧倒的な速度低下。
アルゴリズムから見直すべき
0494デフォルトの名無しさん2009/12/07(月) 19:55:37
>>490
木津さんっていう名前なの?
0495デフォルトの名無しさん2009/12/07(月) 19:58:18
tst
0496デフォルトの名無しさん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());という記述の意味がいまいちわかりません。
どなたかご教授お願いします。
0497デフォルトの名無しさん2009/12/07(月) 20:07:49
その前にP4が何か書いてくrえ
0498デフォルトの名無しさん2009/12/07(月) 20:08:51
ペルソナ4です
04994962009/12/07(月) 20:12:59
すいませんP4はポート4の事です。B4は4ビット目という意味です。
H8マイコンを使っています。
0500デフォルトの名無しさん2009/12/07(月) 20:13:45
C_Status関数が関数外部に対して副作用がないからスレッドで別プロセス走らせておいてその様子を見ているだけとえすぱー
05014892009/12/07(月) 20:15:27
実測で試してみるくらいしかないような話なんですね。
わかりました。ありがとう。
0502デフォルトの名無しさん2009/12/07(月) 20:16:12
何実測だとか関係のない事言ってるんだよ
0503デフォルトの名無しさん2009/12/07(月) 20:43:15
>>496
「C_Status() が 0 を戻したら 「;」 (つまり “何もしない”)」
を、C_Status() が 0 以外を戻すまで繰り返す。

…そういうことでなくて?
0504デフォルトの名無しさん2009/12/07(月) 20:57:36
>>496
>上記のwhile(!C_Status());という記述の意味がいまいちわかりません。
C_Status()を呼んで、その返り値を論理否定して、真の間ずっとループ。
C/C++で整数を論理値として評価する時は、0はfalse, 0以外はtrue。
つまりP4の4ビット目か5ビット目か6ビット目か7ビット目のどれかが0になるまでループ。
「教授」じゃなくて「教示」。
05054962009/12/07(月) 22:18:10
>>503
>>504
すごくよくわかりました。ありがとうございます。
0506デフォルトの名無しさん2009/12/07(月) 23:03:01
教授も教示も似たようなもんだ。
細かいな。
0507デフォルトの名無しさん2009/12/07(月) 23:06:51
セグるって一体なんなんですか。
delete obj;
の後
delete obj;
するとセグりますけど
最初のdelete obj;のときと
2回目のdelete obj;でobjは何が違うんですか。
一回目のdelete obj;でそこのアドレスから数バイトのバイナリ値が
何かに書き換えられてて2回目はその書き換えられた値を見て異常とか判断してるんでしょうか。
異常なobjと異常じゃないobjはどうやって見分けてるんでしょうか。
0508デフォルトの名無しさん2009/12/07(月) 23:09:54
今日、ウインドウに関するコードを読んでいたら
MainForm.hにクラスの宣言が3つほど書いてありました
普通は1つの*.hに1つのクラスしか宣言しないと思うのですが
これって、普通なんですかね?
0509デフォルトの名無しさん2009/12/07(月) 23:16:39
普通なんです
0510デフォルトの名無しさん2009/12/07(月) 23:23:24
>>507
見分けてるんじゃなくてヒープ領域の管理方法に依存する
つまり実装依存

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

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

見分けられたなら何度deleteしても問題ない仕様にするだろ?
0512デフォルトの名無しさん2009/12/07(月) 23:32:58
>>507
心配ならdeleteした直後にポインタに0を入れとけ
delete 0; をやっても何も起こらない事が保証されている
0513デフォルトの名無しさん2009/12/07(月) 23:38:50
>>512
それじゃ他で delete されたらアウトだろ
0514デフォルトの名無しさん2009/12/07(月) 23:46:04
何回でもdeleteしてやる
05155082009/12/07(月) 23:51:07
>>509
1つの*.hに1つのクラスってことで、おk?
0516デフォルトの名無しさん2009/12/08(火) 00:05:26
>>512またおまえかw
0517デフォルトの名無しさん2009/12/08(火) 00:41:27
>>507 他
その前にセグるって言葉は一般的なのか?w
0518デフォルトの名無しさん2009/12/08(火) 00:44:19
>>508
C++なら一つのヘッダファイルに関連する複数のクラスの定義を書くのはごく普通。stlやboostの中身見てみな。
0519デフォルトの名無しさん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 オマエもな。
05205082009/12/08(火) 01:37:40
>>518
わかった。ありがとう
0521デフォルトの名無しさん2009/12/08(火) 07:48:58
>>517
セグるをしらないのか。だっせーw
0522デフォルトの名無しさん2009/12/08(火) 08:08:25
>>521

> >>517
> セグるをしらないのか。だっせーw
0523デフォルトの名無しさん2009/12/08(火) 10:26:49
name spaceが何なのかわかりません
#include "hoge"だけじゃ何でダメなの?
0524デフォルトの名無しさん2009/12/08(火) 10:49:27
意味不明
namespaceと#includeは(直接は)関係ないし
0525デフォルトの名無しさん2009/12/08(火) 11:35:26
>>524
正しい使い方をみせてください・・・・・・
0526デフォルトの名無しさん2009/12/08(火) 11:43:35
>>525 標準ライブラリとか boost とか見れ。
0527デフォルトの名無しさん2009/12/08(火) 12:00:06
お前らしきりにSTLとかの中身見ろみろいうけどよ
アレは人間が見るものじゃないだろ
まぁ525はバカすぎて適当な対応したくなるのは同意
0528デフォルトの名無しさん2009/12/08(火) 12:44:05
>>525
みたいな低レベルな質問を見るとおぞけが
0529デフォルトの名無しさん2009/12/08(火) 12:46:49
もしかして : さむけ
0530デフォルトの名無しさん2009/12/08(火) 12:50:35
もしかして : おざき
0531デフォルトの名無しさん2009/12/08(火) 12:56:52
>>527
別に中身(実装?)を見る必要は無い。
名前空間の使われ方を知るにはライブラリリファレンスなどインターフェースを見るだけで十分でしょ。
もちろん、それ以上を知るために実装などを見ることも悪くは無い。
0532デフォルトの名無しさん2009/12/08(火) 12:58:53
//hogeが既にあるとして
hoge+hoge.f();
で、f()がhogeを変更するメンバ関数だった場合、上式は未定義の動作でしょうか。
05335282009/12/08(火) 13:02:19
>>529-530
ちょw
おまえらも低レベルかよw
0534デフォルトの名無しさん2009/12/08(火) 13:05:27
もしかして : こわき
0535デフォルトの名無しさん2009/12/08(火) 13:15:39
>>532
hoge はクラス型のようなので operator+() も関数呼び出しとなり、
hoge.f() および operator+() の呼び出しの前後にシーケンスポイントが
あるので未定義の動作にはならない。

ただし operator+() 呼び出しについて引数の評価順序が未規定なので、
結果に移植性は無い。
0536デフォルトの名無しさん2009/12/08(火) 13:32:55
>>533
おまえ程ではないけどね
0537デフォルトの名無しさん2009/12/08(火) 14:03:01
独自にプレフィックスを付ければnamespaceなど不要
0538デフォルトの名無しさん2009/12/08(火) 14:30:09
>>536
絵に描いたような低脳特有の返し乙w
0539デフォルトの名無しさん2009/12/08(火) 14:40:36
>>537
namespaceを使えば独自のプレフィックスなど不要
0540デフォルトの名無しさん2009/12/08(火) 15:40:40
>>539
ところが、独自にプレフィックスを付ければnamespaceなど不要なんだよ
0541デフォルトの名無しさん2009/12/08(火) 16:36:36
単純反復動作
0542デフォルトの名無しさん2009/12/08(火) 18:14:36
名前解決で困る気がするような気がする
05435282009/12/08(火) 20:41:08
俺の代わりに反論してくれたのはうれしいけど、
>>538とかがファビョって荒れたら大変だからほどほどに
しておくんなさいまし。
0544デフォルトの名無しさん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が変更される。
 }
というコードだった場合、規格上未定義の動作になりますか?
0545デフォルトの名無しさん2009/12/08(火) 21:21:39
なる
catch節でeに触った瞬間に鼻から悪魔
0546デフォルトの名無しさん2009/12/08(火) 21:25:08
しらなかった
0547デフォルトの名無しさん2009/12/08(火) 21:26:53
inline catch(const MyClass &e){...}
とか欲しいな
0548デフォルトの名無しさん2009/12/08(火) 21:32:39
>>545
それは変更しなくても値を取得した瞬間に鼻から悪魔ということでしょうか?
0549デフォルトの名無しさん2009/12/08(火) 21:36:11
もうデストラクタ呼ばれて壊れてるからね
0550デフォルトの名無しさん2009/12/08(火) 21:37:49
>>549
でもそうだとしますと
const MyClass &e
でcatchした例外は
どうしてさわってOKなのでしょうか?
0551デフォルトの名無しさん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
0552デフォルトの名無しさん2009/12/08(火) 21:52:31
Boost.Exceptionなんか、書き換えた上で再throwまでやっているくらいだし、
catch節内での例外オブジェクトの書き込みも認められているのではないの?
ttp://www.kmonos.net/alang/boost/classes/exception.html
05535512009/12/08(火) 21:55:54
>>552
パネェww

thx
0554デフォルトの名無しさん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 で書いてある。
0555デフォルトの名無しさん2009/12/08(火) 21:59:09
>>549
finallyが不憫でなりません
0556デフォルトの名無しさん2009/12/08(火) 21:59:11
男はtryを使ってはダメだ!
05575512009/12/08(火) 21:59:49
>>554
ありがとう。
> 例外オブジェクトの型は最上位の cv qualifier はずした型になるって 15.1/3 で書いてある。
ということは、>>544で、
const MyClass型のオブジェクトがthrowされたとしても
catch(MyClass& e)
でキャッチできるってこと・・・かな?
0558デフォルトの名無しさん2009/12/08(火) 22:00:52
>>555
finallyってどこの言語?

>>556
つまり男ならassertで断言するか死ぬかを選べ、と。
0559デフォルトの名無しさん2009/12/08(火) 22:02:29
>>558
ああ、ほんとごめんfinally忘れて
0560デフォルトの名無しさん2009/12/08(火) 22:03:36
>>558
オトメン乙
05615582009/12/08(火) 22:06:00
>>560
俺オトメンかよ
0562デフォルトの名無しさん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)
0563デフォルトの名無しさん2009/12/08(火) 22:10:01
>>562
よく分からないけどどれかのデストラクタが呼ばれちゃうからダメだって
0564デフォルトの名無しさん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 に記述あり。
05655442009/12/08(火) 22:12:21
みなさま どうもありがとうございます。
ttp://codepad.org/6U9D9nMB
こんな感じで、確かにconstオブジェクトをnon constな参照で受け止めることもできているようです。
>>554氏の引用してくださった資料が決め手ですね。
0566デフォルトの名無しさん2009/12/08(火) 22:21:41
言っとくけど仕様に最後のhandlerが処理されるまで非konnsuto参照として扱っても良いのはtry{}ブロック内のスタックが破壊されない事を期待しているからだからな。
0567デフォルトの名無しさん2009/12/08(火) 22:27:11
> try{}ブロック内のスタックが破壊されない事を期待している
そしてその期待は規格により保証されている、と言いたいのですね?>>566
0568デフォルトの名無しさん2009/12/08(火) 22:30:40
例外処理が重いのは例外の発生した箇所から帰着できる部分を保存して処理を別の部分に渡すため。
適当だけど
0569デフォルトの名無しさん2009/12/08(火) 23:14:19
void temp(const hoge *h)
void temp(const hoge &h)
この2つは似たような意味ですが、どうやって使い分けているんですか?
参照があればポインタなんていらない気がするんですが
0570デフォルトの名無しさん2009/12/08(火) 23:15:57
その程度の用途ならいらないですね
0571デフォルトの名無しさん2009/12/08(火) 23:16:56
>>569
参照だと途中で付け替えられないけどポインタなら付け替えられるでしょ?
参照だとC++専用だけどポインタならC言語でも使い回せるでしょ?
参照だとnullptrとかないけどポインタならあるでしょ?(C++0xからだけど。)

とかかな。
あとfactoryメソッドやりたいときにポインタじゃないと困る・・・とか?
(でも普通はスマートポインタか。)
0572デフォルトの名無しさん2009/12/08(火) 23:22:08
ポインタは値渡し、
参照は参照渡し。
どちらも用途がある。
ローカル変数を参照渡し出来ない、不具合が出るとかある。
05735692009/12/08(火) 23:24:36
ttp://d.hatena.ne.jp/ume-y/20060513/pointerandreference
こんなのがありました
安全性によって使い分けるのが、適切なのかな〜って思います
0574デフォルトの名無しさん2009/12/08(火) 23:24:58
>>572
> ローカル変数を参照渡し出来ない
別にアドレス渡し(ポインタ渡し)もできなくね?
0575デフォルトの名無しさん2009/12/08(火) 23:34:40
参照はクラス変数にするのがとてつもなくしんどい
0576デフォルトの名無しさん2009/12/08(火) 23:47:32
>>575
しかしそれはポインタも同じじゃないんですか?
0577デフォルトの名無しさん2009/12/08(火) 23:50:08
コンストラクタをオーバーロードしてると生きるのが苦痛になってくるな。
0578デフォルトの名無しさん2009/12/08(火) 23:53:52
>>577
そんなあなたに
this->destructor()
0579デフォルトの名無しさん2009/12/08(火) 23:54:11
参照はコンテナ使えないじゃない
0580デフォルトの名無しさん2009/12/09(水) 01:49:23
>>545,549,563,566
これ全部まちがいだよね?
0581デフォルトの名無しさん2009/12/09(水) 03:04:50
void func(){
int i = 3;
throw i;
}

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

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

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

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

コピーコンストラクタによるコピーが必要になることがほとんどだけど、関数に引数を
渡す場合や return で戻り値を返す場合と同様に省略可能なので、必ず呼び出される
とまでは言えない。
0583デフォルトの名無しさん2009/12/09(水) 06:15:59
っていうか、 throw の引数にしたときだけはローカル変数の寿命が関数外まで延びる
なんて仕様だったら困るだろ。
0584デフォルトの名無しさん2009/12/09(水) 06:36:50
つまりthrowされたときに自動的にコピーされるってことは確かなのか。
ただしそれは実装次第では省略可能ということで。
0585デフォルトの名無しさん2009/12/09(水) 09:13:05
よくわからないからボクはconstでキャッチするよ
0586デフォルトの名無しさん2009/12/09(水) 12:27:23
ところで何でエラー通知に対してC++は
「例外」
という方法を選んだんだろう?
(他に何があるかは知らんけど。)
他の言語ではそれが主流だったからとか?
0587デフォルトの名無しさん2009/12/09(水) 12:29:15
自分でnewで確保したメモリは自分でdeleteしないと気が済まないから、僕はスマートポインタを使いません。

こういう馬鹿がたまにいるんだが、どう説得したら良い?
0588デフォルトの名無しさん2009/12/09(水) 12:50:52
使う必要もない場面なら使わなくていいんじゃないの
0589デフォルトの名無しさん2009/12/09(水) 12:56:39
メンバ変数にポインタを使っている場合、コピーコンストラクタでどうポインタを扱ってますか
0590デフォルトの名無しさん2009/12/09(水) 13:06:06
>>587
メモリの所有者を明確にした上でRAIIを徹底できるなら別にスマポ要らないよね。

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

>>587
「お前が完璧人間なのはわかったが、保守するかもしれないほかの人のことも考えてくれ」とでも言ってみるとか
0593デフォルトの名無しさん2009/12/09(水) 15:01:29
完璧主義相手なら下手に煽るより安全工学引き合いに出した方がいいんじゃないか
05945892009/12/09(水) 15:10:25
>>591
お前、俺になりすましてレスすんな
0595デフォルトの名無しさん2009/12/09(水) 17:10:46
しかし、pimplの場合、たとえ参照カウントが要らなくても、微妙に楽できるのでついshared_ptrを使いたくなる。
0596デフォルトの名無しさん2009/12/09(水) 18:06:31
>>587
参照使わせろ。
0597デフォルトの名無しさん2009/12/09(水) 18:39:07
new だけが露出していて delete は隠蔽されている、というスタイルは嫌いだな
0598デフォルトの名無しさん2009/12/09(水) 20:01:48
>>597
boost::make_shared
deleteと同じようにnewからも開放されるだけでなく、
shared_ptrが抱える例外安全性の落とし穴からも守ってくれます
0599デフォルトの名無しさん2009/12/09(水) 20:13:28
メモリ管理は自前かクラスのデストラクタだけで良いよ。
それ以外はc++の速度が失われる
0600デフォルトの名無しさん2009/12/09(水) 20:39:53
>>597出直してこい
0601デフォルトの名無しさん2009/12/09(水) 21:34:28
Javaみたいでダサいもん
自分でmallocしたものは自分でfreeする
自分でfopenしたものは自分でfcloseする
自分でnewしたものは自分でdeleteする
そんな当たり前のことを当たり前に書けるのがC/C++の魅力のはず
0602デフォルトの名無しさん2009/12/09(水) 21:46:43
詩人が多いな
特に内容がない詩ばかりだが
0603デフォルトの名無しさん2009/12/09(水) 21:53:01
struct X
{
    struct Y
    {
        struct Z
        {
            int i;
        } z;
    } y;
} x;

x.y.z.i = 0;

上のようにネストを深くしても変数へのアクセスコストはコンパイル時にかかるだけで実行時はネストレベルに関係ありませんよね?
0604デフォルトの名無しさん2009/12/09(水) 21:53:08
class Test {
std::string s;
public:
Test(const std::string& s) {
this->s = s;
}

パラーメータを参照でもらって、メンバ変数を初期化したい。
ひとまずコンパイルが通ったのですが、これで大丈夫ですかね?
0605デフォルトの名無しさん2009/12/09(水) 22:02:05
>>603
残念ながらstructが被るとアライメント調整でsizeof(Y) != intになる可能性がある。
sizeof(Z) > sizeof(Y)にはならないが。
0606デフォルトの名無しさん2009/12/09(水) 22:09:47
Zにパディングが入ればアライメントは取れるから
Yにさらにパディングが入ることは考えづらいと思うが…

コンストラクタとか作るとどうなるかわかんないけど
PODだから大丈夫じゃないの?
0607デフォルトの名無しさん2009/12/09(水) 22:35:59
アラインメンドだのパディングだのはアクセスコストとは別問題じゃね
0608デフォルトの名無しさん2009/12/09(水) 22:39:21
.演算子はオーバーロードできないしこれで解決できるメンバは全てコンパイルタイムに確定しているから
アクセス速度は全て定数時間
0609デフォルトの名無しさん2009/12/09(水) 23:03:09
>>597
>>601
居たww

まあきっとbetter Cとして使っているから
最新のパラダイム(ってほどでも無いけど、風潮)が理解できないのかな。
0610デフォルトの名無しさん2009/12/09(水) 23:15:59
RAIIは良いものじゃ
0611デフォルトの名無しさん2009/12/09(水) 23:24:41
>>609
おまえさんが何を探して何に笑っているのかがわからないが、それは置いておこう

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

ちなみに、まだ C++ 「ではない」ものを紹介されたが
それとて抽象化レベルの観点から異を唱えたことに対する反論とは受け取っていないぞ
0612デフォルトの名無しさん2009/12/09(水) 23:27:12
明後日の方向に長文書いて馬鹿がバレる例。
0613デフォルトの名無しさん2009/12/09(水) 23:27:22
>>605
それはない
0614デフォルトの名無しさん2009/12/09(水) 23:34:58
というか長文を書くヤツは大抵 ・・・いや止めておこう。
0615デフォルトの名無しさん2009/12/09(水) 23:36:05
>>611
> 色んな形で「圧力」を受けたことがあるが腐っても面従腹背はしない
> 間違っているものは間違っていると、本心から納得できないものに対しては常に言う
よし、じゃあ早速鏡に向かって叫んでくれ。
0616デフォルトの名無しさん2009/12/09(水) 23:44:32
>>611
居るよね、こうして自分を盲信している人。

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

これ、心理学的に適応機制って言うんだぜw
06176092009/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
自分の心の柱を守るためには
まあそれも大事だろ。
0618デフォルトの名無しさん2009/12/09(水) 23:56:31
よーするに個人煽りしかできないわけね
ム板におけるそのザマ自体が返事としては十分だ

十分だがつまんねーから寝るぜ
0619デフォルトの名無しさん2009/12/09(水) 23:59:44
>>618
>十分だがつまんねーから寝るぜ
age ながら言われてもな。
我が読解力では
 いじめないでよ
 もう逃げるから
としか読み取れない。
0620デフォルトの名無しさん2009/12/10(木) 00:01:11
マって中学生みたいな奴しかいないよな
0621デフォルトの名無しさん2009/12/10(木) 00:16:20
みんなでお遊戯しているよ
0622デフォルトの名無しさん2009/12/10(木) 00:19:27
まぁ、新しい技術に投資する場合はある程度選別しなければならないのも事実ではある。
C#とか絶対滅ぶ。間違いない。おれはJavaに投資して正解だった。これからはHaskelだ。
0623デフォルトの名無しさん2009/12/10(木) 00:21:24
           ,, -──- 、._ 
        .-"´         \.
        :/   _ノ    ヽ、_ ヽ.:
        :/   o゚((●)) ((●))゚oヽ:
      :|       (__人__)    |:
      :l        )  (      l:
      :` 、       `ー'     /:
       :, -‐ (_).        /
       :l_j_j_j と)丶─‐┬.''´
          :ヽ   :i |:
             :/  :⊂ノ|:
0624デフォルトの名無しさん2009/12/10(木) 00:34:55
てっきり>>611って「まったく関係のない話を延々するというボケ」だと思ってたけど、
もしかして本人は本当に妥当な論述だと思ってたの?
0625デフォルトの名無しさん2009/12/10(木) 00:41:53
C++の話しろよ
0626デフォルトの名無しさん2009/12/10(木) 00:52:26
>>604
それは代入。メンバ変数を初期化するには初期化リストを使う。
0627デフォルトの名無しさん2009/12/10(木) 01:05:09
データマンバにはm_とか後ろ_とかプレフィクスつけようぜ?
Javaの人はthis使いたがるけど。
0628デフォルトの名無しさん2009/12/10(木) 01:10:14
マンボ!
0629デフォルトの名無しさん2009/12/10(木) 01:21:01
後ろにつけたらプレフィックスじゃないだろ
0630デフォルトの名無しさん2009/12/10(木) 01:35:33
GCだのスマートポインタだのfinallyだのRAIIだの
確保したものを解放する責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0631デフォルトの名無しさん2009/12/10(木) 01:42:02
技術に道徳やら精神論は持ち込むなよ
0632デフォルトの名無しさん2009/12/10(木) 01:42:51
for だの while だの switch だの関数だの
正しい位置にジャンプする責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0633デフォルトの名無しさん2009/12/10(木) 01:44:38
変数だの配列だの構造体だのビットフィールドだの、
正しいメモリにアクセスする責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0634デフォルトの名無しさん2009/12/10(木) 01:47:36
コンパイラだのアセンブラだのプリプロセッサだのリンカだの、
プログラムをマシンコードで組み上げる責任を放棄するための黒魔術が流行りすぎている

こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0635デフォルトの名無しさん2009/12/10(木) 01:49:33
freeやdelete呼んだり、ファイルやソケット閉じたり、セマフォ返したりするのって
そんなに嫌なの?苦痛なの?
妙な言語仕様を付けたり奇怪なトリックを使ったり無用なオーバーヘッドをかけてでも
眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?

おかしいだろう
他人(OSとか)から借りたものを用が済んだらお返しするのは道徳的にも技術的にも当然だ
そこから無理矢理逃げ回ることが最新でございというのは納得いかない
0636デフォルトの名無しさん2009/12/10(木) 01:56:30
プログラム終端におけるfreeは必要/不必要論争とか今さらヤメてね
0637デフォルトの名無しさん2009/12/10(木) 01:57:00
返し忘れる阿呆が多いから仕方ないんだ
セーフティネットみたいなものだと思ってくれないか
世の中は真のプログラマだけがプログラミングする時代から一般人誰でもプログラミングする時代に変わりつつあるんだ
0638デフォルトの名無しさん2009/12/10(木) 02:00:57
呼ばれた場所にちゃんと返ったり、条件ジャンプ命令使い分けたり、ジャンプテーブル組んだりするのって
そんなに嫌なの?苦痛なの?
妙な言語仕様を付けたり奇怪なトリックを使ったり無用なオーバーヘッドをかけてでも
眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?

おかしいだろう
フローがわかっているものを正しくマシンコードに起こすのは道徳的にも技術的にも当然だ
そこから無理矢理逃げ回ることが最新でございというのは納得いかない
0639デフォルトの名無しさん2009/12/10(木) 02:01:26
黒魔術とか奇怪なトリックってことは
その技術を使いこなせてないか、それとも理解せずに使っているか
あるいはそもそもプログラム書いてない可能性すらあるな
0640デフォルトの名無しさん2009/12/10(木) 02:05:40
それぞれの理屈はわかるよ
でもどれもこれも大げさすぎるだろ
「delete書きたくない」ただそれだけのために

そんなのを論争してたり長々と解説してたりしてるのを見ると
「いいからサボらずにdelete書けよ」と言いたくなる
0641デフォルトの名無しさん2009/12/10(木) 02:08:26
>>635
> そんなに嫌なの?苦痛なの?
べつに。 RAII があるので楽チンです。

> 眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?
邪悪だから排除してるんじゃなくて、人間がやる必要は無いから機械に任せているだけ。

> 他人(OSとか)から借りたものを用が済んだらお返しするのは道徳的にも技術的にも当然だ
そうだね。 RAII はそのためのものです。

> そこから無理矢理逃げ回ることが最新でございというのは納得いかない
逃げ回る?
RAII はリソースを返さないで済ますためのものだと思ってるのかな?
0642デフォルトの名無しさん2009/12/10(木) 02:10:59
黒魔術じゃないだろ
C++にはGCがないので当たり前のテクニックです
メモリリークしたくなかったら黙って使え
0643デフォルトの名無しさん2009/12/10(木) 02:13:29
デストラクタを悪用して、解放のコードを見かけ上抹殺する黒魔術だな>RAII

こういうRAII信奉者にありがちなのが、解放に失敗がありうる状況だと途端に困っちゃうパターン
大体エラーを無視してRAIIを使い続けるという最悪の手段を選んで満足してしまう

やっぱり麻薬だ
0644デフォルトの名無しさん2009/12/10(木) 02:17:16
デバイスコンテキストからウィンドウに描画されてる情報をHBITMAPまで持って行ったのですが、
ここから特定のピクセル色を知りたいです。
何か関数は容易されてないでしょうか?
よろしくお願いします。
0645デフォルトの名無しさん2009/12/10(木) 02:20:43
デストラクタを怖がって、解放のコードを見かけ上増量させる黒魔術だな>明示的リソース破棄

こういう明示的リソース破棄信奉者にありがちなのが、処理中に失敗がありうる状況だと途端に困っちゃうパターン
大体例外を無視して明示的リソース破棄を使い続けるという最悪の手段を選んで満足してしまう

やっぱりアホだ
0646デフォルトの名無しさん2009/12/10(木) 02:25:04
> 処理中に失敗がありうる状況だと途端に困っちゃうパターン
ほぼ常に困りっぱなしじゃねぇかw
0647デフォルトの名無しさん2009/12/10(木) 02:27:52
アホはあんただよ
RAIIで例外を無視しないようにしようとすると、原理的に
「例外を投げるデストラクタ」というC++最大級の法度を犯すことになる

だが、たまたまfreeやdeleteが失敗しないように出来てるので、
(operator deleteは失敗させられるけど普通は禁忌とされてる)
RAII信者は「解放が失敗するかもしれない」なんてことは考えもせず
そういう場合はRAIIを捨てなければならないという判断を下すことが出来ない

だから怖いんだよ
0648デフォルトの名無しさん2009/12/10(木) 02:40:35
アホはあんただよ
明示的リソース破棄で例外を無視しないようにしようとすると、原理的に
「同じコードを何箇所にもばらまく」というプログラミング最大級の法度を犯すことになる

だが、たまたま C 時代のライブラリは例外を投げないように出来てるので、
( qsort() や bsearch() は投げることがあるけど普通はそんな比較関数は使わない)
明示的リソース破棄信者は「処理中に例外が発生するかもしれない」なんてことは考えもせず
そういう場合は明示的リソース破棄を捨てなければならないという判断を下すことが出来ない

だから怖いんだよ
0649デフォルトの名無しさん2009/12/10(木) 02:44:39
いまいちだな
0650デフォルトの名無しさん2009/12/10(木) 02:49:43
delete this;
0651デフォルトの名無しさん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];
}
これをスマポ使わずにメモリリークしないようにするのとか
考えるのも嫌だわ

と思ったけどローカルクラス使えばいいか
0652デフォルトの名無しさん2009/12/10(木) 03:12:23
そこは素直にstd::vector使っとこうぜ
0653デフォルトの名無しさん2009/12/10(木) 03:25:43
もちろん普段はvectort使ってるよw
ただスマポ等を黒魔術と言ってる人(ネタだと思うけど)は
上に書いたのをどう処理してるのかなと
0654デフォルトの名無しさん2009/12/10(木) 03:26:51
t入ってしまった…
0655デフォルトの名無しさん2009/12/10(木) 03:41:33
スマポが黒魔術だと思うならJavaなりC#で満足してろってこった
C++使う資格がない

だいたいデストラクタはメモリリークだけでなく一般的なリソースの
解放もできるのでGCより原理的に優れているんだ

使い方が面倒なだけで
0656デフォルトの名無しさん2009/12/10(木) 03:42:40
すぐれてるなんてことはない
0657デフォルトの名無しさん2009/12/10(木) 03:48:14
>>656
あんたも頑固だな
Javaでも使えカス
0658デフォルトの名無しさん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プログラマだったので、なんでもかんでもポインター渡ししてたのですが(速度命)
最近の風潮だと値渡しもありなんですかねぇ?
0659デフォルトの名無しさん2009/12/10(木) 03:59:08
速度命は参照渡し
0660デフォルトの名無しさん2009/12/10(木) 04:01:09
昔のCプログラマならCPUの処理サイズ以下のデータは値渡しした方が効率的だという事くらい知ってそうだけど
0661デフォルトの名無しさん2009/12/10(木) 04:04:11
intのポインタを積んだら相当速度落ちるだろ。
intの実体がレジスタにあったとしても、int*はメモリに確保されるだろ。
int*を読んで、アドレスを特定してintを読みに行く。
intを直接読むより、手間とメモリが倍掛かる。 アドレス分。
超初心者だろ。・
0662デフォルトの名無しさん2009/12/10(木) 04:06:37
参照渡しはコンパイル時置換解決とアドレス渡しとで表記が混同できるのが利点であって
実行時となるとアドレス渡しでしか解決方法がないからここでポインタと参照を引き合いに出し合うのはナンセンス
0663デフォルトの名無しさん2009/12/10(木) 04:06:57
少なくとも10バイト以上のデータでポインタ渡しやれよ。可変長ならそれ以下があっても良いけど
アドレス読んでから実体にたどり着く部分と
メモリの無駄を無くすため。
0664デフォルトの名無しさん2009/12/10(木) 04:09:47
>>662
中身ではなくてまずここを変えれって事
void AddVec(vector<int> v)

→

void AddVec(vector<int> &v)


それに参照かポインタ渡しにしないと
元のvectorは変化しないが。
06656582009/12/10(木) 05:14:20
ごめんなさい。質問が下手でした。もちろんintだけなんか積まないです。
知りたかったのは
 DATA d;
 v.push_back(d); // ここで勝手にコピーコンストラクタが呼ばれるの?
ということでした。
スタックに作られた変数を積んだら、
関数から戻ったときに実体なくなるよなぁ・・・って思ったので
0666デフォルトの名無しさん2009/12/10(木) 05:19:15
RAIIが黒魔術って
いまさら何を。

素直に私の頭じゃ理解できません首にしないでくださいって言えよww
0667デフォルトの名無しさん2009/12/10(木) 05:33:31
C++では、
複雑なコードの自動生成をしたいとすると
「プリプロセッサを自作する」
と言う話を聞きました。
…それってよくあることなんでしょうか?
0668デフォルトの名無しさん2009/12/10(木) 05:58:20
>>667
やろうと思ったことはあるが、
途中で冷静になってやめたわ(笑)
0669デフォルトの名無しさん2009/12/10(木) 05:58:31
>>667
Qtがそうじゃ無かったかな?
06706672009/12/10(木) 06:06:29
>>668
まさに私もそんなに感じになっています。
>>669
mocですか。
なるほど、確かに。
ありがとうございます
0671デフォルトの名無しさん2009/12/10(木) 09:20:23
>>668
つくる能力がないだけ。
0672デフォルトの名無しさん2009/12/10(木) 10:25:17
パラメータで渡されたポインタは、どこでdeleteするのが適切なんですか?
0673デフォルトの名無しさん2009/12/10(木) 10:27:44
普通は渡した方が削除して渡された方はなにもしない
0674デフォルトの名無しさん2009/12/10(木) 10:29:20
>>673
なるほど、ありがとうございます
0675デフォルトの名無しさん2009/12/10(木) 10:39:18
>>674
お礼を言われるほどではない
0676デフォルトの名無しさん2009/12/10(木) 12:53:32
name spaceはjavaのパッケージと同じ事はわかりました
C++の場合javaのパッケージと同じく、name spaceごとにディレクトリを別けるのですか?
0677デフォルトの名無しさん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について部分特殊化したいけれど、出来ない場合を教えてください。
0678デフォルトの名無しさん2009/12/10(木) 13:06:36
>>676
>name spaceはjavaのパッケージと同じ事はわかりました
わかってねぇ…
0679デフォルトの名無しさん2009/12/10(木) 13:12:20
>>678
だったらわかるように説明してやれよ
できないのか?ん?
0680デフォルトの名無しさん2009/12/10(木) 13:14:34
>>677もお願いします。
0681デフォルトの名無しさん2009/12/10(木) 13:42:51
多重定義で代用できることが分かったのでもういいです。

newでオブジェクトの配列を初期化したとき={}で初期化できないんですがどうやりますか?
0682デフォルトの名無しさん2009/12/10(木) 13:44:24
>>676
C++でnamespaceをJavaのpackageと同じように使うのだけはヤメロ。
昔そういうコーディング規約を採用した会社を知っているが、
またたく間に会社が潰れ、社員の半数近くが悲惨な死を遂げた。南無。
0683デフォルトの名無しさん2009/12/10(木) 13:54:07
int[] iValule = new int[] { 1 , 2 , 4 , 8 };
のようにイコールをつけないことが分かったのでもういいです。
0684デフォルトの名無しさん2009/12/10(木) 14:22:09
>>682
それじゃただの FUD にしかならん。

具体的に何がマズかったの?
0685デフォルトの名無しさん2009/12/10(木) 15:18:52
御守りを買ったら神経痛が治ったとか
そういうのの逆verです。
0686デフォルトの名無しさん2009/12/10(木) 17:53:19
>>676
ファイルシステム上のディレクトリ構成とは無関係に階層を作れるのが(パッケージと比較しての)名前空間の特徴の1つ。
実際、ディレクトリと名前空間の階層が一致しない構成は良くある。

どういう構成にするのかはどちらかというとコーディング規約の範疇。
良くも悪くもコンパイラは関与しないので。
0687デフォルトの名無しさん2009/12/10(木) 18:27:08
教えると調子に乗るから教える必要はないだろ。
あと、そもそもC++にディレクトリという概念は存在しない…よな?
0688デフォルトの名無しさん2009/12/10(木) 18:28:49
>>671
お前の話は聞いてねぇよwwwwwww
0689デフォルトの名無しさん2009/12/10(木) 19:21:35
と、わざわざ相手の話を聞いてレス。
0690デフォルトの名無しさん2009/12/10(木) 20:01:04
g++はgccの一部なんですか?
0691デフォルトの名無しさん2009/12/10(木) 20:02:22
はい
0692デフォルトの名無しさん2009/12/10(木) 20:10:31
>>689
一理ある
0693デフォルトの名無しさん2009/12/10(木) 20:47:47
>>687
存在しないと思うよ。存在していたら、今わざわざapi叩いてフォルダ
扱うライブラリ作っていないw
boostだと日本語だめなんだよね。使えたら便利なんだけど。
06946872009/12/10(木) 21:14:06
>>693
さらにインクルードパスの指定についても実は環境依存なんだよね。その意味も込めてのディレクトリの概念存在しない説。
0695デフォルトの名無しさん2009/12/10(木) 22:19:33
>>691
thx
0696デフォルトの名無しさん2009/12/10(木) 22:31:59
キー値が2つあるmapみたいなコンテナってないんですか
0697デフォルトの名無しさん2009/12/10(木) 22:34:24
その二つのキーをひとつに纏めるクラスを作れば良いだろ
0698デフォルトの名無しさん2009/12/10(木) 22:43:24
boostでないスマートポインタありますか。
0699デフォルトの名無しさん2009/12/10(木) 22:45:42
スマートポインタじゃないしスレッド対応してないけどauto_ptr
0700デフォルトの名無しさん2009/12/10(木) 22:50:27
マルチスレッドのいいやつ教えて
0701デフォルトの名無しさん2009/12/10(木) 22:51:17
std::tr1::shared_ptrってマルスレ対応じゃなかったっけ。
0702デフォルトの名無しさん2009/12/10(木) 22:52:15
boost使えなくてstd::tr1や0xの実装使える環境って一体・・・
0703デフォルトの名無しさん2009/12/10(木) 22:52:18
機種依存、バージョン依存を無くすため
boostからスマートポインタ部分だけ分離したいけど
多方面に関係して諦めた
07046822009/12/10(木) 23:12:51
>>682
今さらって感じMAXで、申し訳ありません
JDのソースでnamespaceを見てみたら、javaのパッケージみたいになっていました
ktorrentのソースはjavaっぽくない
07057042009/12/10(木) 23:14:08
名前を間違えた
0706デフォルトの名無しさん2009/12/10(木) 23:26:23
キーが2つって

std::map<std::pair<first, second>, value> とかにすればいいでしょ

3つ以上ならなら

std::map<std::tr1::tuple<省略>, value>とか
0707デフォルトの名無しさん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;
}
0708デフォルトの名無しさん2009/12/10(木) 23:31:04
>>705
間違えたなら謝罪くらいしましょう
0709デフォルトの名無しさん2009/12/10(木) 23:34:13
うるせぇ、カス、ごめんよ、ぺっ。
0710デフォルトの名無しさん2009/12/10(木) 23:43:09
miil.insertとかmiid.findとかmiid.eraseとかの引数はどうやればいいですか
0711デフォルトの名無しさん2009/12/10(木) 23:45:15
std::mapの内部でtypedefされた型名があるからそれ使え
0712デフォルトの名無しさん2009/12/10(木) 23:47:02
boost multi_index
0713デフォルトの名無しさん2009/12/10(木) 23:47:51
いやです
0714デフォルトの名無しさん2009/12/11(金) 00:02:17
マルチスレッドで入力がvoid*限定なんですけど
これが変換不可能になります。どうすればいいですか

shared_ptr<NODE> node;
tserach( (void*)node );

error
shared_ptr<NODE> から void * へのキャストはできない (関数 main() )
0715デフォルトの名無しさん2009/12/11(金) 00:03:13
tserach( (void*)&node );
0716デフォルトの名無しさん2009/12/11(金) 00:05:44
nodeは4バイトしか使わないから放置でいいか。
NODEのメンバでスマートポインタ使っていれば
それはnodeを参照している物がなくなれば回収されますか。
0717デフォルトの名無しさん2009/12/11(金) 00:07:35
NODE *node;を
shared_ptr<NODE> node;
で置き換えてるので
それだと駄目と思うんですが。
0718デフォルトの名無しさん2009/12/11(金) 00:13:48
tr1::shared_ptrってマルスレ対応なんだ知らんかった
どうりであんなに遅かったのか
0719デフォルトの名無しさん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);
}
}
07207162009/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);
}
}
07217192009/12/11(金) 00:44:11
2回目以降のnew clsで先のアドレスにはアクセスできなくなるのですが
これは回収できないですか。
クラス内でスマートポインタ使っていても、本体がメモリに
存在するから無意味ですか。
0722デフォルトの名無しさん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);
}
}
0723デフォルトの名無しさん2009/12/11(金) 01:01:07
auto変数を参照が残っている間は
生存させる方法ありますか。
これ出来たら簡単なのですが。
0724デフォルトの名無しさん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));
としないのは何故でしょうか?
0725デフォルトの名無しさん2009/12/11(金) 01:39:43
>>719
解放してないんだからあたりまえ。

>>720
こっちもあたりまえ。
0726デフォルトの名無しさん2009/12/11(金) 01:42:00
>>723
ありません。

そんなことがしたい場合は new で作って shared_ptr で参照を持つようにするのが常套手段です。
0727デフォルトの名無しさん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);
}
}
0728デフォルトの名無しさん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);
}
}
07297282009/12/11(金) 02:18:34
リークはしないけど、関数呼び出し後に利用不可能になりました。
0730デフォルトの名無しさん2009/12/11(金) 02:55:13
>>727-729
とりあえず new と delete とスマートポインタについてひととおりネットなり本なりで勉強しなおせ。
ここに書かなくていいから。
0731デフォルトの名無しさん2009/12/11(金) 11:30:50
C++は参照があるのにポインタもあります。ポインタはレガシーな考え方じゃないですかね?
javaとかの言語はC++の参照しかないのに、ちゃんとプログラミングできるじゃないですか
0732デフォルトの名無しさん2009/12/11(金) 11:32:08
何を言ってるんだ。
「Javaでちゃんとプログラムできる」
という時点で間違っている。^^

あんな言語で何をちゃんとできるというのだ。w
0733デフォルトの名無しさん2009/12/11(金) 11:40:23
> ポインタはレガシーな考え方
iteratorを考えたら決してレガシーになってないぞ。むしろ昇華されてる。
あと各種API関係で使うからそれは避けようがないし。
0734デフォルトの名無しさん2009/12/11(金) 13:07:17
>>731
C でできることは C++ でもできなければならない。

…C99 で崩れちゃったけども。
0735デフォルトの名無しさん2009/12/11(金) 13:12:02
Javaアレは参照なのか?
ならば、どうしてヌルポになるのだ?
0736デフォルトの名無しさん2009/12/11(金) 13:42:03
だからJavaグラマとポインタの話は切れって。
向こうから振ってこられても話すな
0737デフォルトの名無しさん2009/12/11(金) 13:51:59
>>736
一言余計だ。反省しなさい。
0738デフォルトの名無しさん2009/12/11(金) 15:28:52
>>735
貴様…ぬるぽ誕生の歴史を繰り返そうというのか…ッ!
0739デフォルトの名無しさん2009/12/11(金) 16:51:56
Javaで〇〇

これをC++スレで言われても何にもならないという現実を理解してください
0740デフォルトの名無しさん2009/12/11(金) 16:57:29
ぬるぽ
0741デフォルトの名無しさん2009/12/11(金) 17:00:03
プロのグラマー美女、略してプログラマー
0742デフォルトの名無しさん2009/12/11(金) 17:01:58
>>740
がっ
0743デフォルトの名無しさん2009/12/11(金) 17:03:57
Javaが糞だと思うやつ挙手!
0744デフォルトの名無しさん2009/12/11(金) 17:57:13
ぬ
0745デフォルトの名無しさん2009/12/11(金) 17:58:34
struct nullpointer_exception{
 vitrual ~nullpointer_exception(){}
};
0746デフォルトの名無しさん2009/12/11(金) 18:02:35
catch(nullpointer_exeption &e)
{
e.galtu();
}
0747デフォルトの名無しさん2009/12/11(金) 20:24:18
>>724
書いたのがC畑の人なんじゃないの?
0748デフォルトの名無しさん2009/12/11(金) 20:38:56
外寒すぎw
0749デフォルトの名無しさん2009/12/11(金) 20:58:13
stl=標準ライブラリ?
0750デフォルトの名無しさん2009/12/11(金) 21:04:13
そう。
0751デフォルトの名無しさん2009/12/11(金) 21:12:19
>>750
thx
0752デフォルトの名無しさん2009/12/11(金) 21:13:38
標準ライブラリはcstdlibやがな
0753デフォルトの名無しさん2009/12/11(金) 21:15:09
配列はポインタのシンタックスシュガー
0754デフォルトの名無しさん2009/12/11(金) 21:22:19
配列newは何かの間違い
0755デフォルトの名無しさん2009/12/11(金) 21:23:15
そんな事言われてもC++自体が機械語のシンタックスシュガーだし
0756デフォルトの名無しさん2009/12/11(金) 21:39:44
アセンブラがかわいそうに
0757デフォルトの名無しさん2009/12/11(金) 21:58:53
アセンブラは言語ではない。ニーモニックだ。
0758デフォルトの名無しさん2009/12/11(金) 22:06:06
01001000111100101001101110100101010101010101010100111110101100100
男なら0と1だけでプログラミングくらいしてみせぃ!
0759デフォルトの名無しさん2009/12/11(金) 22:11:50
機械語乙
0760デフォルトの名無しさん2009/12/11(金) 22:20:16
>>752
つまり、stlは標準に近いけどおまけみたいな感じ?
0761デフォルトの名無しさん2009/12/11(金) 22:35:21
std::vector って == 使えるんだね。。。

C++ Reference (ttp://www.cplusplus.com/reference/stl/vector/)
に載ってないんだけど何故?
グローバル関数だから?

# これを知らないばかりに無駄なソースコードが大量に・・・。
0762デフォルトの名無しさん2009/12/11(金) 22:40:39
メンバ関数として定義されてないから
0763デフォルトの名無しさん2009/12/11(金) 23:26:43
今自動エロ動画探索プログラムつくろうとおもっていて、まずは関連ワードから検索して動画を探知するまでのアルゴリズムがどういった流れでやればいいのかわかりません。
だれか動画探索プログラムのやり方わかる方いらっしゃいますか?
0764デフォルトの名無しさん2009/12/11(金) 23:32:30
「ネットは広大だわ」が出来上がるのでやめなさい
0765デフォルトの名無しさん2009/12/11(金) 23:32:36
ああ回答がない
アイディア盗まれるしやっぱり書き込まなきゃよかった
0766デフォルトの名無しさん2009/12/11(金) 23:34:56
アルゴリズムと自らのリビドーを満たす方法は違う
0767デフォルトの名無しさん2009/12/11(金) 23:49:22
>>763のアイデアのおかげですばらしいエロ動画探索プログラムができました。
07687672009/12/11(金) 23:51:05
>>763のアイデアのせいで児ポ動画まで拾ってしまい送検されました。
0769デフォルトの名無しさん2009/12/11(金) 23:58:26
適当に動画サイトを見つけて動画っぽい拡張子全部落として、サイト内のリンクを再帰的に・・・
0770デフォルトの名無しさん2009/12/12(土) 00:03:38
perlでvipろだの画像をダウンロードするスクリプトを書いた事がある
しかし、書いてみると書く前のウハウハとは違う気持ちが沸いてくる
0771デフォルトの名無しさん2009/12/12(土) 01:32:50
>>749,760
Standard Template Library は C++ Standard Library の一部として取り込まれました。
0772デフォルトの名無しさん2009/12/12(土) 02:22:04
>>763
エロサイトを基準として探索してひたすらダウンロードするだけなら作ったことあるけど、
ネットは広大だな、と思って全部捨てたわ
0773デフォルトの名無しさん2009/12/12(土) 10:56:00
2chの半角で"神"か"キタ"というレスが付いたリンク先の画像や動画をダウンロードすればおk
0774デフォルトの名無しさん2009/12/12(土) 13:29:51
download板を巡回してハッシュをp2pソフトにぶち込むプログラム
0775デフォルトの名無しさん2009/12/12(土) 15:46:20
>>773
今更なにを。。。
0776デフォルトの名無しさん2009/12/12(土) 15:52:16
見事グロ画像ゲット
0777デフォルトの名無しさん2009/12/12(土) 15:54:16
通報されそう
0778デフォルトの名無しさん2009/12/12(土) 16:02:56
自動巡回とか楽しくなさそう
0779デフォルトの名無しさん2009/12/12(土) 17:46:34
boostのuBLASを利用してクラスを作ろうとしています。
classのヘッダ内で行列を定義しようとすると
error: expected identifier before numeric constant
error: expected ‘,’ or ‘...’ before numeric constant
ってエラーが起こるんですけど、原因わかる方いましたらお願いします。
0780デフォルトの名無しさん2009/12/12(土) 17:57:46
>>779
エラーが出てるところ意外を削って問題が再現する最小限のコードを作ってみるといい。
0781デフォルトの名無しさん2009/12/12(土) 18:41:23
http://codepad.org/l3gojFgj

とりあえずその辺のサイトのソースを参考にクラス化してテストするとこうなりました。
boostのスレで聞いた方が良いのでしょうか?
0782デフォルトの名無しさん2009/12/12(土) 18:48:29
メンバ変数の宣言時に初期化とか...
C++の仕様をちゃんと覚えてからboost覚えなさい
0783デフォルトの名無しさん2009/12/12(土) 18:56:17
>>781
もっと削れるだろ。
struct test { int x(0); };
0784デフォルトの名無しさん2009/12/12(土) 18:57:26
C++には「インターフェイスと抽象クラスを区別する」考え方が無いんですか?
0785デフォルトの名無しさん2009/12/12(土) 18:58:19
>>784
C++ には無いが、 C++ プログラマにはある。
07867842009/12/12(土) 19:07:14
>>785
なるほど、適切な解答ありがとうございます
0787デフォルトの名無しさん2009/12/13(日) 01:38:01
int *p=new int[n]ってやってn+1個目が欲しくなったらどうすればいいの?
0788デフォルトの名無しさん2009/12/13(日) 01:40:31
deleteしてnewしなおす
0789デフォルトの名無しさん2009/12/13(日) 01:41:25
やっぱりいままでのデータをどっかに格納して交換しかないか・・・
0790デフォルトの名無しさん2009/12/13(日) 01:47:17
STL使えばいいじゃない
0791デフォルトの名無しさん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 []とかは自分で考えろ
0792デフォルトの名無しさん2009/12/13(日) 02:58:18
>>787
ああCのrealloc()みたいのがないって話か

newはコンストラクタ呼び出しを伴い、またオブジェクトのコピーは
コピーコンストラクタや代入演算子を呼び出すのでrealloc()に
相当する物は意味があまりないとして削られたんだな
0793デフォルトの名無しさん2009/12/13(日) 05:15:53
reallocなことやりたくて、new/deleteじゃなくてmalloc/free使ってることはよくあるよ
いろんなソフトである
0794デフォルトの名無しさん2009/12/13(日) 06:37:22
>>791
64K 128Kなど固定長ブロックを保持する方が無駄が少ない
0795デフォルトの名無しさん2009/12/13(日) 10:39:47
>>793
C++でもclassではなくPOD型を扱う時はmalloc/freeで十分
まあ俺はそういう場合でもnew/deleteで統一してるけどな
0796デフォルトの名無しさん2009/12/13(日) 10:41:06
C++では「staticなメソッド」と「普通の関数」のどちらも書く事ができますが、
作業用に使う時はどちらを使えばいいのですか?
0797デフォルトの名無しさん2009/12/13(日) 10:43:53
>>796
class間で共通したい作業ならstaticメソッド
そうでなければ普通の関数

別にどっちでもいいんだが、そういう風にかき分けると読む人に
意図が伝わりやすい
0798デフォルトの名無しさん2009/12/13(日) 10:50:20
あー悪い
どっちでも同じじゃないや
staticメソッドはprivate属性やprotected属性、const属性を
付ける事が出来るので、classに関連した操作はstaticメソッドで
やるべきだな
07997962009/12/13(日) 10:51:44
>>797
>class間で共通したい作業ならstaticメソッド
すいませんが、共通したいの意味がわかりません
0800デフォルトの名無しさん2009/12/13(日) 10:58:17
>>799
staticメソッドにはthisポインタが渡らないので、極端な話を言えば
インスタンスを一つも作らなくても使える

例えば

struct Test {
static void pirnt() { cout << "Hello" << endl; }
};

とやってインスタンスを作らず

Test::print();

とやれば呼び出せる

共通してやりたい作業とは、例えばインスタンスが今いくつ存在するかの
カウンタを入れたい時とか

カウント式のスマートポインタを作る場合に使えるね
0801デフォルトの名無しさん2009/12/13(日) 11:14:15
>>796
作業用がなんの作業かによるだろ
08027962009/12/13(日) 11:42:16
>>800
わかりました
ありがとうございます
0803デフォルトの名無しさん2009/12/13(日) 11:54:58
>>796
(1
private、protectedなメンバ変数/関数にアクセスせず、
一つのファイルでしか使わないなら

// xxxx.cpp
namespace {
  関数();
}

(2
private、protectedなメンバ変数/関数にアクセスせず、
外部に公開したいなら

普通の関数();

(3
private、protectedなメンバ変数/関数にアクセスして、
外部に非公開にしたいなら

class hoge {
private:
  非静的メンバ関数();
  静的メンバ関数(hoge&);
};
0804デフォルトの名無しさん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&);
};
0805デフォルトの名無しさん2009/12/13(日) 14:49:58
ttp://codepad.org/SObcsiok
#ifは小数の比較はできないのですか?
0806デフォルトの名無しさん2009/12/13(日) 17:59:14
クラステンプレートの部分特殊化はOKなのに
関数テンプレートの部分特殊化は禁じられている

この仕様はどうしてこうなのですか?
深い理由があってのことでしょうか?
0807デフォルトの名無しさん2009/12/13(日) 18:00:03
1ファイルに1クラスでコードを書いてるんですがcppの行数が1万行に達しました。クラスを分けずにどうやってファイルに分割して行数を減らしていったらいいですか。
0808デフォルトの名無しさん2009/12/13(日) 18:16:58
関数ごとにファイル分割
0809デフォルトの名無しさん2009/12/13(日) 20:32:22
クラス設計を見直すのをおすすめするが、
cppをincludeすると一応分割はできる。
C++にもパーシャルクラス欲しいよな。
0810デフォルトの名無しさん2009/12/13(日) 20:37:46
>>807
10000行ならよほど低スペックマシンじゃない限り許容範囲じゃね?
0811デフォルトの名無しさん2009/12/13(日) 20:40:59
クラスという手段がクラスにするという目的に変わってしまっているような
0812デフォルトの名無しさん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 == "○"){

処理実行;

}
}
}
0813デフォルトの名無しさん2009/12/13(日) 21:14:08
string s;
ifs >> s;
if (s == "○"){
0814デフォルトの名無しさん2009/12/13(日) 21:14:38
itoa
0815デフォルトの名無しさん2009/12/13(日) 21:15:57
何がしたいのか分からない
0816デフォルトの名無しさん2009/12/13(日) 21:17:09
>>810
人間のスペック的な問題だろ
てかそのクラスはでかすぎると思う
どんなクラスなんだろう
0817デフォルトの名無しさん2009/12/13(日) 21:18:18
class ManageEnemy
{
0818デフォルトの名無しさん2009/12/13(日) 21:21:35
class ManageEnemy
{
    :
  class Enemy00
  {
    :
  };
  class Enemy01
  {
    :
  };

  (インナークラスがたくさん)
};
敵の種類が多くなりすぎてcppの行数が一万行越えますた。。
設計的には悪くないと思っている。
0819デフォルトの名無しさん2009/12/13(日) 21:27:06
いいえ最低です
0820デフォルトの名無しさん2009/12/13(日) 21:30:39
どう考えてもおかしい
設計的には悪いてか思いつかない
0821デフォルトの名無しさん2009/12/13(日) 21:35:10
インナークラスを使うのが問答無用で悪いってこと?
別にこれでうまく動いてるんだが。
0822デフォルトの名無しさん2009/12/13(日) 21:36:52
期待している通りに動くことが「正しい」なら別にいいんじゃね?
非機能要件は無視するってことで。
0823デフォルトの名無しさん2009/12/13(日) 21:37:56
なんだ叩きたいだけのクズか。
0824デフォルトの名無しさん2009/12/13(日) 21:38:56
10000行もあるようなクラスはたいがいモノリシックで悪い設計。
・・・と、ものしりっくに書いてみた^^。
0825デフォルトの名無しさん2009/12/13(日) 21:40:48
対案を示さず叩くだけならバカでもできるよ
08268122009/12/13(日) 21:42:32
>> 815

つまり、"○"の部分にインデックス番号(i)が入ると、インデックスがiの列だけを取り出して処理を行いたい。
0827デフォルトの名無しさん2009/12/13(日) 21:45:17
(i)←まんこ
0828デフォルトの名無しさん2009/12/13(日) 21:45:46
誰が何の対案を求めてるの?
ファイル分割に関しては>>809が既に解決策を提示している
0829デフォルトの名無しさん2009/12/13(日) 21:47:09
C++にはJavaやC#にあるToStringメソッドや
VBのように自動で文字列⇔数値に変換する機能はありません。^^

boost::lexical_castを使いましょう。
localeにも対応する強力なライブラリです。
0830デフォルトの名無しさん2009/12/13(日) 21:49:55
設計的に悪いと言っているからもっと良い設計を知ってるんだろう
0831デフォルトの名無しさん2009/12/13(日) 21:51:07
>>826
いっぺんまるごと読んでstringの配列に行を保存すれば?
0832デフォルトの名無しさん2009/12/13(日) 21:57:14
>>819
>>820
お手本の設計教えてくださいよ。
0833デフォルトの名無しさん2009/12/13(日) 21:58:59
>>828
「○○が対案を求めてる」なんて誰も言ってないと思うが。
何につっかかってるの?
0834デフォルトの名無しさん2009/12/13(日) 21:59:24
>>832
ファクトリ使えよクズ
0835デフォルトの名無しさん2009/12/13(日) 22:03:14
仕様も分からないのにお手本教えてくれとか、
冗談で言ってるんだよね?
設計が悪いとかってのはファイル分割が
出来てない時点で...
0836デフォルトの名無しさん2009/12/13(日) 22:06:15
行数が多い=設計が悪い、だろうか
0837デフォルトの名無しさん2009/12/13(日) 22:08:12
一つの指標だわな
0838デフォルトの名無しさん2009/12/13(日) 22:40:31
>>835
思わせぶりなことしか書けない無能なら
いちいち出てこなくていいのに。
0839デフォルトの名無しさん2009/12/13(日) 22:41:26
>>838
はあ?おまえがでてくるな
0840デフォルトの名無しさん2009/12/13(日) 22:43:34
>>838
仕様とお前のコード晒せよ
ボロクソにこき下ろしたあとにお手本見せてやるよ
0841デフォルトの名無しさん2009/12/13(日) 22:49:03
仕様とコード見ないとお手本見せられないくせに何で設計が悪いと判断できるの?
08428062009/12/13(日) 22:53:35
私の質問にお答えくださる方はいらっしゃいませんでしょうか?
0843デフォルトの名無しさん2009/12/13(日) 22:54:06
インナークラスは宣言だけにすればいいじゃないか
問題は他にも山積みなんだろうけど
0844デフォルトの名無しさん2009/12/13(日) 22:55:29
>>842
オーバーロードとごっちゃになるし、オーバーロードで事足りるからでは
0845デフォルトの名無しさん2009/12/13(日) 22:56:58
オーバーロードとの衝突を理由にするならデフォルト引数も禁じられるべきだが
0846デフォルトの名無しさん2009/12/13(日) 23:00:56
部分特殊化が必要になるのはどういうとき?
0847デフォルトの名無しさん2009/12/13(日) 23:05:28
改行減らせばいいだけでは?
小学生でもわかることなのに
0848デフォルトの名無しさん2009/12/13(日) 23:08:49
2chにぶっ放してもいい情報少ないからな・・・
0849デフォルトの名無しさん2009/12/13(日) 23:10:37
>>847
小学生でも?ほう・・・
0850デフォルトの名無しさん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) {}
0851デフォルトの名無しさん2009/12/13(日) 23:17:05
>>839
馬鹿でも食い下がれるトコでだけ頑張らなくていいですよ、無能さん。
0852デフォルトの名無しさん2009/12/13(日) 23:18:06
>>840
じゃあ俺はお前の稚拙な手本をこき下ろすわw
08538062009/12/13(日) 23:21:01
うろおぼえながら、例としては
 std::swapの特殊化をする時にテンプレートを使って特殊化したい
等が確かEffective C++でも挙げられていたと思います。
C++0xでできるようになればいいのですが。
期待できないですね。
0854デフォルトの名無しさん2009/12/13(日) 23:29:11
敵の種類が100種類超えるようなゲームをお前は作ったことがあるのかと。
作ったことないくせに一生懸命作ってる奴に文句だけ言って何のアドバイスもなしとかもう人間として本当の意味でレベルが低いというかこの手の卑しい人間は育ちが悪いとしかいいようがない。
0855デフォルトの名無しさん2009/12/13(日) 23:31:05
で、結局>>807は問題を解決できたのか?
0856デフォルトの名無しさん2009/12/13(日) 23:32:29
>>853
それは名前空間stdの禁止事項を緩和すればいい話です
部分特殊化が必要なのではなく、STLの設計が良くないということです

多分
0857デフォルトの名無しさん2009/12/13(日) 23:39:22
>>856
template < typename T >
std::swap < boost::shared_ptr< T > >{〜}

>STLの設計が良くないということです
もう一度言い直してくれ。
0858デフォルトの名無しさん2009/12/13(日) 23:45:46
0と-0の違いが分かりません。
どうにも2種類あるように思えてならないのですが。
このあたり扱いはどうなっているのでしょうか?
0859デフォルトの名無しさん2009/12/13(日) 23:52:23
1の補数?
0860デフォルトの名無しさん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"
0861デフォルトの名無しさん2009/12/14(月) 00:00:42
>>858
浮動小数点で仮数部と指数部が0で符号ビットが1のときじゃなかったっけ?<-0
0862デフォルトの名無しさん2009/12/14(月) 00:08:14
>>857
template<typename T>
std::swap(boost::shared_ptr<T>&,boost::shared_ptr<T>&){}

は文法違反ですか?
0863デフォルトの名無しさん2009/12/14(月) 00:27:26
そもそもswapなんてswap対象のクラスと同じ名前空間に定義するものでしょ。
0864デフォルトの名無しさん2009/12/14(月) 00:34:52
>>863
それだと std::swap が隠れちゃって不便なときがあるんじゃ
0865デフォルトの名無しさん2009/12/14(月) 00:36:07
質問を投げっぱなしの奴ってどんな育て方されてんだろ
0866デフォルトの名無しさん2009/12/14(月) 00:40:27
早寝早起きを教えられたんだろう
0867デフォルトの名無しさん2009/12/14(月) 00:48:30
一生懸命プログラム作ってる奴もいれば、質問放り出して寝る奴もいる。
そんなもんだ。
0868デフォルトの名無しさん2009/12/14(月) 00:57:02
少しは心を広くしようぜ
0869デフォルトの名無しさん2009/12/14(月) 01:03:08
>>868
そうだな。>>854にも言ってやれよ。
0870デフォルトの名無しさん2009/12/14(月) 01:31:31
初めから全員に言ってるんじゃないの?
特に「狭い」奴が>>869みたいなヒスっぽいレス返すのも想定の上で。
0871デフォルトの名無しさん2009/12/14(月) 01:50:37
STLのvectorでintの配列を作って、5番目の要素を他の値に変えるのは
どうすればいい?
0872デフォルトの名無しさん2009/12/14(月) 01:53:31
v[4] = x;
0873デフォルトの名無しさん2009/12/14(月) 01:57:36
[4]とか[]を使ったやり方は推奨されないって記述をどっかで見かけたけど、
気にすることはない?
0874デフォルトの名無しさん2009/12/14(月) 02:03:36
その推奨してない奴は誰だ

一応 v.at(4)=x; という書き方もあって、こっちは要素が足りないと例外投げる
(v[4]は未定義動作になる)
ただし恐ろしく遅いので存在が保証されてれば[]を使うべき

という話を誤解したか歪めて伝えてるバカがいるんだな
0875デフォルトの名無しさん2009/12/14(月) 02:05:23
判り易い説明ありがとう。これで気兼ねなく使える
08768582009/12/14(月) 06:59:40
>>859
>>861
そして-0と0は同一なのですね。
ありがとうございます。
08778762009/12/14(月) 07:01:07
×同一
○等価
0878デフォルトの名無しさん2009/12/14(月) 08:33:39
同一協会
等価学会
0879デフォルトの名無しさん2009/12/14(月) 15:56:10
で?
0880デフォルトの名無しさん2009/12/14(月) 16:15:15
>>874
横書きの日本文に「,.」を用いるのは朝鮮人だよ。日本語は横書きでも「、。」が正しい。
韓国語では、縦書き文書では「、」が用いられ、横書き文書では「,」が用いられる。
この用い方は統一されているため、縦書き文書に「,」を、横書き文書に「、」を用いるのは誤り。
だから日本語で書くときもカンマピリオドの癖が出るんだろうね。
0881デフォルトの名無しさん2009/12/14(月) 16:18:38
>>880 のような無知蒙昧の輩はさっさと死ねばいいのに。
0882デフォルトの名無しさん2009/12/14(月) 16:21:48
バカは放置するとして
なんで技術系誌や論文ではカンマとピリオドを使うんだろうな?
カンマはともかく, ピリオドは見づらいわ.
08838822009/12/14(月) 16:27:25
http://www5d.biglobe.ne.jp/~Jusl/Bunsyo/BunSakusei.html
これが元か。
ピリオドを使う奴はバカと思うことにした。

スレ違い失礼
0884デフォルトの名無しさん2009/12/14(月) 18:53:49
>>880
お前、教養のある他の人様に見てもらう
公式文書とか書いたことないだろ。

・・・ま、お前のレベルでは必要のないことだから
気にしなくて良いよ。
0885デフォルトの名無しさん2009/12/14(月) 18:56:21
>>884
えっ・・・
08868612009/12/14(月) 19:07:05
>>876-877
規格的な話は分からないのだが
+0 0 -0 としたときに
+0 は“表現できる絶対値が最小の値”と0の間の正の値。
-0 は“表現できる絶対値が最小の値”と0の間の負の値。
とりあえずこっちの環境(C++)では等価として扱われているけどすべての言語体系で等価であるとは限らないから注意したほうがいいと思う
C++の規格としてどうかは詳しい人に聞いておくれ
0887デフォルトの名無しさん2009/12/14(月) 19:13:36
定数 0 に正負の単項演算子が適用されるだけじゃないの?
0888デフォルトの名無しさん2009/12/14(月) 19:59:50
浮動小数点数の規格はC++に限らないような
ってか0とepsの間なんてあったっけ
0889デフォルトの名無しさん2009/12/14(月) 20:18:01
共有ライブラリの中で例外が起きたときの catch の仕方を終えてください。
ライブラリの中で try - catch しても、呼び出し側で try - catch しても
捕捉できないのですがそういうものですか?
0890デフォルトの名無しさん2009/12/14(月) 20:32:11
ライブラリ内で例外を処理して処置をプログラマーに委ねない設計なら、そういうものだろう。
0891デフォルトの名無しさん2009/12/14(月) 20:36:45
そういう意味ではなく。
自分で作ったライブラリで起きた例外がどうやっても catch できないのですが
どうやって catch すればいいですか、という意味です。
0892デフォルトの名無しさん2009/12/14(月) 20:37:49
【FF13はライトニング死亡END】
召喚獣は6体しか使えないは嘘。隠し含めて12体
セラがルシになってクリスタルになるまでは一本道
中盤で訪れるエデンにファルシがいて、ちょっとしたクライマックスになる。
終盤で過去のエデンに行った時にルシになる前のライトニングがいて、セラは実の妹ではなく記憶がファルシに植え付けられていたことを知る。
記憶を取り戻してからは、オーディンの姿やアビリティが変化する。
ラ ス ダ ンはコクーンシティ。機械と融合したファルシの暴走と司教の陰謀を止めるのが最終目標。
ラ  ス ボ  スは司教エスラクゥス・マター。3回変身して最後はデスピサロみたいになる。
EDラストは3年後に仲間がみんな集まって再会。墓地で誰かの墓参りかと思ったら、ライトニングの墓。
墓石に本名のセラフィナ・ラ・マターと刻まれているのが映ってジエンド。
0893デフォルトの名無しさん2009/12/14(月) 21:15:39
C++の好きなところは西部の風を感じられるところ。
荒削り。だが、それが良い。
風を捕まえろ。
0894デフォルトの名無しさん2009/12/14(月) 22:41:24
>>886
ありがとうございます。
0895デフォルトの名無しさん2009/12/15(火) 01:12:41
>>889
ライブラリじゃなければ補足できたものがライブラリにまとめたらできなくなったってこと?
環境とかコードとか出さないと話にならない気がする。
0896デフォルトの名無しさん2009/12/15(火) 02:07:21
>>892
ホント?
本体ごと買う為の動機をありがとう^^
0897デフォルトの名無しさん2009/12/15(火) 13:01:00
すみません、
class templatesのテンプ引数を<int T>のようにやって
Tの数ごとに特殊かして実装のみ変えた別バージョンクラスを作ろうとおもっているのですが、
このやりかたは本に乗ってないので何かいけない理由とかあるんですか?
あと、Tをテンプレート引数にしたら実行時にメモリーを多く消費したりしませんよね?
0898デフォルトの名無しさん2009/12/15(火) 13:11:59
ない
何の本か知らないが全部の事柄をいちいち説明してたらキリがないから独断と偏見で不要と思われた部分を端折ったのでは
コードが増えるぶんのメモリは消費するけどそれ以上に何か消費したりはしない
0899デフォルトの名無しさん2009/12/15(火) 13:21:20
コードはコンパイルタイムだから増えないんじゃないんですか?
0900デフォルトの名無しさん2009/12/15(火) 13:22:51
コードを実行するためには、そのコードをメモリに読み込む必要がある
0901デフォルトの名無しさん2009/12/15(火) 13:26:07
そうじゃなくてテンプレート引数のintのことですよ。
0902デフォルトの名無しさん2009/12/15(火) 13:44:02
テンプレート展開によるコードサイズの増加は、場合によっては無視できないくらいになることもある
コードサイズが増えれば、実行時にその増えたコードをロードするためのメモリ領域が必要になる
テンプレートの規模にもよるし実装方法にもよるし使い方にもよるけれど
いまどき数MB増えたくらいじゃびくともせんよって人もいれば、1KBでも削りたいって人もいるかもしれない
俺は幸い気にしないで済んでる気楽な身だが、あなたがどうなのかは俺にはわからないので
0903デフォルトの名無しさん2009/12/15(火) 15:36:14
std::strstream(<strstream>)をどうしても使いたいのですが、
いまどき古すぎてネットでも余り書く方がいないようで、なかなか良い資料が見つかりません。
どうか参考となるサイトを教えて下さい。
0904デフォルトの名無しさん2009/12/15(火) 15:56:40
>>900
だがTEXTセクションがROMに配置されるようになっていたらどうかな?
0905デフォルトの名無しさん2009/12/15(火) 16:19:14
>>904
ROMをいっぱい使うだけじゃね?
お前の中ではROMはメモリに含まれないの?
0906デフォルトの名無しさん2009/12/15(火) 16:30:48
含まれないね
0907デフォルトの名無しさん2009/12/15(火) 17:33:06
ワラタ
0908デフォルトの名無しさん2009/12/15(火) 17:54:40
>>906
ふーん。
0909デフォルトの名無しさん2009/12/15(火) 17:56:10
どうでも良いことで残り少ないこのスレを埋めるな。
0910デフォルトの名無しさん2009/12/15(火) 18:01:44
ですねえ。
0911デフォルトの名無しさん2009/12/15(火) 18:20:37
少なくともROMに読み込むという表現は使わないなぁ
0912デフォルトの名無しさん2009/12/15(火) 18:29:02
ROMに書き込む前にメモリに読み込まなくてはいけません。
0913デフォルトの名無しさん2009/12/15(火) 19:02:50
なるほどそりゃメモリ消費量も気になるところだな
っておい
0914デフォルトの名無しさん2009/12/15(火) 19:44:25
ありゃ〜
0915デフォルトの名無しさん2009/12/15(火) 19:50:09
C**とかC//はないの?
0916デフォルトの名無しさん2009/12/15(火) 19:51:32
C** 動的C言語
C// C言語コメント
0917デフォルトの名無しさん2009/12/15(火) 20:01:20
ttp://ja.wikipedia.org/wiki/C*-%E7%92%B0
0918デフォルトの名無しさん2009/12/15(火) 20:39:02
http使ってアクセスにはどんな方法ありますか?
初心者でもとっつきやすいものができればよいのですが…
よろしくお願いします
0919デフォルトの名無しさん2009/12/15(火) 20:55:48
Boost.Asio
0920デフォルトの名無しさん2009/12/15(火) 21:02:08
HTTPより1個下の水準、ソケットを扱うという点で取っつきやすいかに疑問符がつく。
ソケット扱いたいんですという質問だったら自分もおすすめなんだけど。
0921デフォルトの名無しさん2009/12/15(火) 21:18:41
foo()関数の引数がn個とn+1個の2種類を作りたい場合、
オーバーロードを使わず、
デフォルト引数にしたほうが
いいのですか?
(どちらでも書けるとして。)
0922デフォルトの名無しさん2009/12/15(火) 21:22:26
iiyo
0923デフォルトの名無しさん2009/12/15(火) 21:24:03
>>922
え?
09249032009/12/15(火) 21:24:22
解決しました。
0925デフォルトの名無しさん2009/12/15(火) 22:16:48
using namespace std;

ってやるヤツって何なの?
0926デフォルトの名無しさん2009/12/15(火) 22:54:18
ヒミツの魔法
0927デフォルトの名無しさん2009/12/15(火) 22:58:01
あるあるww
09289252009/12/15(火) 23:00:49
ああごめん
俺が言いたいのは

std名前空間にせっかく入れてあるのにわざわざ引っ張り出してくる
プログラマって何なの!?

って言いたかったのだ。
0929デフォルトの名無しさん2009/12/15(火) 23:01:26
c++でメソッドにconstをつけると何が起きるのですか?
0930デフォルトの名無しさん2009/12/15(火) 23:02:23
>>929
何も起こらなくなる。
0931デフォルトの名無しさん2009/12/15(火) 23:02:35
>>929
ふふふ知りたいか?
0932デフォルトの名無しさん2009/12/15(火) 23:04:07
>>929
constなインスタンスからもメンバ関数を呼べるようになる。
代わりに、すべてのメンバ変数とthisがconst扱いになる。
09339292009/12/15(火) 23:09:24
>>932
つまり、定数(インスタンス)からメンバ関数を呼び出せるようになるという事ですか?
09349302009/12/15(火) 23:15:39
>>933
> 定数(インスタンス)
どういうこと?
何が言いたいのかわからん。
0935デフォルトの名無しさん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メンバ関数内からでも変更できる。何のためにあるのかは知らん。・
0936デフォルトの名無しさん2009/12/15(火) 23:36:57
参照をメンバに持ってるとデフォルトの代入が封印されるのは仕様ですか?
0937デフォルトの名無しさん2009/12/15(火) 23:38:56
struct test{
 int &a;
 test(int &a_) : a(a_){}
 test(const test &obj) : a(obj.a){} //コピーコンストラクタもちゃんと書こう!
};
09389292009/12/15(火) 23:41:53
>>935
大体は、constの機能がわかりました
しかし、constなインスタンスが、constなメンバ関数しか呼び出せないメリットがわかりません
0939デフォルトの名無しさん2009/12/15(火) 23:43:54
>>938
void bar(const sutorakuto &obj){
 obj.foo(); // fooが非constメンバ関数だとfooの実行によりobjが変更される可能性があり引数宣言const sutorakuto&の型が意味を成さない
}
09409292009/12/15(火) 23:53:04
>>939
constなインスタンスは完全に読み取り専用だから、
メンバ関数もconstにしなければならないということですね?
0941デフォルトの名無しさん2009/12/16(水) 00:48:15
>>928 マジレスすると「おまじない」とか「魔法」とか言って main の外で
使う入門書やら入門サイトが昔はやたら多かった.今は知らないけど.

そういった本で覚えた人は何も考えずに使うんだろう.

個人的にはこういうの↓も嫌いなんだけど

FILE *fp;
if ((fp = fopen("smpl.txt", "r")) == NULL){
  printf("file open error!!\n");
}
0942デフォルトの名無しさん2009/12/16(水) 00:49:44
>>916
残念ながら C++ における C とは Traditional C であって // は構文エラー
0943デフォルトの名無しさん2009/12/16(水) 02:14:29
質問があります。

Fedora12 + gcc-c++-4.4.2-7.fc12.i686 って環境です。
コンパイルを実行しようとすると、

make: 警告: ファイル `include/HadrontherapyRunAction.hh' の修正時刻が 2.7e+04 秒分未来の時刻です

こういう風にエラーが出て、ファイルの依存関係確認が延々とループします。
対処方法とかってあるのでしょうか?
識者の方、ご教示頂けたらと思います。よろしくお願いいたします。
0944デフォルトの名無しさん2009/12/16(水) 02:17:24
>>943
PC の時刻設定か、ファイルの修正時刻か、どちらかがおかしいので確認すべし。
対処方法は、まぁわかるだろ。
0945デフォルトの名無しさん2009/12/16(水) 02:25:07
>>944
2台のPCのうち1台で編集した物を、もう1台に移してコンパイルを行った場合に必ず出ます。
PCは2台ともネットで時刻同期を取っています。

今の所、怒られたファイルを開き、スペースやエンターを入れて保存を繰り返しているのですが、
いかんせん扱っているファイル数が多いので、延々とこの作業をやるのかと思うと
気が滅入ってしまうのです…。

タイムスタンプのチェックを外すオプションか何かがあるのかなと思って質問した次第ですが、
無いようですね…。
諦めてファイルを1個1個編集していきます。

確か前は、警告は出るがコンパイルは滞りなく行われてた気がするんですが…
変わったんでしょうかね。
0946デフォルトの名無しさん2009/12/16(水) 02:38:05
>>945
> PCは2台ともネットで時刻同期を取っています。
だからって時刻設定を確認しないの?何なの?バカなの?

あと、手動で対処するぐらいなら touch で一括対処しろよ。
0947デフォルトの名無しさん2009/12/16(水) 03:04:28
>>943-946
スレ違いどころか板違いだ。
Linux 板にでも行け。
0948デフォルトの名無しさん2009/12/16(水) 03:47:20
>>943 02:14:29
>>944 02:17:24
>>945 02:25:07
0949デフォルトの名無しさん2009/12/16(水) 04:56:01
自演って言いたそうだけど、自演する意味なくないか、内容的に?

文章書くの遅い人だと、>>945を7分半後に書き込めるわけない!
って考えるのかな。
0950デフォルトの名無しさん2009/12/16(水) 06:27:32
>>941
それは何が嫌なの?
NULLと比較してること?
0951デフォルトの名無しさん2009/12/16(水) 08:31:34
変数に戻り値を代入しつつその値を比較しているってところだろ
俺もあの書き方は嫌いだ
1行に複数の処理を記述すんじゃねーよと
fopenとNULLチェックで2行に分けろと
ついでに戻り値が0非0の判定の「!=0」も省略するんじゃねーよと
0952デフォルトの名無しさん2009/12/16(水) 08:43:07
C++ではインターフェイスが無いので、インターフェイスは使わずに多重継承だけするのですか?
0953デフォルトの名無しさん2009/12/16(水) 09:01:54
>>952
言語機能として直接「インターフェース」と呼ばれるものはありませんが、
純粋仮想関数を持ち実装を持たないクラスが他の言語の「インターフェース」と同様に使えます。
このようなクラスを「インターフェース(クラス)」と呼ぶこともあります。
0954デフォルトの名無しさん2009/12/16(水) 09:19:08
>>951
まあそう怒るなよ。昔は1画面20行くらいしか表示できなかったんだ。プリンターも遅かったしな。
こんな書き方でも慣れてしまうとなんとも思わない。

今はメリットないだろうけどね。
0955デフォルトの名無しさん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行目は逆に多すぎて、
思考の負荷分散的に醜く感じる。
0956デフォルトの名無しさん2009/12/16(水) 10:13:52
>>945
>2台のPCのうち1台で編集した物を、もう1台に移してコンパイルを行った場合に必ず出ます。
今どきgitもhgもsvnも使ってないの?
0957デフォルトの名無しさん2009/12/16(水) 10:20:45
次スレ建て時、テンプレ貼り忘れ注意。
0958デフォルトの名無しさん2009/12/16(水) 11:43:07
>>955
Cでその書き方ってできたっけ?
0959デフォルトの名無しさん2009/12/16(水) 11:44:49
>>958
特に問題ない。
関数の途中で変数を宣言したいならC99をつかえ。
ちなみにここはC++相談室。
0960デフォルトの名無しさん2009/12/16(水) 11:45:55
間違えた。宣言じゃなくて定義だった。
09619522009/12/16(水) 13:22:40
>>953
ありがとうございます
0962デフォルトの名無しさん2009/12/16(水) 14:36:01
Cで途中で変数宣言したかったらスコープ書いちゃうかな
途中から最後までとか微妙なスコープだと悩むけど
0963デフォルトの名無しさん2009/12/16(水) 14:42:25
2038年問題に対してどう対策すればよいでしょうか
0964デフォルトの名無しさん2009/12/16(水) 14:53:34
その頃にはCPUが全部64-128bitになってtime_tも64-128bitになってるだろうから
心配すんな
それよりもC言語そのものがないかもしれない
0965デフォルトの名無しさん2009/12/16(水) 14:55:26
29年後・・・想像もつかんな。その頃には年金も破綻してて生活保護とかで暮らしてるのかな
0966デフォルトの名無しさん2009/12/16(水) 15:00:45
年金が破綻したら生活保護も破綻するんじゃねーの
0967デフォルトの名無しさん2009/12/16(水) 15:00:53
CPUは余り関係ないな。
0968デフォルトの名無しさん2009/12/16(水) 15:05:55
年金と生活保護ではその資金源が異なるが
まぁその頃までには日本は無いかもしれんな
恐るべし小沢&鳩山ってとこかな
0969デフォルトの名無しさん2009/12/16(水) 15:07:27
>>964
その頃には〜とか言ってほったらかした結果がY2Kだよ!
0970デフォルトの名無しさん2009/12/16(水) 15:10:03
パソコンの日時いじって実際にどういう事が起きるかテストしてみればいいさ
0971デフォルトの名無しさん2009/12/16(水) 15:11:18
誰か2038年1月19日3時14分7秒の30秒前くらいにPCの日時設定して試してみて。
0972デフォルトの名無しさん2009/12/16(水) 15:13:21
やめておけ爆発して焼け野原だぞ
俺の友達はそれやって死んだ
0973デフォルトの名無しさん2009/12/16(水) 15:13:52
先日 random() という関数を見かけました(多分自作でない)。
rand()ならお馴染みですが、random()は初めてです。
何が違うのでしょうか?
0974デフォルトの名無しさん2009/12/16(水) 15:16:17
Ramdomクラスとかじゃなくて関数?残念ながら俺は知らん
0975デフォルトの名無しさん2009/12/16(水) 15:17:35
その正体は関数オブジェクトに7777ギタン賭ける
0976デフォルトの名無しさん2009/12/16(水) 15:18:49
>>971
こういうのをあちこちのスレにコピペしまくったらどういう事態が生じる?
0977デフォルトの名無しさん2009/12/16(水) 15:21:20
ここ3〜4年の間に発売されたPCなら2038年問題は対策されてるから大丈夫
0978デフォルトの名無しさん2009/12/16(水) 15:25:43
2000年製PCが現役稼動中だぜ・・・
0979デフォルトの名無しさん2009/12/16(水) 15:31:53
>>978
2038年1月19日3時14分7秒の30秒前に設定して30秒後どうなるか詳しく報告してくれ。
0980デフォルトの名無しさん2009/12/16(水) 15:34:07
>>978
たぶん大丈夫だと思うから設定して試してみて。お願い
0981デフォルトの名無しさん2009/12/16(水) 15:40:54
>>973
rand() の質が悪かった昔、random() が作られた。
でも今は同じなので、標準Cで規定された rand() を使うよろし。
09829782009/12/16(水) 15:43:58
>>979-980
別になんともなかったよ。いろんなソフト起動してみたけどどれも正常だった。よかったね
09839732009/12/16(水) 17:25:35
>>974
>>981
ありがとうございます。
0984デフォルトの名無しさん2009/12/16(水) 17:50:00
>>982
俺も試してみたけどなんともなかった
2038年問題なんてなんで騒いでるかワカンネ
0985デフォルトの名無しさん2009/12/16(水) 19:42:09
コピーコンストラクタの説明で、メンバ変数にポインタを使っている解説が少ないのですが
メンバ変数にポインタを使う事は推奨されていないのでしょうか?

private:
int hoge;
public:
Test(const Test& t) { t.hoge; }
また、t.hogeは何故シンタックスエラーにならないのか教えてください
0986デフォルトの名無しさん2009/12/16(水) 19:43:19
業務系のアプリなんて怖くてガクブルだろうな
C系で業務系アプリって関わったこと無いから
実在すんのかしらんけど。
0987デフォルトの名無しさん2009/12/16(水) 19:53:57
>>985
解説が面倒いからじゃないか
その必要があれば、いくらでも使っていいよ

C/C++では式は何でもセミコロンを付ければ式文になる
1;
とか
0;
とか
2 + 3;
とかも意味がないだけで構文的には問題ない
0988デフォルトの名無しさん2009/12/16(水) 20:19:36
>>987
thx
0989デフォルトの名無しさん2009/12/16(水) 20:41:58
>>987
> t.hogeは何故シンタックスエラーにならないのか教えてください
おれはここの部分の意図が理解できなかったのだが、
良く察したな。
さては魔女だな。
0990デフォルトの名無しさん2009/12/16(水) 21:07:08
>>985
コピコンは参照と決まっているだけ
つーか、そんくらいやってみればわかるだろ
理由は禿本に書いてあるし

逆に「少ない」って表現が気になる
0991デフォルトの名無しさん2009/12/16(水) 21:56:53
一応確認ですが、
string s("str");
hoge(str);
と
hoge(string("str"));は同じですよね?
0992デフォルトの名無しさん2009/12/16(水) 22:00:16
違います
0993デフォルトの名無しさん2009/12/16(水) 22:12:42
2行目でコンパイルエラーだな
09949912009/12/16(水) 22:15:03
間違えました
hoge(str)じゃなくて、hoge(s)ですね

>>992
why ?
0995デフォルトの名無しさん2009/12/16(水) 22:24:05
>>992
そうなの?
0996デフォルトの名無しさん2009/12/16(水) 22:34:53
>>992
warum?
0997デフォルトの名無しさん2009/12/16(水) 22:44:39
おおかた>992は>993の理由で違いますと言ったんだろうよ。

>994-996
しつけぇw
どんだけ陰険なんだ低脳のくせに。
0998デフォルトの名無しさん2009/12/16(水) 22:45:28
1000なら次スレ廃止
0999デフォルトの名無しさん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||||||||”
      """"""""            '''""""
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。