C++相談室 part75
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/11/28(土) 16:27:38ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part74
http://pc12.2ch.net/test/read.cgi/tech/1256397778/
0002デフォルトの名無しさん
2009/11/28(土) 16:33:060003デフォルトの名無しさん
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:27amazon.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:20Effective 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[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:08ttp://codepad.org/
長いソースを貼るときはここへ!
0009デフォルトの名無しさん
2009/11/28(土) 16:44:12#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:000011デフォルトの名無しさん
2009/11/28(土) 17:01:08このコードにて
20行目と21行目が、どうしてClassDと表示されないのですか?
0012デフォルトの名無しさん
2009/11/28(土) 17:15:32関係ないだろうけど面白かった。
////////////////////////////////////////////////////////
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二択条件演算子
っていうんだね。
0015デフォルトの名無しさん
2009/11/28(土) 17:24:11::operator newってbad_allocをthrowしないの?知らなかったじぇ
001611
2009/11/28(土) 17:25:12ttp://codepad.org/869c7q1b
こうしてみたらClassYが多くなりました。
現在JIS規格を眺めておりますが
複雑な事が書かれています。
0017デフォルトの名無しさん
2009/11/28(土) 17:28:23STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
001811
2009/11/28(土) 17:40:21両方を暗黙の型変換可能にするとコンパイルエラーになるようですね。
0019デフォルトの名無しさん
2009/11/28(土) 18:19:38VC++, Digital Mars C++でコンパイルエラーとなります。
g++. bcc 5.5.1, Comeau C++ではコンパイルエラーとはなりません。
ttp://codepad.org/VNafKGhX
VC++, Digital Mars C++のバグと言うことでしょうか?
0020デフォルトの名無しさん
2009/11/28(土) 18:36:400021デフォルトの名無しさん
2009/11/28(土) 18:51:110022デフォルトの名無しさん
2009/11/28(土) 18:51:20( ´∀`)
( )
| | |
(__)_)
0023デフォルトの名無しさん
2009/11/28(土) 18:52:43enum SOME_IDX
{
0024デフォルトの名無しさん
2009/11/28(土) 18:54:14enum SOME_IDX
{
AAA,
BBB,
(続く)
ZZZ,
SOME_IDX_NUM
};
このようになっていて、
for(SOME_IDX idx=0; idx<SOME_IDX_NUM; idx++){
0025デフォルトの名無しさん
2009/11/28(土) 18:54:59enum 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:57func(idx);
}
0027デフォルトの名無しさん
2009/11/28(土) 18:58:000028デフォルトの名無しさん
2009/11/28(土) 18:58:400029デフォルトの名無しさん
2009/11/28(土) 18:59:480030デフォルトの名無しさん
2009/11/28(土) 19:02:53func(idx);
}
0031デフォルトの名無しさん
2009/11/28(土) 19:04:200032デフォルトの名無しさん
2009/11/28(土) 19:05:290033デフォルトの名無しさん
2009/11/28(土) 19:07:040034デフォルトの名無しさん
2009/11/28(土) 19:08:180035デフォルトの名無しさん
2009/11/28(土) 19:08:210036デフォルトの名無しさん
2009/11/28(土) 19:09:090037デフォルトの名無しさん
2009/11/28(土) 19:11:100038デフォルトの名無しさん
2009/11/28(土) 19:22:26003919
2009/11/28(土) 19:22:35VC++で、どうすればこれを回避できますでしょうか?
0040デフォルトの名無しさん
2009/11/28(土) 19:24:42C++0xはまだ出来上がってないから、当然まだ取り入れられることもないだろ。
0041デフォルトの名無しさん
2009/11/28(土) 19:28:480042デフォルトの名無しさん
2009/11/28(土) 19:35:26return flag ? MyString(hoge.value) : (flag ? hoge : MyString(hoge.value));と書くのはだめなの?
004319
2009/11/28(土) 19:37:42ありがとうございます。
なるほどcastで解決するのですね。
0044デフォルトの名無しさん
2009/11/28(土) 19:47:29まじめな質問してごめんなさい(>_<)
0045デフォルトの名無しさん
2009/11/28(土) 19:49:161000なら3年後までにC++衰退
0046デフォルトの名無しさん
2009/11/28(土) 20:05:190047デフォルトの名無しさん
2009/11/28(土) 20:10:020048デフォルトの名無しさん
2009/11/28(土) 20:13:340049デフォルトの名無しさん
2009/11/28(土) 20:28:030050デフォルトの名無しさん
2009/11/28(土) 20:54:13それでは皆さん、何時もの様にクダラナイ質問をどうぞ(>_<)
0051デフォルトの名無しさん
2009/11/28(土) 21:03:45無視する可能性はある
C++98/2003で作られたプログラムが多いからだ
0052デフォルトの名無しさん
2009/11/28(土) 21:18:36ありがとうございました!! と小文字の!を2度使うやつも
0053デフォルトの名無しさん
2009/11/28(土) 21:20:55C++0xに関してはVC++とGCCはサポートするのが既定路線
0054デフォルトの名無しさん
2009/11/28(土) 22:57:13これですが、手元で自分で
g++ ソースファイル.cpp -O0
として実行しても
ClassY()デフォルトコンストラクタ
ClassX()デフォルトコンストラクタ
/////////以下foo()/////////
ClassX()デフォルトコンストラクタ
ClassY(const ClassX&)コンストラクタ
と表示されるだけで、両方とも最後のコピーコンストラクタが
実行されません。
この違いはどこから来ているのでしょうか?
また、codepadと手元のg++はどちらが正しい挙動ですか?
0055デフォルトの名無しさん
2009/11/28(土) 23:06:31そのコピーコンストラクタの呼び出しは省略可能。
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ありがとうございます。
> 一定の条件が満たされれば
> たとえコピーコンストラクタやデストラクタが副作用を持っていたとしても
> 省略可能
なんですね。
ttp://codepad.org/b2yZXUQi
このように15行目だけstatic_castを付けて変えたのですが
これも同様の理由で省略されたと考えられるのですね。
ありがとうございました。
0057デフォルトの名無しさん
2009/11/29(日) 00:39:46typedef boost::shard_ptr< std::vector<T> > PtrVector<T>;//実際はエラーになる
PtrVector<std::string> ptrVecString;
PtrVector<CHoge> ptrVecHoge;
....
..
とういふうに使いたいんだけど,どのように書けば良いですか?
0058デフォルトの名無しさん
2009/11/29(日) 00:46:13struct PtrVector {
typedef boost::shared_ptr<vector<T> > type;
};
PtrVector<std::string>::type ptrVecString;
0059デフォルトの名無しさん
2009/11/29(日) 00:48:100061デフォルトの名無しさん
2009/11/29(日) 04:50:29ISO のほうでは "Conditional operator" で C も C++ もいっしょなのに、
なんで JIS C++ だけ余計なもんが付いてるのかねぇ?
0062デフォルトの名無しさん
2009/11/29(日) 04:58:220063デフォルトの名無しさん
2009/11/29(日) 05:04:490064デフォルトの名無しさん
2009/11/29(日) 05:08:160065デフォルトの名無しさん
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�@
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あとは全部にClone()実装した具象クラスの配列とか。
ただし、そこまでやる価値があるかどうかは俺は知らん。
0068デフォルトの名無しさん
2009/11/29(日) 08:09:41Hoge* operator[](type_t x){
switch(x)
0069デフォルトの名無しさん
2009/11/29(日) 10:07:42何が原因でしょうか?
しょうがないのでプロジェクトのプロパティから追加もしてみましたがリンカでエラーでした
0070デフォルトの名無しさん
2009/11/29(日) 10:26:27前スレにこんなん書いてくれてた人いたよ
ttp://codepad.org/6AIfsQCH
0071デフォルトの名無しさん
2009/11/29(日) 10:27:48ダイナミックリンクだろうがなんだろうが
テンプレートライブラリであるstd::vectorを使って、
ファイルサイズが増えないのは効果あるんじゃないの?
0072デフォルトの名無しさん
2009/11/29(日) 11:13:41hoge_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のインスタンスを基底クラスに代入するときは基底クラステンプレートのポインターの宣言時に
<>はいらないですか?
0074デフォルトの名無しさん
2009/11/29(日) 13:49:03ttp://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でもできる
ようにしたいのですが、良い方法が思いつきません。
よろしくお願い申し上げます。
007573
2009/11/29(日) 13:53:09と言うことはポインターや参照の宣言でも<>いらないってことですか?
0076デフォルトの名無しさん
2009/11/29(日) 13:54:220079デフォルトの名無しさん
2009/11/29(日) 14:58:49試せばわかるだろカス
0080デフォルトの名無しさん
2009/11/29(日) 15:04:17試したけどわかりませんでした。
よろしくお願いします。
0081デフォルトの名無しさん
2009/11/29(日) 15:04:330082デフォルトの名無しさん
2009/11/29(日) 15:07:200083デフォルトの名無しさん
2009/11/29(日) 15:29:27質問している方も分かってないんじゃね?
分かっているというなら
” ソースみせろ ”
0084デフォルトの名無しさん
2009/11/29(日) 15:38:29これはテンプレート初心者が良く疑問に思う良い質問ですね。
私も疑問に思っていて未だに試す機会が無いので
こういった質問してくれるととても助かります。
0085デフォルトの名無しさん
2009/11/29(日) 15:45:19本人乙、としか言いようがない。
0086デフォルトの名無しさん
2009/11/29(日) 15:49:19君は超能力者かいな!!
0087デフォルトの名無しさん
2009/11/29(日) 15:51:01質問してくれただけで助かることなんて無いし、あったとしてもわざわざそれだけを
書き込む意味がない。
「良く疑問に思う良い質問」だと言うのならよくある回答をしてあげればいいのに。
0088デフォルトの名無しさん
2009/11/29(日) 15:51:060089デフォルトの名無しさん
2009/11/29(日) 15:52:13コナンの見すぎwww
0090デフォルトの名無しさん
2009/11/29(日) 15:53:18だから構うなって言ったんだよ
0091デフォルトの名無しさん
2009/11/29(日) 15:55:000093デフォルトの名無しさん
2009/11/29(日) 16:03:550094デフォルトの名無しさん
2009/11/29(日) 16:04:59人工無能フイタw
たぶん、俺が思うに
>>73と>>84は別人で、
ただバカにする意図を込めて>>84のレスをしたのではないかと。
0095デフォルトの名無しさん
2009/11/29(日) 16:21:39の違いが分かりません。
教えてください!or分かるサイトを教えてください!
0096デフォルトの名無しさん
2009/11/29(日) 16:24:340097デフォルトの名無しさん
2009/11/29(日) 16:29:320098デフォルトの名無しさん
2009/11/29(日) 16:37:22死ねばいいのに
0099デフォルトの名無しさん
2009/11/29(日) 16:39:17ひどい言われようだな。
0100デフォルトの名無しさん
2009/11/29(日) 16:47:55え?頭おかしいんじゃない?w
0101デフォルトの名無しさん
2009/11/29(日) 17:07:55助かります!
0102デフォルトの名無しさん
2009/11/29(日) 17:18:29ttp://www.cplusplus.com/reference/iostream/istringstream/
ttp://www.cplusplus.com/reference/iostream/ostringstream/
覚える必要があるなら全部覚えればいいさ
010474
2009/11/29(日) 18:42:44std::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を捨てるのが一番な気がしますが、
どうかよろしくお願いします。
010574
2009/11/29(日) 18:48:54失礼しました。
0106デフォルトの名無しさん
2009/11/29(日) 18:55:18文の左に番号を表示する方法はありますか?
ビルドするたびにエラーの場所を上から数えるのつらいです
0107デフォルトの名無しさん
2009/11/29(日) 18:58:25F8 キー押せ
0108デフォルトの名無しさん
2009/11/29(日) 18:59:060109106
2009/11/29(日) 19:01:190110デフォルトの名無しさん
2009/11/29(日) 19:01:28行番号指定して OK ボタンを押す
0111デフォルトの名無しさん
2009/11/29(日) 19:02:14解決したんなら必要ないか
0112デフォルトの名無しさん
2009/11/29(日) 19:11:03boostとか大かがりなのはいやです
追加が最小のやり方かいいです
0113デフォルトの名無しさん
2009/11/29(日) 19:22:44いやboostにしとけ。
> boostとか大かがりなのはいやです
十分使われて検証されているヤツがいいに貴マットル。
0114デフォルトの名無しさん
2009/11/29(日) 19:34:13#ifdef
をつかって2通り書け。
それが
> 追加が最小のやり方
だ。
0115デフォルトの名無しさん
2009/11/29(日) 19:36:390116デフォルトの名無しさん
2009/11/29(日) 19:37:230117デフォルトの名無しさん
2009/11/29(日) 19:38:16環境依存のものは
↓で聞いたほうがいい回答得られるんじゃない?
【初心者歓迎】C/C++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
0118113
2009/11/29(日) 19:42:45わからない。
俺なんて自分や同僚のコードより絶対boostを信頼して
使うけどなぁ。
0120デフォルトの名無しさん
2009/11/29(日) 20:07:37ttp://codepad.org/
012172
2009/11/29(日) 20:12:27http://codepad.org/HuDbGicA
だと、1と3が暗黙の型変換で、2が明示的な型変換でしょうか?
012272
2009/11/29(日) 20:13:51hoge_tの該当するコンストラクタにexplicitが付いていると
できなくなるのが「1と3」ではなく「3だけ」という結果でした。
0123デフォルトの名無しさん
2009/11/29(日) 20:23:10自分だけで使うなら良いんですがソース配布して標準のコンパイラで
コンパイルできた方が良いんです
0124デフォルトの名無しさん
2009/11/29(日) 20:36:12環境に依存しないようにしたいんです 少なくともwinとlinuxで動作するのがいいいんです
0125114
2009/11/29(日) 20:40:58> 環境に依存しないようにしたいんです 少なくともwinとlinuxで動作するのがいいいんです
ちょ!
その一文が無茶。
ファイルやディレクトリの形式が違うことは知ってるだろ?
書け。自力で。それっきゃないだろ。
だいたいそうじゃないと
> ソース配布して
この時困ったことになるぞ?
0126デフォルトの名無しさん
2009/11/29(日) 20:43:060127デフォルトの名無しさん
2009/11/29(日) 21:01:23opendir()とFindFirstFile()を使い分けるくらいしか無いべさ
0128デフォルトの名無しさん
2009/11/29(日) 21:18:51dirent.h windows
でぐぐってきたやつぶち込んでやってみることにしました。
0129デフォルトの名無しさん
2009/11/29(日) 22:21:33ECC6.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:52ECC6.2.0(Embarcadero C++ Compiler)だった
013174
2009/11/29(日) 23:11:35ありがとうございます。
ECC6.2.0(Embarcadero C++ Compiler)は有償版でしょうか?
無償で公開されている中での一番新しい版はBCC5.5.1だと思っているのですが。
0132デフォルトの名無しさん
2009/11/30(月) 00:12:360133デフォルトの名無しさん
2009/11/30(月) 00:38:13ふつうに
g++ a.cpp b.cpp c.cpp
でよくね?
0134デフォルトの名無しさん
2009/11/30(月) 00:44:48レスの無駄になるので1レスで詳しく説明してください
0135デフォルトの名無しさん
2009/11/30(月) 00:53:310136デフォルトの名無しさん
2009/11/30(月) 01:00:570137デフォルトの名無しさん
2009/11/30(月) 01:53:34意図的にメモリリークなんて起こせるんですか?
0138デフォルトの名無しさん
2009/11/30(月) 02:01:040139デフォルトの名無しさん
2009/11/30(月) 02:05:53仮想メモリのある PC 環境ではメモリリークしたからってすぐに std::bad_alloc は出ない。
それっぽいところで自分で throw std::bad_alloc() すればいいよ。
0140デフォルトの名無しさん
2009/11/30(月) 02:16:03素早い回答ありがとうございます!早速試してみますね(・∀・)
0141デフォルトの名無しさん
2009/11/30(月) 07:07:40boostのはそこのところうまくやるようにできてる
正直追加ライブラリに関しては
「boost使うか自分で書け」
だよなぁ
次点はACEくらい?1回しか使ったことないけど
0142デフォルトの名無しさん
2009/11/30(月) 08:10:08環境にもよるけど、new char[(std::size_t)-1]のように、明らかに確保できなさそうなほど大きな値でnewするとbad_alloc飛んでくるよ。
0143デフォルトの名無しさん
2009/11/30(月) 10:02:25わかりました!!それも試してみますね(・∀・)
0144デフォルトの名無しさん
2009/11/30(月) 10:06:160145デフォルトの名無しさん
2009/11/30(月) 10:48:190146デフォルトの名無しさん
2009/11/30(月) 10:51:38winAPIに書き換えるだけで良いのですが。
0147デフォルトの名無しさん
2009/11/30(月) 10:54:02面倒です
セットがあれば楽なんですが
0148デフォルトの名無しさん
2009/11/30(月) 10:57:590149デフォルトの名無しさん
2009/11/30(月) 12:09:54mingw
それで足りなければcygwin
0150デフォルトの名無しさん
2009/11/30(月) 14:22:460151デフォルトの名無しさん
2009/11/30(月) 15:16:29クラス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:49newするしかないですか?
0153デフォルトの名無しさん
2009/11/30(月) 15:20:410154デフォルトの名無しさん
2009/11/30(月) 15:25:38ひどい話だ
0155デフォルトの名無しさん
2009/11/30(月) 15:56:000156デフォルトの名無しさん
2009/11/30(月) 16:23:510157デフォルトの名無しさん
2009/11/30(月) 16:49:470158デフォルトの名無しさん
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:220160デフォルトの名無しさん
2009/11/30(月) 17:10:32class Hoge
{
static const int BUF_SIZE = 100;
int buf[BUF_SIZE];
これがだめなコンパイラでは、回避策として>>158のenum。
0161デフォルトの名無しさん
2009/11/30(月) 17:18:590162デフォルトの名無しさん
2009/11/30(月) 17:21:520163デフォルトの名無しさん
2009/11/30(月) 17:39:52それenum hackというやつ
名前付いてるぐらいだから問題ないと思う
ただ>>160のいうやつが通るならそれがいい
0164158
2009/11/30(月) 18:21:51ありがとうございます。
>>160はコンパイル通りましたが、メモリをケチるならenumという感じですかね。
namespaceでもマクロ定義はダメみたいです。
enumがそれなりにベターならこれで解決とさせてもらいます。
0165デフォルトの名無しさん
2009/11/30(月) 18:40:110166デフォルトの名無しさん
2009/11/30(月) 19:01:50はあ?
0167デフォルトの名無しさん
2009/12/01(火) 01:13:47クラス定義内での初期値指定ができないこと以外はいっしょ。
0168デフォルトの名無しさん
2009/12/01(火) 03:32:07メモリをケチるならenum
そんなことないので>>160が通るならそれで。
0169デフォルトの名無しさん
2009/12/01(火) 10:48:54えっ
namespaceとdefine組み合わせるつもり?
本気で言ってるの?
0170デフォルトの名無しさん
2009/12/01(火) 15:54:08C++2008でテトリスを作ろうと思っています。
初心者なので、とりあえずソースコードをテキストの内容を一つずつ真似して
行こうと思ってるのですが、いきなりタイトルがsample.cとなっています。
この.cというのはどこにあるのでしょうか?
新規作成のプロジェクトからやるのでしょうか?
私はform.hと出てくるものしか知らないのですが…よろしくお願いします。
0171デフォルトの名無しさん
2009/12/01(火) 16:00:350172デフォルトの名無しさん
2009/12/01(火) 16:10:510173デフォルトの名無しさん
2009/12/01(火) 16:11:55使ってるコンパイラのスレにいきなさい
0174デフォルトの名無しさん
2009/12/01(火) 16:33:05でおk?
0175デフォルトの名無しさん
2009/12/01(火) 17:33:29C++で.NETか、
がんばれ
0176デフォルトの名無しさん
2009/12/01(火) 18:14:04無理。
C++がセルだとすると、
今のお前はヤムチャであるからして
全く話にもならない。
0177デフォルトの名無しさん
2009/12/01(火) 18:27:20ちょw
ヤムチャってこんな弱いのwww
0178デフォルトの名無しさん
2009/12/01(火) 18:42:40ヤムチャてw
0179デフォルトの名無しさん
2009/12/01(火) 18:43:260180デフォルトの名無しさん
2009/12/01(火) 18:54:01const char * const p = 〜;
って書く程度で死亡できる。
0181デフォルトの名無しさん
2009/12/01(火) 19:17:130182デフォルトの名無しさん
2009/12/01(火) 19:24:47この人の真似をしたらいいべさ
http://www.nicovideo.jp/watch/sm8517855
0183デフォルトの名無しさん
2009/12/01(火) 19:48:51int id;
...
};
struct HogeCollection {
public:
void add(const Hoge& hoge){...}
void remove(int id){...}
...
};
addとremoveは対になっているわけですが、引数の型が揃っていません。
こういうのってどう思いますか?気持ち悪い?
0184デフォルトの名無しさん
2009/12/01(火) 19:50:36addが戻り値としてidを返すといいんじゃね
0185デフォルトの名無しさん
2009/12/01(火) 20:00:08addを呼び出した時の情報(戻り値)で、removeが呼び出せれば整合性がとれているという事でしょうか。
しかし、addの引数に渡したhogeのメンバ変数idがそのまま返ってくるというのも冗長に感じるのですが、
そんなことはないんでしょうか?
0186デフォルトの名無しさん
2009/12/01(火) 20:18:35確かに冗長かもね。
今のままでも良いと思うよ。
気になるならSTLのvectorとか参考にしてみたら良いんじゃね。
0187デフォルトの名無しさん
2009/12/01(火) 20:29:00どうもです。
参考になりました。
0188デフォルトの名無しさん
2009/12/01(火) 20:48:15誰か検証してください・・・
0189デフォルトの名無しさん
2009/12/01(火) 21:17:22ファイルやディレクトリを操作する系のC++ライブラリで、
ヘッダをインクルードするだけで使えるものはありませんでしょうか?
0190デフォルトの名無しさん
2009/12/01(火) 21:46:590191デフォルトの名無しさん
2009/12/01(火) 22:05:43linuxにあわせるヘッダを用意してlinuxソースを書く。
0192189
2009/12/01(火) 22:27:400193デフォルトの名無しさん
2009/12/01(火) 22:41:00氏ね
0194デフォルトの名無しさん
2009/12/01(火) 22:42:19インストールがいるが。
Microsoft Windows Services for UNIX 3.5
POCO C++ Libraries.
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:340199デフォルトの名無しさん
2009/12/02(水) 01:02:03環境による。プログラムにもよる。自分で測れ。
0200デフォルトの名無しさん
2009/12/02(水) 03:34:15最終的にはwinAPIに変換するからわざわざC標準使う意味ないと
考えていたけど、最近は全てのCコンパイラで動いて、かつ速度低下がわずかを
目指してる。
0201デフォルトの名無しさん
2009/12/02(水) 11:03:44#ifdef LLONG_MAX
typedef long long MyInteger;
#else
typedef long MyInteger;
#endif
0202デフォルトの名無しさん
2009/12/02(水) 14:52:520203デフォルトの名無しさん
2009/12/02(水) 15:57:19x86で
0204デフォルトの名無しさん
2009/12/02(水) 15:58:120205デフォルトの名無しさん
2009/12/02(水) 17:12:27Windows なら 4 バイトだろうし
Solaris なら 8 バイトだろうし。
0206デフォルトの名無しさん
2009/12/02(水) 17:29:13C++0xから公式にlong long型が導入される予定だなんだよね。
LONGLONG_MAX
と
LLONG_MAX
ってどっちが公式なの?
0207デフォルトの名無しさん
2009/12/02(水) 17:32:160208デフォルトの名無しさん
2009/12/02(水) 17:46:45異なるヘッダ名に収録されている命令を、
コンパイル時にヘッダが存在するかどうか調べる方法ありますか。
0209デフォルトの名無しさん
2009/12/02(水) 18:15:31自分のレスをもう一度
読み直し、
日本語でどーぞ。
0210デフォルトの名無しさん
2009/12/02(水) 18:19:50コンパイラによるんです
0211デフォルトの名無しさん
2009/12/02(水) 18:26:590212デフォルトの名無しさん
2009/12/02(水) 18:29:17ってちゃんとデストラクタが呼ばれて、メモリからも解放されるんですか?
0214デフォルトの名無しさん
2009/12/02(水) 18:51:59でも、、、
どのようにすれば、arrayの入れ子をつくれるのかがわかりません・・・
誰か教えてください。
template<class T, int N> array;
0215デフォルトの名無しさん
2009/12/02(水) 19:16:16あとは自分でなんとかしろ
0216デフォルトの名無しさん
2009/12/02(水) 19:19:500217デフォルトの名無しさん
2009/12/02(水) 19:26:58class array<T, 0>{ T &opereetaa [](int i){ ritaan array_[i]; } T array_[M]; };
の様な形で特殊化しろ
0218デフォルトの名無しさん
2009/12/02(水) 19:28:290219デフォルトの名無しさん
2009/12/02(水) 19:39:40効率、コンパイル時間が落ちる
0220デフォルトの名無しさん
2009/12/02(水) 19:42:32ライブラリ化するときくらいに使えよ
0221デフォルトの名無しさん
2009/12/02(水) 19:44:45いいんじゃない?
>>214はテンプレートでも簡単なテンプレートの話じゃないし。
中・上級者の第一歩ってことで。
0223デフォルトの名無しさん
2009/12/02(水) 19:46:08何があったのかは知らんが心の病気だから病院に行ってみたらどうだ
0224デフォルトの名無しさん
2009/12/02(水) 19:50:28まあ俺も>>219は失礼だからこいつが悪いとは思うが、
>>220に対してまで悪態つくなよ。そりゃお前が悪いぞ。
0225デフォルトの名無しさん
2009/12/02(水) 19:50:520227デフォルトの名無しさん
2009/12/02(水) 19:54:04そして224もその意味で使ってる
0228224
2009/12/02(水) 19:57:14すまねぇ。
今日はもうROMるわ。
0229214
2009/12/02(水) 19:57:33まあ僕もテンプレートを使いこなせるようにがんばります・・・
0231デフォルトの名無しさん
2009/12/02(水) 19:59:400232デフォルトの名無しさん
2009/12/02(水) 20:13:23でもどうでもいい話だな。
0233デフォルトの名無しさん
2009/12/02(水) 20:38:570234デフォルトの名無しさん
2009/12/02(水) 20:45:34でも>>232が言うように、どうでもいい話。
0235デフォルトの名無しさん
2009/12/02(水) 20:45:550236デフォルトの名無しさん
2009/12/02(水) 21:00:42それから書き込めば余裕だろ?
0237デフォルトの名無しさん
2009/12/02(水) 21:06:260238デフォルトの名無しさん
2009/12/02(水) 21:13:27どうやればいいですか。
windowsでは、8バイトの比較ですが、unixなどでは不明です。
0239デフォルトの名無しさん
2009/12/02(水) 21:29:570240デフォルトの名無しさん
2009/12/02(水) 21:45:55LLONG_MAX
C99でもそうだったし、最新ドラフトN3000でもこれ。
>>238
std::equalとかstd::wmemcmpとか。
0241デフォルトの名無しさん
2009/12/02(水) 22:04:21C言語では1文字ずつがいいですか
0243デフォルトの名無しさん
2009/12/02(水) 22:36:270244デフォルトの名無しさん
2009/12/02(水) 22:59:24Cygwin自体にはLinux用バイナリを作る方法は用意されていないが、
自分でLinuxターゲットのGCCをビルドすれば実現可能。
0245デフォルトの名無しさん
2009/12/02(水) 23:07:110246デフォルトの名無しさん
2009/12/02(水) 23:12:590247デフォルトの名無しさん
2009/12/02(水) 23:59:39のあとに
obj = NULL;
ってしとけば誤って複数回delete obj;しても大丈夫だから
delete obj;するときにはojb = NULL;する習慣を付けた方が良いって本当ですか
0248デフォルトの名無しさん
2009/12/03(木) 00:03:210249デフォルトの名無しさん
2009/12/03(木) 00:09:380250デフォルトの名無しさん
2009/12/03(木) 00:12:27本当ですよ
0251デフォルトの名無しさん
2009/12/03(木) 00:14:450252デフォルトの名無しさん
2009/12/03(木) 00:41:00設計が出来ていないのだからな。
0253デフォルトの名無しさん
2009/12/03(木) 01:21:32そんな習慣を今からつけるぐらいなら、より簡単で安全で本質的な解決策である
std::auto_ptr や boost::smart_ptr を使う習慣を付けるべき。
0254デフォルトの名無しさん
2009/12/03(木) 01:30:21そのとおりですよ
0255デフォルトの名無しさん
2009/12/03(木) 02:23:04void object::destroy()
{
delete p_;
p_ = 0;
}
obj.destroy();
obj.destroy();
分かってるとは思うけど
こういうことするなら必須
0256デフォルトの名無しさん
2009/12/03(木) 06:30:42~dtor(){ if(resource_ != NULL) delete resource_; }
なんてやることはある。
0257デフォルトの名無しさん
2009/12/03(木) 07:13:40ですね
0258デフォルトの名無しさん
2009/12/03(木) 08:40:19え?
0259デフォルトの名無しさん
2009/12/03(木) 09:24:18ウザすぎる。もうはやってねーし
0260デフォルトの名無しさん
2009/12/03(木) 10:05:050261デフォルトの名無しさん
2009/12/03(木) 10:06:120262デフォルトの名無しさん
2009/12/03(木) 10:07:420263デフォルトの名無しさん
2009/12/03(木) 10:09:490264デフォルトの名無しさん
2009/12/03(木) 10:19:04意味わからん
「卑劣な通り魔に刺される程お前が卑劣だったことに気付け」くらい前後の脈絡が無い
0265デフォルトの名無しさん
2009/12/03(木) 10:19:520266デフォルトの名無しさん
2009/12/03(木) 10:26:01そのたとえ話の方が脈絡がないだろ。
0267デフォルトの名無しさん
2009/12/03(木) 10:31:40たいへんですね
0268デフォルトの名無しさん
2009/12/03(木) 10:45:22「ウザいものにはフタ」ってことです。
0269デフォルトの名無しさん
2009/12/03(木) 11:04:56あるよ
「やった奴と同じ業を、やられた奴も持っていたからそれが起きたんだ」という主張が
めちゃくちゃだという話
0270デフォルトの名無しさん
2009/12/03(木) 11:10:16下らない書き込みしたから下らない流れになっただけだろうが。
発端が何を偉そうに言ってるんだか。
なってしまうのは仕様でしょうか?VC++2008を使っています.
数学的には -0.1 が正解だと思うのですが・・・
0272デフォルトの名無しさん
2009/12/03(木) 11:15:22絶対そういう例出すやついると思った。
でも delete NULL; はOkなのだから、
if (resource_ != NULL) で場合分けするのが無駄なのは明白。
0273デフォルトの名無しさん
2009/12/03(木) 11:15:270274デフォルトの名無しさん
2009/12/03(木) 11:17:12発端ってw
俺は>>264が最初の書き込みだが、いったい誰と戦ってんのw
> 何を偉そうに
と書いてるレスが一番偉そうというギャグだってんなら、3点くらいあげてもいい
0275デフォルトの名無しさん
2009/12/03(木) 11:17:13VC++2008はNaNを-1.#INDと表示する処理系
0276デフォルトの名無しさん
2009/12/03(木) 11:23:002.同じく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:47thisとかも同じですか?
あと、継承されたクラスも同じですか?
0280デフォルトの名無しさん
2009/12/03(木) 11:43:07ただしprotectedは別。
0281デフォルトの名無しさん
2009/12/03(木) 11:52:04なんとなくわかりました。
0282デフォルトの名無しさん
2009/12/03(木) 11:59:33OpenMpとか
0283デフォルトの名無しさん
2009/12/03(木) 12:01:550284デフォルトの名無しさん
2009/12/03(木) 12:03:20errnoにエラーの情報が入るはず
vcならmatherrだったかも
0285デフォルトの名無しさん
2009/12/03(木) 12:03:42ありがとうございます
0286デフォルトの名無しさん
2009/12/03(木) 12:04:16283って答えになってなくね?
0287デフォルトの名無しさん
2009/12/03(木) 12:06:29ありがとうございます
0288デフォルトの名無しさん
2009/12/03(木) 12:08:09指定しない場合はどんな計算を行うのでしょうか?
0289デフォルトの名無しさん
2009/12/03(木) 12:10:52・プログラミングは作れません。
・コンパイラはもしかしたら複数コアを使ってコンパイルするかもしれません。
・コンパイラによっては、OpenMPを使わなくても複数コアを使うようなコードを出力することができる場合があります。
・一般的には、複数コアを使うコードを出力するにはOpenMPなりpthreadなりを使う必要があります。
・そもそもOSはプログラムを適宜異なるコアで動くように管理するので余り神経質になる必要はありません。
・いずれにしても、C++は言語仕様としてスレッドの概念もなければマルチコアの概念もないのでスレ違いです。
0290デフォルトの名無しさん
2009/12/03(木) 12:11:440291デフォルトの名無しさん
2009/12/03(木) 12:11:54OpenMPを使わずに計算を行います。
0292デフォルトの名無しさん
2009/12/03(木) 12:14:09議論したければC++0xスレへどうぞ。
0293デフォルトの名無しさん
2009/12/03(木) 12:14:16なぜフレンド関数はプライベートな部分まで見ることが出来るんですか?
0294デフォルトの名無しさん
2009/12/03(木) 12:17:32私は見せて貰ってますよ。友達だと思っているのはあなただけなのではないですか?
0295デフォルトの名無しさん
2009/12/03(木) 12:17:330296デフォルトの名無しさん
2009/12/03(木) 12:17:40C++のフレンドは、女の友達よりは正義超人の友情に近いからです。
0297デフォルトの名無しさん
2009/12/03(木) 12:18:10なぜでしょうね。
0298デフォルトの名無しさん
2009/12/03(木) 12:19:460299デフォルトの名無しさん
2009/12/03(木) 12:20:02ですよね
0300デフォルトの名無しさん
2009/12/03(木) 12:21:04セックスフレンド関数なんです。
0301デフォルトの名無しさん
2009/12/03(木) 12:49:290302デフォルトの名無しさん
2009/12/03(木) 12:54:300303デフォルトの名無しさん
2009/12/03(木) 13:16:263個の例の行列の掛け算をコピーしないとかのとかの具体的に乗ってるホームページや
本をお願いします。
0304デフォルトの名無しさん
2009/12/03(木) 13:55:14intだと0と1がでるみたいなやつのある初めから出来ているやつ知りませんか?
0305デフォルトの名無しさん
2009/12/03(木) 14:00:280306デフォルトの名無しさん
2009/12/03(木) 14:52:150307256
2009/12/03(木) 15:23:36オブジェクトのポインタがフラグとしても意味をなすよってことをいいたかった。
リソース自身がオブジェクト化されていた場合で
Close(){ res_->Close(); res_ = NULL; }
~Dtor(){ if(res_!=NULL) res_->Close(); }
こう書けばよかったな
単にcharとかintとかなら、NULLで埋めるだけで問題ない
0308デフォルトの名無しさん
2009/12/03(木) 15:33:17ですね
0309デフォルトの名無しさん
2009/12/03(木) 15:39:13後者は前者の誤記
0310デフォルトの名無しさん
2009/12/03(木) 15:51:13私もそう思っていた時期もありましたが、
そうでもないみたいなので。
0311デフォルトの名無しさん
2009/12/03(木) 17:23:31クラスのテンプレート。template<class T> class HOGE{};
テンプレートのクラス・・・では意味不明だからクラステンプレートにパラメータを与えて実体化させたクラス。HOGE<int>,HOGE<double>,...
0312デフォルトの名無しさん
2009/12/03(木) 19:11:30しばらくテンプレートの特殊化について調べていたのですが、
いまいちどういうことなのかわかりません。
助言、参考になるサイトなどありましたら、教えてください。
0313デフォルトの名無しさん
2009/12/03(木) 19:21:470314デフォルトの名無しさん
2009/12/03(木) 19:23:14orz
0315デフォルトの名無しさん
2009/12/03(木) 19:48:17特殊化すると、ある特定のテンプレート引数が指定された場合だけ、それ以外の場合とは異なる中身にできる
例えばこんな感じ
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 になる
0316312
2009/12/03(木) 20:03:52ありがとうございます。
0317デフォルトの名無しさん
2009/12/03(木) 22:04:21javaで他のコンストラクタを呼び出す
『this(String s)』に相当する方法はありませんか?
0318デフォルトの名無しさん
2009/12/03(木) 22:05:12>>256といい、釣りもほどほどにしとけよ
0319デフォルトの名無しさん
2009/12/03(木) 22:37:320320デフォルトの名無しさん
2009/12/03(木) 22:39:52{
0321デフォルトの名無しさん
2009/12/03(木) 22:40:500323デフォルトの名無しさん
2009/12/03(木) 23:27:58967 名前:デフォルトの名無しさん[] 投稿日: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なるほど
0325デフォルトの名無しさん
2009/12/04(金) 06:20:47るのでしょうか?
0326デフォルトの名無しさん
2009/12/04(金) 08:02:40いくつか方法がある。
- 自分で標準関数を使って一生懸命XMLを操作するライブラリを書く
- 開発環境にデフォルトで入ってるライブラリを使う(Qtとか)
- Xercesとかlibxmlみたいな外部ライブラリ使う
0327デフォルトの名無しさん
2009/12/04(金) 10:04:28ttp://home.att.ne.jp/banana/akatsuki/doc/xmllite/first01/index.html
0329デフォルトの名無しさん
2009/12/04(金) 14:04:39読み取るだけなら
生成するなら、ライブラリ
習得に手間掛かるが
自分で正規な出力するよりかは楽
0330デフォルトの名無しさん
2009/12/04(金) 14:22:21ifstreamクラスで文字列を読みとろうとすると、改行まで読み取られます。
空白まで読み取るというようには出来ないでしょうか?
0331デフォルトの名無しさん
2009/12/04(金) 14:46:33半角スペースは区切りになってます。
ただ、全角スペースを区切りとして認識してもらう方法ってありませんか?
0332デフォルトの名無しさん
2009/12/04(金) 15:14:150333デフォルトの名無しさん
2009/12/04(金) 15:31:18gettimeofdayが使用されたネット上のコードを見ると
#include <time.h>
#include <sys/time.h>
とあるようにtime.hとは別にsys/time.hをインクルードする必要があるみたいです。
このsys/time.hはどこから入手すればよいのでしょうか?
0334デフォルトの名無しさん
2009/12/04(金) 15:38:000335デフォルトの名無しさん
2009/12/04(金) 15:59:38C++のプログラムです。
下図に示すように、整数を入力して指定する位置の
ビットを反転した値を出力するプログラムを作成せよ。
ビット位置は最下位ビットを0とすること。
例えば12を入力して反転するビット位置を2とすると、
12の最下位から3番目のビットは1なので
これを反転して0に変えると出力は8となる。
整数を入力: 12
反転するビットの位置を入力(0〜31): 2
反転した結果: 8
0336デフォルトの名無しさん
2009/12/04(金) 16:29:21それで、質問の内容は?
「整数を入力のやり方がわかりません」 とか、具体的に書いてください
0337デフォルトの名無しさん
2009/12/04(金) 16:48:11operator Hoge&()const{
return *this;
}
};
このキャスト演算子が無限ループにならないような参照の返し方ってありますか?
0338デフォルトの名無しさん
2009/12/04(金) 16:59:390339デフォルトの名無しさん
2009/12/04(金) 17:04:52C#DLLをC++DLLにする方法ありますか。
ソースのC#->C++化でも良いです
0340デフォルトの名無しさん
2009/12/04(金) 17:49:50NET入れないと動かないのが嫌なんです。
DotNetZipLibというのを使いたいのですが、いい方法無いですか。
zip64の追記が出来る方法でも良いです、
0341340
2009/12/04(金) 17:59:09tmpを生成してから追記してました。
元のファイルに直接追記できるやつありますか。
0342デフォルトの名無しさん
2009/12/04(金) 18:01:20俺も気になるから調べてみるか
0343デフォルトの名無しさん
2009/12/04(金) 18:08:33zipはそのライブラリのフォーマットであると仮定すればtmpなしでいけると思うのですが
0344デフォルトの名無しさん
2009/12/04(金) 18:30:58まだやってんのか
0345デフォルトの名無しさん
2009/12/04(金) 18:40:23ディスクの読み書きを減らしたいというのであれば不可能
0346デフォルトの名無しさん
2009/12/04(金) 18:48:570347デフォルトの名無しさん
2009/12/04(金) 18:52:20実行毎にtmp生成して追記するのは都合が悪いです。
0348デフォルトの名無しさん
2009/12/04(金) 18:54:09ここ見たらディスクの読み書きも減らせそうだったわ頑張れ
0349デフォルトの名無しさん
2009/12/04(金) 18:55:290350デフォルトの名無しさん
2009/12/04(金) 19:01:13zipは必須なんです。容量節約とindex付きでアクセス速度が良くなるので。
0351デフォルトの名無しさん
2009/12/04(金) 19:03:21zip64の追記ライブラリ公開してくれお
需要あってアクセス出ると思うよ
0352デフォルトの名無しさん
2009/12/04(金) 19:16:220353デフォルトの名無しさん
2009/12/04(金) 19:16:49いくつかの書庫に分割すればいいんじゃね?
0354デフォルトの名無しさん
2009/12/04(金) 19:25:47zipをマウントするとき、複数同時にしないと行けないので。
10Mくらいずつでやってみます。これならコピーがあっても困らないので。
0355デフォルトの名無しさん
2009/12/04(金) 21:04:250356デフォルトの名無しさん
2009/12/04(金) 21:14:210357デフォルトの名無しさん
2009/12/04(金) 21:15:070358デフォルトの名無しさん
2009/12/04(金) 21:17:48古いやつでも良いので動作するバイナリ教えてください・
0359デフォルトの名無しさん
2009/12/04(金) 21:18:43あるといいですね。
0360デフォルトの名無しさん
2009/12/04(金) 21:19:070361デフォルトの名無しさん
2009/12/04(金) 21:19:35インポートライブラリ作ってみたのですが
ヘッダで文法エラーでます。
0362デフォルトの名無しさん
2009/12/04(金) 21:19:52出番ですよ。
0363デフォルトの名無しさん
2009/12/04(金) 22:33:31typedef 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マイクロソフトのVisual C++2008のソフトをインストールしたのですが
その後スタート→新規作成→プロジェクトを選択して
Win32→Win32コンソールアプリケーションを選択してプロジェクト名をsampleにしてOKタブをクリックしようとしてもOKボタンが表示されませんがどうしたらいいか分かりません
ぜひアドバイスをお願いします
0365デフォルトの名無しさん
2009/12/04(金) 23:40:58vc++は実戦向きツール
0366デフォルトの名無しさん
2009/12/04(金) 23:43:44冷たいUIの教科書みたいなもんでさ
0367デフォルトの名無しさん
2009/12/04(金) 23:56:57bccやVCを勉強する前に
スレタイを読む練習が必要だと思うんだけど。
自分でもそう思わない?
> C言語
C言語やるならbccが良いと思う。
0368デフォルトの名無しさん
2009/12/05(土) 00:10:15同じく
0369デフォルトの名無しさん
2009/12/05(土) 01:44:230370369
2009/12/05(土) 03:07:280371デフォルトの名無しさん
2009/12/05(土) 04:05:31ロックして、圧縮関数にはシングルスレットと同じ風にみせればいいけど・。
パフォーマンスが落ちるから同時に圧縮したいけど。
0372デフォルトの名無しさん
2009/12/05(土) 07:41:120373デフォルトの名無しさん
2009/12/05(土) 11:25:290374デフォルトの名無しさん
2009/12/05(土) 11:43:36TestClass *t = new TestClass();
この2つはインスタンスを作るという意味では同じ事をやっているわけですが、
どうやって使い分けるんですか?
0375デフォルトの名無しさん
2009/12/05(土) 11:46:040376デフォルトの名無しさん
2009/12/05(土) 12:35:45本当にそれだけ何ですか?
0377デフォルトの名無しさん
2009/12/05(土) 12:47:270378デフォルトの名無しさん
2009/12/05(土) 12:50:55なるほど、ありがとうございます
0379デフォルトの名無しさん
2009/12/05(土) 12:58:24>>377
この二つが本当のところじゃない?
それ以外の理由は・・・pimplやりたいとか?
0380デフォルトの名無しさん
2009/12/05(土) 13:18:11スタック領域を節約したいってどういう状況?
0381デフォルトの名無しさん
2009/12/05(土) 13:22:170382デフォルトの名無しさん
2009/12/05(土) 13:24:47PCみたいに何MBもスタックあるような環境じゃ普通は気にしないな
0383デフォルトの名無しさん
2009/12/05(土) 13:40:51たしかに気にしないですね
0384デフォルトの名無しさん
2009/12/05(土) 14:25:230385デフォルトの名無しさん
2009/12/05(土) 16:48:54ダメじゃん
0386デフォルトの名無しさん
2009/12/05(土) 17:15:010387デフォルトの名無しさん
2009/12/05(土) 17:15:46コマンドプロンプトがやりにくいです
0388デフォルトの名無しさん
2009/12/05(土) 17:22:480389デフォルトの名無しさん
2009/12/05(土) 17:23:450390デフォルトの名無しさん
2009/12/05(土) 17:28:05別に C でも NULL は役に立たんよ。ヘッダをインクルードするほうがめんどくさい。
0391デフォルトの名無しさん
2009/12/05(土) 17:30:120392デフォルトの名無しさん
2009/12/05(土) 17:32:020393デフォルトの名無しさん
2009/12/05(土) 17:35:340394デフォルトの名無しさん
2009/12/05(土) 17:54:320395デフォルトの名無しさん
2009/12/05(土) 17:56:040396デフォルトの名無しさん
2009/12/05(土) 18:02:480397デフォルトの名無しさん
2009/12/05(土) 18:15:350398デフォルトの名無しさん
2009/12/05(土) 18:58:110399デフォルトの名無しさん
2009/12/05(土) 19:02:000400デフォルトの名無しさん
2009/12/05(土) 19:02:420401デフォルトの名無しさん
2009/12/05(土) 19:08:450402デフォルトの名無しさん
2009/12/05(土) 19:13:500404デフォルトの名無しさん
2009/12/05(土) 19:16:46ぬるぽじゃないの?
0405デフォルトの名無しさん
2009/12/05(土) 19:20:49#include <sys/utime.h>
または #include <utime.h>
をロードする方法ありますか。
sysのあるかないかです。
0406デフォルトの名無しさん
2009/12/05(土) 19:29:32#if defined(_MSC_VER)
#include <sys/utime.h>
#else
#include <utime.h>
#endif
0407デフォルトの名無しさん
2009/12/05(土) 19:31:54って標準じゃない・・・よね?
0408デフォルトの名無しさん
2009/12/05(土) 19:40:360409407
2009/12/05(土) 19:42:350410387
2009/12/05(土) 20:12:53NetBeans IDE はかるく、CYGwinが動作していいです。
0411デフォルトの名無しさん
2009/12/05(土) 21:33:49なんで関係ないと思うの?
0412デフォルトの名無しさん
2009/12/05(土) 23:04:140413デフォルトの名無しさん
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];
};
0414413
2009/12/06(日) 00:55:34public:
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:17load >> 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
0416413
2009/12/06(日) 00:57:24長くなってしまいました・・・
よろしくお願いします。
0417デフォルトの名無しさん
2009/12/06(日) 00:59:23>char find2[10] = "123456789";
0は無しですか?
0418デフォルトの名無しさん
2009/12/06(日) 01:02:530419デフォルトの名無しさん
2009/12/06(日) 01:27:10p1〜p3が最初の/を指してるところから疑問に持て。
0420413
2009/12/06(日) 01:39:26アドバイスで分かりました。
ありがとうございます。
後ろから検索するstrrchr(val2.vertex1, "/");
で解決使用とビルドを行ったのですが、"/"がエラーとなってしまいます。
特殊記号の場合、表記どのようにすればよいでしょうか?
また、substringのLengthで文字の長さを調べて場合分けの方法でも試しているのですが、上手くいってません。
アドバイスよろしくお願いします。
0421413
2009/12/06(日) 03:01:57string vertex2
string vertex3
として val2.vertex1, val2.vertex2, val2.vertex3に格納されているデータの長さを取り出したいのですが、
ネットで調べても
string str = " ";
i=str.length
の形でかくと書かれています。
しかし、文字列を最初からしていできないので、文字列変数を読み込ませたいのですが、エラーがでてしまいます。
どのようにすればよいでしょうか?
0422デフォルトの名無しさん
2009/12/06(日) 07:47:58ムダレスやめろw
0423デフォルトの名無しさん
2009/12/06(日) 10:00:11strstrの用途を勘違いしている。
そこはstrpbrkを使うところ。
(手っ取り早くすますならq1++するだけでいい)
atoiのパラメタ指定に誤りがある。
そこはC文字列ではなく文字を指定する。
>420も同様。
>421
エラーが起こったじゃ分からんわ。
エラーメッセージを読んでいないことだけは分かったがな。
0424419
2009/12/06(日) 11:44:41まだなら作ってもいいけど…
まず仕様を明確にしてくれ。
何がしたいクラスなのか、どう使いたいのかさっぱりわからん。
・1/1/1と来たとき最後のデータしかいらないのか、そもそもそれは何なのか
・メンバとして保持すべきなのはどこまでなのか
0425413
2009/12/06(日) 12:29:24p1 = 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何がいいかは環境によって違うだろうけど、皆が何使ってるか聞きたい。
環境と使ってるもの合わせて書いてみてー
0427デフォルトの名無しさん
2009/12/06(日) 12:41:58誰に頼んでるんだい?
>>425に頼みなさい。
0428413
2009/12/06(日) 12:48:26という形に書き換えたところ、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"のなかに保存しておくことで、他のヘッダファイルで後に利用する関数内での処理に用いようと考えています。
0430419
2009/12/06(日) 13:32:44C++ソースレベルでどこまで実行出来てるのか見た?
ステップ実行するなり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はあり得ないでしょ。
0432413
2009/12/06(日) 14:19:43void Cauthentication_tDlg::OnBnClickedanalysis()
{
使用変更でメッシュパターンが変更された場合、1度だけ実行
mesh_OBJ make_mesh_pattern;
make_mesh_pattern.mesh();
}
0433413
2009/12/06(日) 14:37:53load >> 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;
}
}
0434413
2009/12/06(日) 14:38:34(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と見なしています。
0435419
2009/12/06(日) 14:38:570436デフォルトの名無しさん
2009/12/06(日) 15:06:16fはフェイスかなんかの略で、直後にトライアングル1枚分のデータを持ってる。
「頂点インデックス/座標インデックス/法線インデックス」が頂点1個分のデータで、
これがトライアングルの頂点分、つまり3つ並んでる。
それで、vertex1には各トライアングルの第1頂点の頂点インデックスのみ、
vertex2,3も同様に第2、第3頂点の頂点インデックスのみを格納したい、と。
0437419
2009/12/06(日) 15:18:29> 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文字数制限はありますか?
また、現実的にはそれを守らない事による困った事態が起こった経験は
みなさんありますか?
0439デフォルトの名無しさん
2009/12/06(日) 15:30:03#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仕様的にはなかったと思うけど、
コンパイラによっては制限がある場合もある
といっても千文字以上とか普通にはあり得ないレベルだから
普通は気にしなくてもいい
(コードの自動生成とかしてると気にする必要はあるかもしれないが)
0442デフォルトの名無しさん
2009/12/06(日) 15:34:03プリプロセスでは改行は大きな意味を持つぜ
0443413
2009/12/06(日) 15:36:32その通りです。
わかりにくくてすみません。
>>437
実験用なので、別途のコンソールアプリを作成しなくても一度実行してファイルを作ってからコメントアウトすれば
とりあえずは問題ないのでこのようにしました。
入力ファイル名は固定です。
出力ファイル名は固定ではありません。
>>・「1/22/333」や「22/333/333」だったらどうすんの
このような状況は起こりません。
常に、先頭の"/"までの物と同じ数字が並んでいます。
>>read = " ";を追加
'substring' : 'std::basic_string<_Elem,_Traits,_Ax>' のメンバではありません。
というエラーをはかれてしまいます。
0444デフォルトの名無しさん
2009/12/06(日) 15:54:52行数じゃないが、VCで1万文字くらいの文字列リテラルを作ろうとして怒られたことならある
0445419
2009/12/06(日) 15:57:19せめて
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 );
}
とか入力も出力も切り替え放題だろうに。
0446419
2009/12/06(日) 15:58:24> >>・「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:330448デフォルトの名無しさん
2009/12/06(日) 16:14:22わざわざ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:490450デフォルトの名無しさん
2009/12/06(日) 16:21:14Characters in one logical source line [65536].
(http://www.kuzbass.ru/docs/isocpp/limits.html より)
だそうだ
0451448
2009/12/06(日) 16:37:340452413
2009/12/06(日) 16:44:10結局、substringで宣言していたのが間違いなことに気づきました。
substring(0,1)→substr(0,1)
と変えたら欲しいデータが出てきました。
長いことアドバイスをありがとうございました。
0453デフォルトの名無しさん
2009/12/06(日) 16:46:480454438
2009/12/06(日) 17:00:54>>444
>>450
一行の文字数に関しては
普通に打っていれば問題にはならないですね。
nestされたテンプレートがで17までとか
現実的にちょっと引っかかる恐れがあって、
そこからの類推で心配していました。
ありがとうございます。
0455419
2009/12/06(日) 17:08:090456デフォルトの名無しさん
2009/12/06(日) 17:17:310457デフォルトの名無しさん
2009/12/06(日) 19:11:360458デフォルトの名無しさん
2009/12/06(日) 20:02:15listでキャシュみたいに使えばちょっとは早くなるかなぁと思ってみたり。
0459デフォルトの名無しさん
2009/12/06(日) 20:38:54イテレータ一般では無効になるタイミングに気をつけないといけないからちょっと危ない
気配がするけど、 list なら対象要素がコンテナ内にある限り大丈夫だし、他のコンテナでも
クラス内できっちり無効になるタイミングに気をつけて管理されていれば問題は無い。
0460デフォルトの名無しさん
2009/12/06(日) 20:56:170461デフォルトの名無しさん
2009/12/06(日) 21:00:59凄い面倒だけど。
それよりも中身自体をshared_ptrとかで共用したら?
イテレータを弄るときは大抵リストを操作するときなんだから、
あまり長時間保持するようなものじゃないと思う。
0462デフォルトの名無しさん
2009/12/06(日) 22:00:54オリジナルはvectorだけどlistの方がいいんじゃないかなと思って、
キャッシュ的に使うとなるとイテレータしかないのかなと考えたわけで。
0463デフォルトの名無しさん
2009/12/06(日) 22:06:03と
domain_error
はどう使い分けられるものでしょうか?
0464デフォルトの名無しさん
2009/12/06(日) 22:18:44http://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そちらも拝見いたしましたが、
どうしても違いが分からないのです。
両方とも範囲外というエラーを表現しているのでは
ないかと思うのです。
0466463
2009/12/06(日) 22:32:57out_of_range
と
domain_error
のどちらで通知されるべきものなのでしょうか?
0467デフォルトの名無しさん
2009/12/06(日) 22:35:34数学的な関数における定義域についての「範囲外」が domain_error ってことで。
http://en.wikipedia.org/wiki/Domain_of_a_function
はっきりと数学的な意味を持たせたい場合以外は out_of_range でいいと思う。
0468デフォルトの名無しさん
2009/12/06(日) 22:38:22ありがとうございます。
そうさせていただきます。
0469デフォルトの名無しさん
2009/12/06(日) 22:40:270470デフォルトの名無しさん
2009/12/06(日) 22:41:25じゃ、どういう意味なんだ?
0471デフォルトの名無しさん
2009/12/06(日) 22:48:080472デフォルトの名無しさん
2009/12/06(日) 22:48:580473デフォルトの名無しさん
2009/12/06(日) 22:50:44用意しただけっぽいな。
domain_error が EDOM で range_error が ERANGE ってことで。
EDOM と ERANGE については C の規格 7.12.1 Treatment of error conditions を見れ。
0474463
2009/12/06(日) 23:02:03規格を拝見してまいります。
0475デフォルトの名無しさん
2009/12/07(月) 05:31:04で?
0476デフォルトの名無しさん
2009/12/07(月) 12:53:12どうしたらいいでしょうか?
0477デフォルトの名無しさん
2009/12/07(月) 12:55:350478デフォルトの名無しさん
2009/12/07(月) 13:02:02それとintは最大値を超えると最低値になるという理解であってますか?
0479デフォルトの名無しさん
2009/12/07(月) 13:04:100480デフォルトの名無しさん
2009/12/07(月) 13:13:080481デフォルトの名無しさん
2009/12/07(月) 13:41:360482デフォルトの名無しさん
2009/12/07(月) 13:51:36http://www.mega-nerd.com/libsndfile/
をみつけたんだけど、これって普通使いますか?
他にこれより良いやつあったらおしえてください。
0483デフォルトの名無しさん
2009/12/07(月) 13:51:43あきらめましょう
0484デフォルトの名無しさん
2009/12/07(月) 13:57:27ライセンスが売り物に出来るやつでも使えるの知りませんか?
0485デフォルトの名無しさん
2009/12/07(月) 14:05:390486デフォルトの名無しさん
2009/12/07(月) 14:11:290487デフォルトの名無しさん
2009/12/07(月) 14:35:25作ってください。
1週間待ちますから。
0488デフォルトの名無しさん
2009/12/07(月) 14:45:20絶対使うならソース公開してもいいが
1週間は無理だ
0489デフォルトの名無しさん
2009/12/07(月) 16:46:15速度が上がると聞いたことがあるのですが、どのような
理由があるのでしょうか?
0490デフォルトの名無しさん
2009/12/07(月) 16:57:280491デフォルトの名無しさん
2009/12/07(月) 18:56:24木津さん、もうそれくらいにした方が。
0492デフォルトの名無しさん
2009/12/07(月) 19:01:33殆ど実装依存だが。
ちなみにC++の動的配列確保実装は配列のサイズをどこかに保持していなければならないのでそれも含めて丁寧に2^nサイズにする事は事実上不可能。
0493デフォルトの名無しさん
2009/12/07(月) 19:41:23100Mより10M
HDDに移動されると圧倒的な速度低下。
アルゴリズムから見直すべき
0494デフォルトの名無しさん
2009/12/07(月) 19:55:37木津さんっていう名前なの?
0495デフォルトの名無しさん
2009/12/07(月) 19:58:180496デフォルトの名無しさん
2009/12/07(月) 20:06:41{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:490498デフォルトの名無しさん
2009/12/07(月) 20:08:510499496
2009/12/07(月) 20:12:59H8マイコンを使っています。
0500デフォルトの名無しさん
2009/12/07(月) 20:13:450501489
2009/12/07(月) 20:15:27わかりました。ありがとう。
0502デフォルトの名無しさん
2009/12/07(月) 20:16:120503デフォルトの名無しさん
2009/12/07(月) 20:43:15「C_Status() が 0 を戻したら 「;」 (つまり “何もしない”)」
を、C_Status() が 0 以外を戻すまで繰り返す。
…そういうことでなくて?
0504デフォルトの名無しさん
2009/12/07(月) 20:57:36>上記のwhile(!C_Status());という記述の意味がいまいちわかりません。
C_Status()を呼んで、その返り値を論理否定して、真の間ずっとループ。
C/C++で整数を論理値として評価する時は、0はfalse, 0以外はtrue。
つまりP4の4ビット目か5ビット目か6ビット目か7ビット目のどれかが0になるまでループ。
「教授」じゃなくて「教示」。
0506デフォルトの名無しさん
2009/12/07(月) 23:03:01細かいな。
0507デフォルトの名無しさん
2009/12/07(月) 23:06:51delete obj;
の後
delete obj;
するとセグりますけど
最初のdelete obj;のときと
2回目のdelete obj;でobjは何が違うんですか。
一回目のdelete obj;でそこのアドレスから数バイトのバイナリ値が
何かに書き換えられてて2回目はその書き換えられた値を見て異常とか判断してるんでしょうか。
異常なobjと異常じゃないobjはどうやって見分けてるんでしょうか。
0508デフォルトの名無しさん
2009/12/07(月) 23:09:54MainForm.hにクラスの宣言が3つほど書いてありました
普通は1つの*.hに1つのクラスしか宣言しないと思うのですが
これって、普通なんですかね?
0509デフォルトの名無しさん
2009/12/07(月) 23:16:390510デフォルトの名無しさん
2009/12/07(月) 23:23:24見分けてるんじゃなくてヒープ領域の管理方法に依存する
つまり実装依存
大抵はリンクリスト+フリーブロックになっていて、deleteすると
リンクリストが書き換えられ、そこがフリーで利用可能であると
マークされる
それをもう一度deleteするとリンクリストがぶっ壊れる
0511デフォルトの名無しさん
2009/12/07(月) 23:29:49> 異常なobjと異常じゃないobjはどうやって見分けてるんでしょうか。
いや、見分けられないからこそ
異常なobjをdeleteしてしまってバグるのだよ。
見分けられたなら何度deleteしても問題ない仕様にするだろ?
0512デフォルトの名無しさん
2009/12/07(月) 23:32:58心配ならdeleteした直後にポインタに0を入れとけ
delete 0; をやっても何も起こらない事が保証されている
0513デフォルトの名無しさん
2009/12/07(月) 23:38:50それじゃ他で delete されたらアウトだろ
0514デフォルトの名無しさん
2009/12/07(月) 23:46:040516デフォルトの名無しさん
2009/12/08(火) 00:05:260517デフォルトの名無しさん
2009/12/08(火) 00:41:27その前にセグるって言葉は一般的なのか?w
0518デフォルトの名無しさん
2009/12/08(火) 00:44:19C++なら一つのヘッダファイルに関連する複数のクラスの定義を書くのはごく普通。stlやboostの中身見てみな。
0519デフォルトの名無しさん
2009/12/08(火) 01:10:38一回目の 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 オマエもな。
0521デフォルトの名無しさん
2009/12/08(火) 07:48:58セグるをしらないのか。だっせーw
0522デフォルトの名無しさん
2009/12/08(火) 08:08:25> >>517
> セグるをしらないのか。だっせーw
0523デフォルトの名無しさん
2009/12/08(火) 10:26:49#include "hoge"だけじゃ何でダメなの?
0524デフォルトの名無しさん
2009/12/08(火) 10:49:27namespaceと#includeは(直接は)関係ないし
0525デフォルトの名無しさん
2009/12/08(火) 11:35:26正しい使い方をみせてください・・・・・・
0526デフォルトの名無しさん
2009/12/08(火) 11:43:350527デフォルトの名無しさん
2009/12/08(火) 12:00:06アレは人間が見るものじゃないだろ
まぁ525はバカすぎて適当な対応したくなるのは同意
0528デフォルトの名無しさん
2009/12/08(火) 12:44:05みたいな低レベルな質問を見るとおぞけが
0529デフォルトの名無しさん
2009/12/08(火) 12:46:490530デフォルトの名無しさん
2009/12/08(火) 12:50:350531デフォルトの名無しさん
2009/12/08(火) 12:56:52別に中身(実装?)を見る必要は無い。
名前空間の使われ方を知るにはライブラリリファレンスなどインターフェースを見るだけで十分でしょ。
もちろん、それ以上を知るために実装などを見ることも悪くは無い。
0532デフォルトの名無しさん
2009/12/08(火) 12:58:53hoge+hoge.f();
で、f()がhogeを変更するメンバ関数だった場合、上式は未定義の動作でしょうか。
0533528
2009/12/08(火) 13:02:19ちょw
おまえらも低レベルかよw
0534デフォルトの名無しさん
2009/12/08(火) 13:05:270535デフォルトの名無しさん
2009/12/08(火) 13:15:39hoge はクラス型のようなので operator+() も関数呼び出しとなり、
hoge.f() および operator+() の呼び出しの前後にシーケンスポイントが
あるので未定義の動作にはならない。
ただし operator+() 呼び出しについて引数の評価順序が未規定なので、
結果に移植性は無い。
0536デフォルトの名無しさん
2009/12/08(火) 13:32:55おまえ程ではないけどね
0537デフォルトの名無しさん
2009/12/08(火) 14:03:010538デフォルトの名無しさん
2009/12/08(火) 14:30:09絵に描いたような低脳特有の返し乙w
0539デフォルトの名無しさん
2009/12/08(火) 14:40:36namespaceを使えば独自のプレフィックスなど不要
0540デフォルトの名無しさん
2009/12/08(火) 15:40:40ところが、独自にプレフィックスを付ければnamespaceなど不要なんだよ
0541デフォルトの名無しさん
2009/12/08(火) 16:36:360542デフォルトの名無しさん
2009/12/08(火) 18:14:360544デフォルトの名無しさん
2009/12/08(火) 20:55:11//適当に実装してある。
};
try{
//処理。
throw MyClass();
}
catch(const MyClass& e){
//eを用いた処理。eは変更されない。
}
これが普通だと思うのですが、
もし
try{
//処理。
throw MyClass();
}
catch(MyClass& e){
//eを用いた処理。eが変更される。
}
というコードだった場合、規格上未定義の動作になりますか?
0545デフォルトの名無しさん
2009/12/08(火) 21:21:39catch節でeに触った瞬間に鼻から悪魔
0546デフォルトの名無しさん
2009/12/08(火) 21:25:080547デフォルトの名無しさん
2009/12/08(火) 21:26:53とか欲しいな
0548デフォルトの名無しさん
2009/12/08(火) 21:32:39それは変更しなくても値を取得した瞬間に鼻から悪魔ということでしょうか?
0549デフォルトの名無しさん
2009/12/08(火) 21:36:110550デフォルトの名無しさん
2009/12/08(火) 21:37:49でもそうだとしますと
const MyClass &e
でcatchした例外は
どうしてさわってOKなのでしょうか?
0551デフォルトの名無しさん
2009/12/08(火) 21:50:55ttp://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:31catch節内での例外オブジェクトの書き込みも認められているのではないの?
ttp://www.kmonos.net/alang/boost/classes/exception.html
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:09finallyが不憫でなりません
0556デフォルトの名無しさん
2009/12/08(火) 21:59:110557551
2009/12/08(火) 21:59:49ありがとう。
> 例外オブジェクトの型は最上位の cv qualifier はずした型になるって 15.1/3 で書いてある。
ということは、>>544で、
const MyClass型のオブジェクトがthrowされたとしても
catch(MyClass& e)
でキャッチできるってこと・・・かな?
0558デフォルトの名無しさん
2009/12/08(火) 22:00:52finallyってどこの言語?
>>556
つまり男ならassertで断言するか死ぬかを選べ、と。
0559デフォルトの名無しさん
2009/12/08(火) 22:02:29ああ、ほんとごめんfinally忘れて
0560デフォルトの名無しさん
2009/12/08(火) 22:03:36オトメン乙
0562デフォルトの名無しさん
2009/12/08(火) 22:06:45#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よく分からないけどどれかのデストラクタが呼ばれちゃうからダメだって
0564デフォルトの名無しさん
2009/12/08(火) 22:11:55int 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 に記述あり。
0565544
2009/12/08(火) 22:12:21ttp://codepad.org/6U9D9nMB
こんな感じで、確かにconstオブジェクトをnon constな参照で受け止めることもできているようです。
>>554氏の引用してくださった資料が決め手ですね。
0566デフォルトの名無しさん
2009/12/08(火) 22:21:410567デフォルトの名無しさん
2009/12/08(火) 22:27:11そしてその期待は規格により保証されている、と言いたいのですね?>>566
0568デフォルトの名無しさん
2009/12/08(火) 22:30:40適当だけど
0569デフォルトの名無しさん
2009/12/08(火) 23:14:19void temp(const hoge &h)
この2つは似たような意味ですが、どうやって使い分けているんですか?
参照があればポインタなんていらない気がするんですが
0570デフォルトの名無しさん
2009/12/08(火) 23:15:570571デフォルトの名無しさん
2009/12/08(火) 23:16:56参照だと途中で付け替えられないけどポインタなら付け替えられるでしょ?
参照だとC++専用だけどポインタならC言語でも使い回せるでしょ?
参照だとnullptrとかないけどポインタならあるでしょ?(C++0xからだけど。)
とかかな。
あとfactoryメソッドやりたいときにポインタじゃないと困る・・・とか?
(でも普通はスマートポインタか。)
0572デフォルトの名無しさん
2009/12/08(火) 23:22:08参照は参照渡し。
どちらも用途がある。
ローカル変数を参照渡し出来ない、不具合が出るとかある。
0573569
2009/12/08(火) 23:24:36こんなのがありました
安全性によって使い分けるのが、適切なのかな〜って思います
0574デフォルトの名無しさん
2009/12/08(火) 23:24:58> ローカル変数を参照渡し出来ない
別にアドレス渡し(ポインタ渡し)もできなくね?
0575デフォルトの名無しさん
2009/12/08(火) 23:34:400576デフォルトの名無しさん
2009/12/08(火) 23:47:32しかしそれはポインタも同じじゃないんですか?
0577デフォルトの名無しさん
2009/12/08(火) 23:50:080578デフォルトの名無しさん
2009/12/08(火) 23:53:52そんなあなたに
this->destructor()
0579デフォルトの名無しさん
2009/12/08(火) 23:54:110580デフォルトの名無しさん
2009/12/09(水) 01:49:23これ全部まちがいだよね?
0581デフォルトの名無しさん
2009/12/09(水) 03:04:50int i = 3;
throw i;
}
int main()
{
try{func();}catch(int &i){}
}
この場合、funcのスタックっていつ捨てられるの?
とっとと捨てられてるけど、コピーが投げられるの?だとしたらコピーコンストラクタが動くの?
はてなだらけですまんす><
0582デフォルトの名無しさん
2009/12/09(水) 04:26:23func() のスタック(ローカル変数のための領域)は、もちろん関数を抜けるまで有効。
関数を抜けた後、実際にいつ捨てられるかは実装の勝手。
これに対して例外オブジェクトとして投げられるオブジェクトのための領域の有効期間に
ついては >>554 にあるとおり。
コピーコンストラクタによるコピーが必要になることがほとんどだけど、関数に引数を
渡す場合や return で戻り値を返す場合と同様に省略可能なので、必ず呼び出される
とまでは言えない。
0583デフォルトの名無しさん
2009/12/09(水) 06:15:59なんて仕様だったら困るだろ。
0584デフォルトの名無しさん
2009/12/09(水) 06:36:50ただしそれは実装次第では省略可能ということで。
0585デフォルトの名無しさん
2009/12/09(水) 09:13:050586デフォルトの名無しさん
2009/12/09(水) 12:27:23「例外」
という方法を選んだんだろう?
(他に何があるかは知らんけど。)
他の言語ではそれが主流だったからとか?
0587デフォルトの名無しさん
2009/12/09(水) 12:29:15こういう馬鹿がたまにいるんだが、どう説得したら良い?
0588デフォルトの名無しさん
2009/12/09(水) 12:50:520589デフォルトの名無しさん
2009/12/09(水) 12:56:390590デフォルトの名無しさん
2009/12/09(水) 13:06:06メモリの所有者を明確にした上でRAIIを徹底できるなら別にスマポ要らないよね。
>>589
ディープコピーが必要な場合はJavaのcloneかserializeを真似る
0591デフォルトの名無しさん
2009/12/09(水) 14:51:09その真似たソースを見せてほしいです
0592デフォルトの名無しさん
2009/12/09(水) 14:57:40共有もしないし生成破棄タイミングも明確で開発・保守の際に間違いようがない場合(たとえば単純なpimplなど)
いちいちスマポ使うのは無意味。別に使っても見かけ上問題はないけど使う利点がない
さらに誤ってauto_ptrじゃなくて共有ポインタなんて使ったら参照カウンタ確保のための無意味なコストがかかる
>>587
「お前が完璧人間なのはわかったが、保守するかもしれないほかの人のことも考えてくれ」とでも言ってみるとか
0593デフォルトの名無しさん
2009/12/09(水) 15:01:290595デフォルトの名無しさん
2009/12/09(水) 17:10:460596デフォルトの名無しさん
2009/12/09(水) 18:06:31参照使わせろ。
0597デフォルトの名無しさん
2009/12/09(水) 18:39:070598デフォルトの名無しさん
2009/12/09(水) 20:01:48boost::make_shared
deleteと同じようにnewからも開放されるだけでなく、
shared_ptrが抱える例外安全性の落とし穴からも守ってくれます
0599デフォルトの名無しさん
2009/12/09(水) 20:13:28それ以外はc++の速度が失われる
0600デフォルトの名無しさん
2009/12/09(水) 20:39:530601デフォルトの名無しさん
2009/12/09(水) 21:34:28自分でmallocしたものは自分でfreeする
自分でfopenしたものは自分でfcloseする
自分でnewしたものは自分でdeleteする
そんな当たり前のことを当たり前に書けるのがC/C++の魅力のはず
0602デフォルトの名無しさん
2009/12/09(水) 21:46:43特に内容がない詩ばかりだが
0603デフォルトの名無しさん
2009/12/09(水) 21:53:01{
struct Y
{
struct Z
{
int i;
} z;
} y;
} x;
x.y.z.i = 0;
上のようにネストを深くしても変数へのアクセスコストはコンパイル時にかかるだけで実行時はネストレベルに関係ありませんよね?
0604デフォルトの名無しさん
2009/12/09(水) 21:53:08std::string s;
public:
Test(const std::string& s) {
this->s = s;
}
パラーメータを参照でもらって、メンバ変数を初期化したい。
ひとまずコンパイルが通ったのですが、これで大丈夫ですかね?
0605デフォルトの名無しさん
2009/12/09(水) 22:02:05残念ながらstructが被るとアライメント調整でsizeof(Y) != intになる可能性がある。
sizeof(Z) > sizeof(Y)にはならないが。
0606デフォルトの名無しさん
2009/12/09(水) 22:09:47Yにさらにパディングが入ることは考えづらいと思うが…
コンストラクタとか作るとどうなるかわかんないけど
PODだから大丈夫じゃないの?
0607デフォルトの名無しさん
2009/12/09(水) 22:35:590608デフォルトの名無しさん
2009/12/09(水) 22:39:21アクセス速度は全て定数時間
0609デフォルトの名無しさん
2009/12/09(水) 23:03:09>>601
居たww
まあきっとbetter Cとして使っているから
最新のパラダイム(ってほどでも無いけど、風潮)が理解できないのかな。
0610デフォルトの名無しさん
2009/12/09(水) 23:15:590611デフォルトの名無しさん
2009/12/09(水) 23:24:41おまえさんが何を探して何に笑っているのかがわからないが、それは置いておこう
いつの時代からかはご想像に任せるが、俺は「最新」を盲信はしない主義でね
色んな形で「圧力」を受けたことがあるが腐っても面従腹背はしない
間違っているものは間違っていると、本心から納得できないものに対しては常に言う
ちなみに、まだ C++ 「ではない」ものを紹介されたが
それとて抽象化レベルの観点から異を唱えたことに対する反論とは受け取っていないぞ
0612デフォルトの名無しさん
2009/12/09(水) 23:27:120613デフォルトの名無しさん
2009/12/09(水) 23:27:22それはない
0614デフォルトの名無しさん
2009/12/09(水) 23:34:580615デフォルトの名無しさん
2009/12/09(水) 23:36:05> 色んな形で「圧力」を受けたことがあるが腐っても面従腹背はしない
> 間違っているものは間違っていると、本心から納得できないものに対しては常に言う
よし、じゃあ早速鏡に向かって叫んでくれ。
0616デフォルトの名無しさん
2009/12/09(水) 23:44:32居るよね、こうして自分を盲信している人。
新しい技術について行けない
->その技術は悪い物だからいいんだ
これ、心理学的に適応機制って言うんだぜw
0617609
2009/12/09(水) 23:52:27・・・元はといえば俺のせい・・・か。
>>616
すっぱい葡萄 - Wikipedia
ttp://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
自分の心の柱を守るためには
まあそれも大事だろ。
0618デフォルトの名無しさん
2009/12/09(水) 23:56:31ム板におけるそのザマ自体が返事としては十分だ
十分だがつまんねーから寝るぜ
0619デフォルトの名無しさん
2009/12/09(水) 23:59:44>十分だがつまんねーから寝るぜ
age ながら言われてもな。
我が読解力では
いじめないでよ
もう逃げるから
としか読み取れない。
0620デフォルトの名無しさん
2009/12/10(木) 00:01:110621デフォルトの名無しさん
2009/12/10(木) 00:16:200622デフォルトの名無しさん
2009/12/10(木) 00:19:27C#とか絶対滅ぶ。間違いない。おれは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もしかして本人は本当に妥当な論述だと思ってたの?
0625デフォルトの名無しさん
2009/12/10(木) 00:41:530626デフォルトの名無しさん
2009/12/10(木) 00:52:26それは代入。メンバ変数を初期化するには初期化リストを使う。
0627デフォルトの名無しさん
2009/12/10(木) 01:05:09Javaの人はthis使いたがるけど。
0628デフォルトの名無しさん
2009/12/10(木) 01:10:140629デフォルトの名無しさん
2009/12/10(木) 01:21:010630デフォルトの名無しさん
2009/12/10(木) 01:35:33確保したものを解放する責任を放棄するための黒魔術が流行りすぎている
こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0631デフォルトの名無しさん
2009/12/10(木) 01:42:020632デフォルトの名無しさん
2009/12/10(木) 01:42:51正しい位置にジャンプする責任を放棄するための黒魔術が流行りすぎている
こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0633デフォルトの名無しさん
2009/12/10(木) 01:44:38正しいメモリにアクセスする責任を放棄するための黒魔術が流行りすぎている
こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0634デフォルトの名無しさん
2009/12/10(木) 01:47:36プログラムをマシンコードで組み上げる責任を放棄するための黒魔術が流行りすぎている
こんなの最新でも何でもない、ただの怠け癖を助長する麻薬だ
俺は吸いたくない
0635デフォルトの名無しさん
2009/12/10(木) 01:49:33そんなに嫌なの?苦痛なの?
妙な言語仕様を付けたり奇怪なトリックを使ったり無用なオーバーヘッドをかけてでも
眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?
おかしいだろう
他人(OSとか)から借りたものを用が済んだらお返しするのは道徳的にも技術的にも当然だ
そこから無理矢理逃げ回ることが最新でございというのは納得いかない
0636デフォルトの名無しさん
2009/12/10(木) 01:56:300637デフォルトの名無しさん
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> そんなに嫌なの?苦痛なの?
べつに。 RAII があるので楽チンです。
> 眼前から完全に排除抹殺しなきゃならないほど邪悪なものなの?
邪悪だから排除してるんじゃなくて、人間がやる必要は無いから機械に任せているだけ。
> 他人(OSとか)から借りたものを用が済んだらお返しするのは道徳的にも技術的にも当然だ
そうだね。 RAII はそのためのものです。
> そこから無理矢理逃げ回ることが最新でございというのは納得いかない
逃げ回る?
RAII はリソースを返さないで済ますためのものだと思ってるのかな?
0642デフォルトの名無しさん
2009/12/10(木) 02:10:59C++にはGCがないので当たり前のテクニックです
メモリリークしたくなかったら黙って使え
0643デフォルトの名無しさん
2009/12/10(木) 02:13:29こういうRAII信奉者にありがちなのが、解放に失敗がありうる状況だと途端に困っちゃうパターン
大体エラーを無視してRAIIを使い続けるという最悪の手段を選んで満足してしまう
やっぱり麻薬だ
0644デフォルトの名無しさん
2009/12/10(木) 02:17:16ここから特定のピクセル色を知りたいです。
何か関数は容易されてないでしょうか?
よろしくお願いします。
0645デフォルトの名無しさん
2009/12/10(木) 02:20:43こういう明示的リソース破棄信奉者にありがちなのが、処理中に失敗がありうる状況だと途端に困っちゃうパターン
大体例外を無視して明示的リソース破棄を使い続けるという最悪の手段を選んで満足してしまう
やっぱりアホだ
0646デフォルトの名無しさん
2009/12/10(木) 02:25:04ほぼ常に困りっぱなしじゃねぇかw
0647デフォルトの名無しさん
2009/12/10(木) 02:27:52RAIIで例外を無視しないようにしようとすると、原理的に
「例外を投げるデストラクタ」というC++最大級の法度を犯すことになる
だが、たまたまfreeやdeleteが失敗しないように出来てるので、
(operator deleteは失敗させられるけど普通は禁忌とされてる)
RAII信者は「解放が失敗するかもしれない」なんてことは考えもせず
そういう場合はRAIIを捨てなければならないという判断を下すことが出来ない
だから怖いんだよ
0648デフォルトの名無しさん
2009/12/10(木) 02:40:35明示的リソース破棄で例外を無視しないようにしようとすると、原理的に
「同じコードを何箇所にもばらまく」というプログラミング最大級の法度を犯すことになる
だが、たまたま C 時代のライブラリは例外を投げないように出来てるので、
( qsort() や bsearch() は投げることがあるけど普通はそんな比較関数は使わない)
明示的リソース破棄信者は「処理中に例外が発生するかもしれない」なんてことは考えもせず
そういう場合は明示的リソース破棄を捨てなければならないという判断を下すことが出来ない
だから怖いんだよ
0649デフォルトの名無しさん
2009/12/10(木) 02:44:390650デフォルトの名無しさん
2009/12/10(木) 02:49:430651デフォルトの名無しさん
2009/12/10(木) 02:59:52int *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:230653デフォルトの名無しさん
2009/12/10(木) 03:25:43ただスマポ等を黒魔術と言ってる人(ネタだと思うけど)は
上に書いたのをどう処理してるのかなと
0654デフォルトの名無しさん
2009/12/10(木) 03:26:510655デフォルトの名無しさん
2009/12/10(木) 03:41:33C++使う資格がない
だいたいデストラクタはメモリリークだけでなく一般的なリソースの
解放もできるのでGCより原理的に優れているんだ
使い方が面倒なだけで
0656デフォルトの名無しさん
2009/12/10(木) 03:42:400657デフォルトの名無しさん
2009/12/10(木) 03:48:14あんたも頑固だな
Javaでも使えカス
0658デフォルトの名無しさん
2009/12/10(木) 03:55:33vector<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:080660デフォルトの名無しさん
2009/12/10(木) 04:01:090661デフォルトの名無しさん
2009/12/10(木) 04:04:11intの実体がレジスタにあったとしても、int*はメモリに確保されるだろ。
int*を読んで、アドレスを特定してintを読みに行く。
intを直接読むより、手間とメモリが倍掛かる。 アドレス分。
超初心者だろ。・
0662デフォルトの名無しさん
2009/12/10(木) 04:06:37実行時となるとアドレス渡しでしか解決方法がないからここでポインタと参照を引き合いに出し合うのはナンセンス
0663デフォルトの名無しさん
2009/12/10(木) 04:06:57アドレス読んでから実体にたどり着く部分と
メモリの無駄を無くすため。
0664デフォルトの名無しさん
2009/12/10(木) 04:09:47中身ではなくてまずここを変えれって事
void AddVec(vector<int> v)
→
void AddVec(vector<int> &v)
それに参照かポインタ渡しにしないと
元のvectorは変化しないが。
0665658
2009/12/10(木) 05:14:20知りたかったのは
DATA d;
v.push_back(d); // ここで勝手にコピーコンストラクタが呼ばれるの?
ということでした。
スタックに作られた変数を積んだら、
関数から戻ったときに実体なくなるよなぁ・・・って思ったので
0666デフォルトの名無しさん
2009/12/10(木) 05:19:15いまさら何を。
素直に私の頭じゃ理解できません首にしないでくださいって言えよww
0667デフォルトの名無しさん
2009/12/10(木) 05:33:31複雑なコードの自動生成をしたいとすると
「プリプロセッサを自作する」
と言う話を聞きました。
…それってよくあることなんでしょうか?
0668デフォルトの名無しさん
2009/12/10(木) 05:58:20やろうと思ったことはあるが、
途中で冷静になってやめたわ(笑)
0669デフォルトの名無しさん
2009/12/10(木) 05:58:31Qtがそうじゃ無かったかな?
0671デフォルトの名無しさん
2009/12/10(木) 09:20:23つくる能力がないだけ。
0672デフォルトの名無しさん
2009/12/10(木) 10:25:170673デフォルトの名無しさん
2009/12/10(木) 10:27:440674デフォルトの名無しさん
2009/12/10(木) 10:29:20なるほど、ありがとうございます
0675デフォルトの名無しさん
2009/12/10(木) 10:39:18お礼を言われるほどではない
0676デフォルトの名無しさん
2009/12/10(木) 12:53:32C++の場合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>name spaceはjavaのパッケージと同じ事はわかりました
わかってねぇ…
0679デフォルトの名無しさん
2009/12/10(木) 13:12:20だったらわかるように説明してやれよ
できないのか?ん?
0680デフォルトの名無しさん
2009/12/10(木) 13:14:340681デフォルトの名無しさん
2009/12/10(木) 13:42:51newでオブジェクトの配列を初期化したとき={}で初期化できないんですがどうやりますか?
0682デフォルトの名無しさん
2009/12/10(木) 13:44:24C++でnamespaceをJavaのpackageと同じように使うのだけはヤメロ。
昔そういうコーディング規約を採用した会社を知っているが、
またたく間に会社が潰れ、社員の半数近くが悲惨な死を遂げた。南無。
0683デフォルトの名無しさん
2009/12/10(木) 13:54:07のようにイコールをつけないことが分かったのでもういいです。
0684デフォルトの名無しさん
2009/12/10(木) 14:22:09それじゃただの FUD にしかならん。
具体的に何がマズかったの?
0685デフォルトの名無しさん
2009/12/10(木) 15:18:52そういうのの逆verです。
0686デフォルトの名無しさん
2009/12/10(木) 17:53:19ファイルシステム上のディレクトリ構成とは無関係に階層を作れるのが(パッケージと比較しての)名前空間の特徴の1つ。
実際、ディレクトリと名前空間の階層が一致しない構成は良くある。
どういう構成にするのかはどちらかというとコーディング規約の範疇。
良くも悪くもコンパイラは関与しないので。
0687デフォルトの名無しさん
2009/12/10(木) 18:27:08あと、そもそもC++にディレクトリという概念は存在しない…よな?
0688デフォルトの名無しさん
2009/12/10(木) 18:28:49お前の話は聞いてねぇよwwwwwww
0689デフォルトの名無しさん
2009/12/10(木) 19:21:350690デフォルトの名無しさん
2009/12/10(木) 20:01:040691デフォルトの名無しさん
2009/12/10(木) 20:02:220692デフォルトの名無しさん
2009/12/10(木) 20:10:31一理ある
0693デフォルトの名無しさん
2009/12/10(木) 20:47:47存在しないと思うよ。存在していたら、今わざわざapi叩いてフォルダ
扱うライブラリ作っていないw
boostだと日本語だめなんだよね。使えたら便利なんだけど。
0694687
2009/12/10(木) 21:14:06さらにインクルードパスの指定についても実は環境依存なんだよね。その意味も込めてのディレクトリの概念存在しない説。
0695デフォルトの名無しさん
2009/12/10(木) 22:19:33thx
0696デフォルトの名無しさん
2009/12/10(木) 22:31:590697デフォルトの名無しさん
2009/12/10(木) 22:34:240698デフォルトの名無しさん
2009/12/10(木) 22:43:240699デフォルトの名無しさん
2009/12/10(木) 22:45:420700デフォルトの名無しさん
2009/12/10(木) 22:50:270701デフォルトの名無しさん
2009/12/10(木) 22:51:170702デフォルトの名無しさん
2009/12/10(木) 22:52:150703デフォルトの名無しさん
2009/12/10(木) 22:52:18boostからスマートポインタ部分だけ分離したいけど
多方面に関係して諦めた
0704682
2009/12/10(木) 23:12:51今さらって感じMAXで、申し訳ありません
JDのソースでnamespaceを見てみたら、javaのパッケージみたいになっていました
ktorrentのソースはjavaっぽくない
0705704
2009/12/10(木) 23:14:080706デフォルトの名無しさん
2009/12/10(木) 23:26:23std::map<std::pair<first, second>, value> とかにすればいいでしょ
3つ以上ならなら
std::map<std::tr1::tuple<省略>, value>とか
0707デフォルトの名無しさん
2009/12/10(木) 23:30:29int 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間違えたなら謝罪くらいしましょう
0709デフォルトの名無しさん
2009/12/10(木) 23:34:130710デフォルトの名無しさん
2009/12/10(木) 23:43:090711デフォルトの名無しさん
2009/12/10(木) 23:45:150712デフォルトの名無しさん
2009/12/10(木) 23:47:020713デフォルトの名無しさん
2009/12/10(木) 23:47:510714デフォルトの名無しさん
2009/12/11(金) 00:02:17これが変換不可能になります。どうすればいいですか
shared_ptr<NODE> node;
tserach( (void*)node );
error
shared_ptr<NODE> から void * へのキャストはできない (関数 main() )
0715デフォルトの名無しさん
2009/12/11(金) 00:03:130716デフォルトの名無しさん
2009/12/11(金) 00:05:44NODEのメンバでスマートポインタ使っていれば
それはnodeを参照している物がなくなれば回収されますか。
0717デフォルトの名無しさん
2009/12/11(金) 00:07:35shared_ptr<NODE> node;
で置き換えてるので
それだと駄目と思うんですが。
0718デフォルトの名無しさん
2009/12/11(金) 00:13:48どうりであんなに遅かったのか
0719デフォルトの名無しさん
2009/12/11(金) 00:37:13#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);
}
}
0720716
2009/12/11(金) 00:41:33#include <string>
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;
class cls {
public:
shared_ptr<string> str;
cls(){ str=shared_ptr<string>(new string);str->resize(1<<20,'a'); }
};
void fnc(shared_ptr<cls> p){
//cout<<p->str->substr(0,10)<<endl;
}
int main(){
int n;
for(n=0;n<1000;n++) {
shared_ptr<cls> p=shared_ptr<cls>(new cls);
cout<<n<<endl;
fnc(p);
}
}
0721719
2009/12/11(金) 00:44:11これは回収できないですか。
クラス内でスマートポインタ使っていても、本体がメモリに
存在するから無意味ですか。
0722デフォルトの名無しさん
2009/12/11(金) 00:57:12ポインタのポインタのようになってふくざつになりましたがこれで
メモリリークはしてないです。
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生存させる方法ありますか。
これ出来たら簡単なのですが。
0724デフォルトの名無しさん
2009/12/11(金) 01:05:43unsigned 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解放してないんだからあたりまえ。
>>720
こっちもあたりまえ。
0726デフォルトの名無しさん
2009/12/11(金) 01:42:00ありません。
そんなことがしたい場合は new で作って shared_ptr で参照を持つようにするのが常套手段です。
0727デフォルトの名無しさん
2009/12/11(金) 01:53:11ヒントから、関数内でポインタ解放したら、スマートポインタ働いてメモリリーク無くなりました。
こっちのほうが簡単ですね。サンクス。
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解放されずスマートポインタの効果が実証できました。
#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);
}
}
0729728
2009/12/11(金) 02:18:340730デフォルトの名無しさん
2009/12/11(金) 02:55:13とりあえず new と delete とスマートポインタについてひととおりネットなり本なりで勉強しなおせ。
ここに書かなくていいから。
0731デフォルトの名無しさん
2009/12/11(金) 11:30:50javaとかの言語はC++の参照しかないのに、ちゃんとプログラミングできるじゃないですか
0732デフォルトの名無しさん
2009/12/11(金) 11:32:08「Javaでちゃんとプログラムできる」
という時点で間違っている。^^
あんな言語で何をちゃんとできるというのだ。w
0733デフォルトの名無しさん
2009/12/11(金) 11:40:23iteratorを考えたら決してレガシーになってないぞ。むしろ昇華されてる。
あと各種API関係で使うからそれは避けようがないし。
0734デフォルトの名無しさん
2009/12/11(金) 13:07:17C でできることは C++ でもできなければならない。
…C99 で崩れちゃったけども。
0735デフォルトの名無しさん
2009/12/11(金) 13:12:02ならば、どうしてヌルポになるのだ?
0736デフォルトの名無しさん
2009/12/11(金) 13:42:03向こうから振ってこられても話すな
0737デフォルトの名無しさん
2009/12/11(金) 13:51:59一言余計だ。反省しなさい。
0738デフォルトの名無しさん
2009/12/11(金) 15:28:52貴様…ぬるぽ誕生の歴史を繰り返そうというのか…ッ!
0739デフォルトの名無しさん
2009/12/11(金) 16:51:56これをC++スレで言われても何にもならないという現実を理解してください
0740デフォルトの名無しさん
2009/12/11(金) 16:57:290741デフォルトの名無しさん
2009/12/11(金) 17:00:030742デフォルトの名無しさん
2009/12/11(金) 17:01:58がっ
0743デフォルトの名無しさん
2009/12/11(金) 17:03:570744デフォルトの名無しさん
2009/12/11(金) 17:57:130745デフォルトの名無しさん
2009/12/11(金) 17:58:34vitrual ~nullpointer_exception(){}
};
0746デフォルトの名無しさん
2009/12/11(金) 18:02:35{
e.galtu();
}
0747デフォルトの名無しさん
2009/12/11(金) 20:24:18書いたのがC畑の人なんじゃないの?
0748デフォルトの名無しさん
2009/12/11(金) 20:38:560749デフォルトの名無しさん
2009/12/11(金) 20:58:130750デフォルトの名無しさん
2009/12/11(金) 21:04:130751デフォルトの名無しさん
2009/12/11(金) 21:12:19thx
0752デフォルトの名無しさん
2009/12/11(金) 21:13:380753デフォルトの名無しさん
2009/12/11(金) 21:15:090754デフォルトの名無しさん
2009/12/11(金) 21:22:190755デフォルトの名無しさん
2009/12/11(金) 21:23:150756デフォルトの名無しさん
2009/12/11(金) 21:39:440757デフォルトの名無しさん
2009/12/11(金) 21:58:530758デフォルトの名無しさん
2009/12/11(金) 22:06:06男なら0と1だけでプログラミングくらいしてみせぃ!
0759デフォルトの名無しさん
2009/12/11(金) 22:11:500760デフォルトの名無しさん
2009/12/11(金) 22:20:16つまり、stlは標準に近いけどおまけみたいな感じ?
0761デフォルトの名無しさん
2009/12/11(金) 22:35:21C++ Reference (ttp://www.cplusplus.com/reference/stl/vector/)
に載ってないんだけど何故?
グローバル関数だから?
# これを知らないばかりに無駄なソースコードが大量に・・・。
0762デフォルトの名無しさん
2009/12/11(金) 22:40:390763デフォルトの名無しさん
2009/12/11(金) 23:26:43だれか動画探索プログラムのやり方わかる方いらっしゃいますか?
0764デフォルトの名無しさん
2009/12/11(金) 23:32:300765デフォルトの名無しさん
2009/12/11(金) 23:32:36アイディア盗まれるしやっぱり書き込まなきゃよかった
0766デフォルトの名無しさん
2009/12/11(金) 23:34:560767デフォルトの名無しさん
2009/12/11(金) 23:49:220769デフォルトの名無しさん
2009/12/11(金) 23:58:260770デフォルトの名無しさん
2009/12/12(土) 00:03:38しかし、書いてみると書く前のウハウハとは違う気持ちが沸いてくる
0771デフォルトの名無しさん
2009/12/12(土) 01:32:50Standard Template Library は C++ Standard Library の一部として取り込まれました。
0772デフォルトの名無しさん
2009/12/12(土) 02:22:04エロサイトを基準として探索してひたすらダウンロードするだけなら作ったことあるけど、
ネットは広大だな、と思って全部捨てたわ
0773デフォルトの名無しさん
2009/12/12(土) 10:56:000774デフォルトの名無しさん
2009/12/12(土) 13:29:510775デフォルトの名無しさん
2009/12/12(土) 15:46:20今更なにを。。。
0776デフォルトの名無しさん
2009/12/12(土) 15:52:160777デフォルトの名無しさん
2009/12/12(土) 15:54:160778デフォルトの名無しさん
2009/12/12(土) 16:02:560779デフォルトの名無しさん
2009/12/12(土) 17:46:34classのヘッダ内で行列を定義しようとすると
error: expected identifier before numeric constant
error: expected ‘,’ or ‘...’ before numeric constant
ってエラーが起こるんですけど、原因わかる方いましたらお願いします。
0780デフォルトの名無しさん
2009/12/12(土) 17:57:46エラーが出てるところ意外を削って問題が再現する最小限のコードを作ってみるといい。
0781デフォルトの名無しさん
2009/12/12(土) 18:41:23とりあえずその辺のサイトのソースを参考にクラス化してテストするとこうなりました。
boostのスレで聞いた方が良いのでしょうか?
0782デフォルトの名無しさん
2009/12/12(土) 18:48:29C++の仕様をちゃんと覚えてからboost覚えなさい
0783デフォルトの名無しさん
2009/12/12(土) 18:56:17もっと削れるだろ。
struct test { int x(0); };
0784デフォルトの名無しさん
2009/12/12(土) 18:57:260785デフォルトの名無しさん
2009/12/12(土) 18:58:19C++ には無いが、 C++ プログラマにはある。
0787デフォルトの名無しさん
2009/12/13(日) 01:38:010788デフォルトの名無しさん
2009/12/13(日) 01:40:310789デフォルトの名無しさん
2009/12/13(日) 01:41:250790デフォルトの名無しさん
2009/12/13(日) 01:47:170791デフォルトの名無しさん
2009/12/13(日) 01:48:03class flexible_deque : public std::deque<mem>{ ... };
構造的に、flexible_dequeの各々の要素のptrがまちまちなサイズの確保されたメモリ領域を指している形になる。
これなら既存の領域を包括するメモリを再度アロケートする必要はない。
operator []とかは自分で考えろ
0792デフォルトの名無しさん
2009/12/13(日) 02:58:18ああCのrealloc()みたいのがないって話か
newはコンストラクタ呼び出しを伴い、またオブジェクトのコピーは
コピーコンストラクタや代入演算子を呼び出すのでrealloc()に
相当する物は意味があまりないとして削られたんだな
0793デフォルトの名無しさん
2009/12/13(日) 05:15:53いろんなソフトである
0794デフォルトの名無しさん
2009/12/13(日) 06:37:2264K 128Kなど固定長ブロックを保持する方が無駄が少ない
0795デフォルトの名無しさん
2009/12/13(日) 10:39:47C++でもclassではなくPOD型を扱う時はmalloc/freeで十分
まあ俺はそういう場合でもnew/deleteで統一してるけどな
0796デフォルトの名無しさん
2009/12/13(日) 10:41:06作業用に使う時はどちらを使えばいいのですか?
0797デフォルトの名無しさん
2009/12/13(日) 10:43:53class間で共通したい作業ならstaticメソッド
そうでなければ普通の関数
別にどっちでもいいんだが、そういう風にかき分けると読む人に
意図が伝わりやすい
0798デフォルトの名無しさん
2009/12/13(日) 10:50:20どっちでも同じじゃないや
staticメソッドはprivate属性やprotected属性、const属性を
付ける事が出来るので、classに関連した操作はstaticメソッドで
やるべきだな
0800デフォルトの名無しさん
2009/12/13(日) 10:58:17staticメソッドにはthisポインタが渡らないので、極端な話を言えば
インスタンスを一つも作らなくても使える
例えば
struct Test {
static void pirnt() { cout << "Hello" << endl; }
};
とやってインスタンスを作らず
Test::print();
とやれば呼び出せる
共通してやりたい作業とは、例えばインスタンスが今いくつ存在するかの
カウンタを入れたい時とか
カウント式のスマートポインタを作る場合に使えるね
0801デフォルトの名無しさん
2009/12/13(日) 11:14:15作業用がなんの作業かによるだろ
0803デフォルトの名無しさん
2009/12/13(日) 11:54:58(1
private、protectedなメンバ変数/関数にアクセスせず、
一つのファイルでしか使わないなら
// xxxx.cpp
namespace {
関数();
}
(2
private、protectedなメンバ変数/関数にアクセスせず、
外部に公開したいなら
普通の関数();
(3
private、protectedなメンバ変数/関数にアクセスして、
外部に非公開にしたいなら
class hoge {
private:
非静的メンバ関数();
静的メンバ関数(hoge&);
};
0804デフォルトの名無しさん
2009/12/13(日) 11:55:39private、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#ifは小数の比較はできないのですか?
0806デフォルトの名無しさん
2009/12/13(日) 17:59:14関数テンプレートの部分特殊化は禁じられている
この仕様はどうしてこうなのですか?
深い理由があってのことでしょうか?
0807デフォルトの名無しさん
2009/12/13(日) 18:00:030808デフォルトの名無しさん
2009/12/13(日) 18:16:580809デフォルトの名無しさん
2009/12/13(日) 20:32:22cppをincludeすると一応分割はできる。
C++にもパーシャルクラス欲しいよな。
0810デフォルトの名無しさん
2009/12/13(日) 20:37:4610000行ならよほど低スペックマシンじゃない限り許容範囲じゃね?
0811デフォルトの名無しさん
2009/12/13(日) 20:40:590812デフォルトの名無しさん
2009/12/13(日) 21:10:54ifstream 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:08ifs >> s;
if (s == "○"){
0814デフォルトの名無しさん
2009/12/13(日) 21:14:380815デフォルトの名無しさん
2009/12/13(日) 21:15:570816デフォルトの名無しさん
2009/12/13(日) 21:17:09人間のスペック的な問題だろ
てかそのクラスはでかすぎると思う
どんなクラスなんだろう
0817デフォルトの名無しさん
2009/12/13(日) 21:18:18{
0818デフォルトの名無しさん
2009/12/13(日) 21:21:35{
:
class Enemy00
{
:
};
class Enemy01
{
:
};
(インナークラスがたくさん)
};
敵の種類が多くなりすぎてcppの行数が一万行越えますた。。
設計的には悪くないと思っている。
0819デフォルトの名無しさん
2009/12/13(日) 21:27:060820デフォルトの名無しさん
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:560824デフォルトの名無しさん
2009/12/13(日) 21:38:56・・・と、ものしりっくに書いてみた^^。
0825デフォルトの名無しさん
2009/12/13(日) 21:40:480826812
2009/12/13(日) 21:42:32つまり、"○"の部分にインデックス番号(i)が入ると、インデックスがiの列だけを取り出して処理を行いたい。
0827デフォルトの名無しさん
2009/12/13(日) 21:45:170828デフォルトの名無しさん
2009/12/13(日) 21:45:46ファイル分割に関しては>>809が既に解決策を提示している
0829デフォルトの名無しさん
2009/12/13(日) 21:47:09VBのように自動で文字列⇔数値に変換する機能はありません。^^
boost::lexical_castを使いましょう。
localeにも対応する強力なライブラリです。
0830デフォルトの名無しさん
2009/12/13(日) 21:49:550831デフォルトの名無しさん
2009/12/13(日) 21:51:07いっぺんまるごと読んでstringの配列に行を保存すれば?
0832デフォルトの名無しさん
2009/12/13(日) 21:57:14>>820
お手本の設計教えてくださいよ。
0833デフォルトの名無しさん
2009/12/13(日) 21:58:59「○○が対案を求めてる」なんて誰も言ってないと思うが。
何につっかかってるの?
0834デフォルトの名無しさん
2009/12/13(日) 21:59:24ファクトリ使えよクズ
0835デフォルトの名無しさん
2009/12/13(日) 22:03:14冗談で言ってるんだよね?
設計が悪いとかってのはファイル分割が
出来てない時点で...
0836デフォルトの名無しさん
2009/12/13(日) 22:06:150837デフォルトの名無しさん
2009/12/13(日) 22:08:120838デフォルトの名無しさん
2009/12/13(日) 22:40:31思わせぶりなことしか書けない無能なら
いちいち出てこなくていいのに。
0839デフォルトの名無しさん
2009/12/13(日) 22:41:26はあ?おまえがでてくるな
0840デフォルトの名無しさん
2009/12/13(日) 22:43:34仕様とお前のコード晒せよ
ボロクソにこき下ろしたあとにお手本見せてやるよ
0841デフォルトの名無しさん
2009/12/13(日) 22:49:030842806
2009/12/13(日) 22:53:350843デフォルトの名無しさん
2009/12/13(日) 22:54:06問題は他にも山積みなんだろうけど
0844デフォルトの名無しさん
2009/12/13(日) 22:55:29オーバーロードとごっちゃになるし、オーバーロードで事足りるからでは
0845デフォルトの名無しさん
2009/12/13(日) 22:56:580846デフォルトの名無しさん
2009/12/13(日) 23:00:560847デフォルトの名無しさん
2009/12/13(日) 23:05:28小学生でもわかることなのに
0848デフォルトの名無しさん
2009/12/13(日) 23:08:490849デフォルトの名無しさん
2009/12/13(日) 23:10:37小学生でも?ほう・・・
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馬鹿でも食い下がれるトコでだけ頑張らなくていいですよ、無能さん。
0852デフォルトの名無しさん
2009/12/13(日) 23:18:06じゃあ俺はお前の稚拙な手本をこき下ろすわw
0853806
2009/12/13(日) 23:21:01std::swapの特殊化をする時にテンプレートを使って特殊化したい
等が確かEffective C++でも挙げられていたと思います。
C++0xでできるようになればいいのですが。
期待できないですね。
0854デフォルトの名無しさん
2009/12/13(日) 23:29:11作ったことないくせに一生懸命作ってる奴に文句だけ言って何のアドバイスもなしとかもう人間として本当の意味でレベルが低いというかこの手の卑しい人間は育ちが悪いとしかいいようがない。
0855デフォルトの名無しさん
2009/12/13(日) 23:31:050856デフォルトの名無しさん
2009/12/13(日) 23:32:29それは名前空間stdの禁止事項を緩和すればいい話です
部分特殊化が必要なのではなく、STLの設計が良くないということです
多分
0857デフォルトの名無しさん
2009/12/13(日) 23:39:22template < typename T >
std::swap < boost::shared_ptr< T > >{〜}
>STLの設計が良くないということです
もう一度言い直してくれ。
0858デフォルトの名無しさん
2009/12/13(日) 23:45:46どうにも2種類あるように思えてならないのですが。
このあたり扱いはどうなっているのでしょうか?
0859デフォルトの名無しさん
2009/12/13(日) 23:52:230860デフォルトの名無しさん
2009/12/14(月) 00:00:00class 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浮動小数点で仮数部と指数部が0で符号ビットが1のときじゃなかったっけ?<-0
0862デフォルトの名無しさん
2009/12/14(月) 00:08:14template<typename T>
std::swap(boost::shared_ptr<T>&,boost::shared_ptr<T>&){}
は文法違反ですか?
0863デフォルトの名無しさん
2009/12/14(月) 00:27:260864デフォルトの名無しさん
2009/12/14(月) 00:34:52それだと std::swap が隠れちゃって不便なときがあるんじゃ
0865デフォルトの名無しさん
2009/12/14(月) 00:36:070866デフォルトの名無しさん
2009/12/14(月) 00:40:270867デフォルトの名無しさん
2009/12/14(月) 00:48:30そんなもんだ。
0868デフォルトの名無しさん
2009/12/14(月) 00:57:020869デフォルトの名無しさん
2009/12/14(月) 01:03:08そうだな。>>854にも言ってやれよ。
0870デフォルトの名無しさん
2009/12/14(月) 01:31:31特に「狭い」奴が>>869みたいなヒスっぽいレス返すのも想定の上で。
0871デフォルトの名無しさん
2009/12/14(月) 01:50:37どうすればいい?
0872デフォルトの名無しさん
2009/12/14(月) 01:53:310873デフォルトの名無しさん
2009/12/14(月) 01:57:36気にすることはない?
0874デフォルトの名無しさん
2009/12/14(月) 02:03:36一応 v.at(4)=x; という書き方もあって、こっちは要素が足りないと例外投げる
(v[4]は未定義動作になる)
ただし恐ろしく遅いので存在が保証されてれば[]を使うべき
という話を誤解したか歪めて伝えてるバカがいるんだな
0875デフォルトの名無しさん
2009/12/14(月) 02:05:230877876
2009/12/14(月) 07:01:07○等価
0878デフォルトの名無しさん
2009/12/14(月) 08:33:39等価学会
0879デフォルトの名無しさん
2009/12/14(月) 15:56:100880デフォルトの名無しさん
2009/12/14(月) 16:15:15横書きの日本文に「,.」を用いるのは朝鮮人だよ。日本語は横書きでも「、。」が正しい。
韓国語では、縦書き文書では「、」が用いられ、横書き文書では「,」が用いられる。
この用い方は統一されているため、縦書き文書に「,」を、横書き文書に「、」を用いるのは誤り。
だから日本語で書くときもカンマピリオドの癖が出るんだろうね。
0881デフォルトの名無しさん
2009/12/14(月) 16:18:380882デフォルトの名無しさん
2009/12/14(月) 16:21:48なんで技術系誌や論文ではカンマとピリオドを使うんだろうな?
カンマはともかく, ピリオドは見づらいわ.
0883882
2009/12/14(月) 16:27:25これが元か。
ピリオドを使う奴はバカと思うことにした。
スレ違い失礼
0884デフォルトの名無しさん
2009/12/14(月) 18:53:49お前、教養のある他の人様に見てもらう
公式文書とか書いたことないだろ。
・・・ま、お前のレベルでは必要のないことだから
気にしなくて良いよ。
0885デフォルトの名無しさん
2009/12/14(月) 18:56:21えっ・・・
0886861
2009/12/14(月) 19:07:05規格的な話は分からないのだが
+0 0 -0 としたときに
+0 は“表現できる絶対値が最小の値”と0の間の正の値。
-0 は“表現できる絶対値が最小の値”と0の間の負の値。
とりあえずこっちの環境(C++)では等価として扱われているけどすべての言語体系で等価であるとは限らないから注意したほうがいいと思う
C++の規格としてどうかは詳しい人に聞いておくれ
0887デフォルトの名無しさん
2009/12/14(月) 19:13:360888デフォルトの名無しさん
2009/12/14(月) 19:59:50ってか0とepsの間なんてあったっけ
0889デフォルトの名無しさん
2009/12/14(月) 20:18:01ライブラリの中で try - catch しても、呼び出し側で try - catch しても
捕捉できないのですがそういうものですか?
0890デフォルトの名無しさん
2009/12/14(月) 20:32:110891デフォルトの名無しさん
2009/12/14(月) 20:36:45自分で作ったライブラリで起きた例外がどうやっても catch できないのですが
どうやって catch すればいいですか、という意味です。
0892デフォルトの名無しさん
2009/12/14(月) 20:37:49召喚獣は6体しか使えないは嘘。隠し含めて12体
セラがルシになってクリスタルになるまでは一本道
中盤で訪れるエデンにファルシがいて、ちょっとしたクライマックスになる。
終盤で過去のエデンに行った時にルシになる前のライトニングがいて、セラは実の妹ではなく記憶がファルシに植え付けられていたことを知る。
記憶を取り戻してからは、オーディンの姿やアビリティが変化する。
ラ ス ダ ンはコクーンシティ。機械と融合したファルシの暴走と司教の陰謀を止めるのが最終目標。
ラ ス ボ スは司教エスラクゥス・マター。3回変身して最後はデスピサロみたいになる。
EDラストは3年後に仲間がみんな集まって再会。墓地で誰かの墓参りかと思ったら、ライトニングの墓。
墓石に本名のセラフィナ・ラ・マターと刻まれているのが映ってジエンド。
0893デフォルトの名無しさん
2009/12/14(月) 21:15:39荒削り。だが、それが良い。
風を捕まえろ。
0894デフォルトの名無しさん
2009/12/14(月) 22:41:24ありがとうございます。
0895デフォルトの名無しさん
2009/12/15(火) 01:12:41ライブラリじゃなければ補足できたものがライブラリにまとめたらできなくなったってこと?
環境とかコードとか出さないと話にならない気がする。
0896デフォルトの名無しさん
2009/12/15(火) 02:07:21ホント?
本体ごと買う為の動機をありがとう^^
0897デフォルトの名無しさん
2009/12/15(火) 13:01:00class templatesのテンプ引数を<int T>のようにやって
Tの数ごとに特殊かして実装のみ変えた別バージョンクラスを作ろうとおもっているのですが、
このやりかたは本に乗ってないので何かいけない理由とかあるんですか?
あと、Tをテンプレート引数にしたら実行時にメモリーを多く消費したりしませんよね?
0898デフォルトの名無しさん
2009/12/15(火) 13:11:59何の本か知らないが全部の事柄をいちいち説明してたらキリがないから独断と偏見で不要と思われた部分を端折ったのでは
コードが増えるぶんのメモリは消費するけどそれ以上に何か消費したりはしない
0899デフォルトの名無しさん
2009/12/15(火) 13:21:200900デフォルトの名無しさん
2009/12/15(火) 13:22:510901デフォルトの名無しさん
2009/12/15(火) 13:26:070902デフォルトの名無しさん
2009/12/15(火) 13:44:02コードサイズが増えれば、実行時にその増えたコードをロードするためのメモリ領域が必要になる
テンプレートの規模にもよるし実装方法にもよるし使い方にもよるけれど
いまどき数MB増えたくらいじゃびくともせんよって人もいれば、1KBでも削りたいって人もいるかもしれない
俺は幸い気にしないで済んでる気楽な身だが、あなたがどうなのかは俺にはわからないので
0903デフォルトの名無しさん
2009/12/15(火) 15:36:14いまどき古すぎてネットでも余り書く方がいないようで、なかなか良い資料が見つかりません。
どうか参考となるサイトを教えて下さい。
0904デフォルトの名無しさん
2009/12/15(火) 15:56:40だがTEXTセクションがROMに配置されるようになっていたらどうかな?
0905デフォルトの名無しさん
2009/12/15(火) 16:19:14ROMをいっぱい使うだけじゃね?
お前の中ではROMはメモリに含まれないの?
0906デフォルトの名無しさん
2009/12/15(火) 16:30:480907デフォルトの名無しさん
2009/12/15(火) 17:33:060908デフォルトの名無しさん
2009/12/15(火) 17:54:40ふーん。
0909デフォルトの名無しさん
2009/12/15(火) 17:56:100910デフォルトの名無しさん
2009/12/15(火) 18:01:440911デフォルトの名無しさん
2009/12/15(火) 18:20:370912デフォルトの名無しさん
2009/12/15(火) 18:29:020913デフォルトの名無しさん
2009/12/15(火) 19:02:50っておい
0914デフォルトの名無しさん
2009/12/15(火) 19:44:250915デフォルトの名無しさん
2009/12/15(火) 19:50:090916デフォルトの名無しさん
2009/12/15(火) 19:51:32C// C言語コメント
0917デフォルトの名無しさん
2009/12/15(火) 20:01:200918デフォルトの名無しさん
2009/12/15(火) 20:39:02初心者でもとっつきやすいものができればよいのですが…
よろしくお願いします
0919デフォルトの名無しさん
2009/12/15(火) 20:55:480920デフォルトの名無しさん
2009/12/15(火) 21:02:08ソケット扱いたいんですという質問だったら自分もおすすめなんだけど。
0921デフォルトの名無しさん
2009/12/15(火) 21:18:41オーバーロードを使わず、
デフォルト引数にしたほうが
いいのですか?
(どちらでも書けるとして。)
0922デフォルトの名無しさん
2009/12/15(火) 21:22:260923デフォルトの名無しさん
2009/12/15(火) 21:24:03え?
0924903
2009/12/15(火) 21:24:220925デフォルトの名無しさん
2009/12/15(火) 22:16:48ってやるヤツって何なの?
0926デフォルトの名無しさん
2009/12/15(火) 22:54:180927デフォルトの名無しさん
2009/12/15(火) 22:58:010928925
2009/12/15(火) 23:00:49俺が言いたいのは
std名前空間にせっかく入れてあるのにわざわざ引っ張り出してくる
プログラマって何なの!?
って言いたかったのだ。
0929デフォルトの名無しさん
2009/12/15(火) 23:01:260930デフォルトの名無しさん
2009/12/15(火) 23:02:23何も起こらなくなる。
0931デフォルトの名無しさん
2009/12/15(火) 23:02:35ふふふ知りたいか?
0932デフォルトの名無しさん
2009/12/15(火) 23:04:07constなインスタンスからもメンバ関数を呼べるようになる。
代わりに、すべてのメンバ変数とthisがconst扱いになる。
0935デフォルトの名無しさん
2009/12/15(火) 23:34:47sutorakuto obujekuto;
const sutorakuto konsuto_obujekuto;
obujekuto.foo(); // ok!
konsuto_obujekuto.foo(); //error!
メンバ関数をconstで修飾する事は、そのオブジェクト内のメンバを変更しないという事を宣言する意味。
ちなみにmutable修飾されたメンバ変数ならconstメンバ関数内からでも変更できる。何のためにあるのかは知らん。・
0936デフォルトの名無しさん
2009/12/15(火) 23:36:570937デフォルトの名無しさん
2009/12/15(火) 23:38:56int &a;
test(int &a_) : a(a_){}
test(const test &obj) : a(obj.a){} //コピーコンストラクタもちゃんと書こう!
};
0938929
2009/12/15(火) 23:41:53大体は、constの機能がわかりました
しかし、constなインスタンスが、constなメンバ関数しか呼び出せないメリットがわかりません
0939デフォルトの名無しさん
2009/12/15(火) 23:43:54void bar(const sutorakuto &obj){
obj.foo(); // fooが非constメンバ関数だとfooの実行によりobjが変更される可能性があり引数宣言const sutorakuto&の型が意味を成さない
}
0941デフォルトの名無しさん
2009/12/16(水) 00:48:15使う入門書やら入門サイトが昔はやたら多かった.今は知らないけど.
そういった本で覚えた人は何も考えずに使うんだろう.
個人的にはこういうの↓も嫌いなんだけど
FILE *fp;
if ((fp = fopen("smpl.txt", "r")) == NULL){
printf("file open error!!\n");
}
0942デフォルトの名無しさん
2009/12/16(水) 00:49:44残念ながら C++ における C とは Traditional C であって // は構文エラー
0943デフォルトの名無しさん
2009/12/16(水) 02:14:29Fedora12 + gcc-c++-4.4.2-7.fc12.i686 って環境です。
コンパイルを実行しようとすると、
make: 警告: ファイル `include/HadrontherapyRunAction.hh' の修正時刻が 2.7e+04 秒分未来の時刻です
こういう風にエラーが出て、ファイルの依存関係確認が延々とループします。
対処方法とかってあるのでしょうか?
識者の方、ご教示頂けたらと思います。よろしくお願いいたします。
0944デフォルトの名無しさん
2009/12/16(水) 02:17:24PC の時刻設定か、ファイルの修正時刻か、どちらかがおかしいので確認すべし。
対処方法は、まぁわかるだろ。
0945デフォルトの名無しさん
2009/12/16(水) 02:25:072台のPCのうち1台で編集した物を、もう1台に移してコンパイルを行った場合に必ず出ます。
PCは2台ともネットで時刻同期を取っています。
今の所、怒られたファイルを開き、スペースやエンターを入れて保存を繰り返しているのですが、
いかんせん扱っているファイル数が多いので、延々とこの作業をやるのかと思うと
気が滅入ってしまうのです…。
タイムスタンプのチェックを外すオプションか何かがあるのかなと思って質問した次第ですが、
無いようですね…。
諦めてファイルを1個1個編集していきます。
確か前は、警告は出るがコンパイルは滞りなく行われてた気がするんですが…
変わったんでしょうかね。
0946デフォルトの名無しさん
2009/12/16(水) 02:38:05> PCは2台ともネットで時刻同期を取っています。
だからって時刻設定を確認しないの?何なの?バカなの?
あと、手動で対処するぐらいなら touch で一括対処しろよ。
0947デフォルトの名無しさん
2009/12/16(水) 03:04:28スレ違いどころか板違いだ。
Linux 板にでも行け。
0948デフォルトの名無しさん
2009/12/16(水) 03:47:20>>944 02:17:24
>>945 02:25:07
0949デフォルトの名無しさん
2009/12/16(水) 04:56:01文章書くの遅い人だと、>>945を7分半後に書き込めるわけない!
って考えるのかな。
0950デフォルトの名無しさん
2009/12/16(水) 06:27:32それは何が嫌なの?
NULLと比較してること?
0951デフォルトの名無しさん
2009/12/16(水) 08:31:34俺もあの書き方は嫌いだ
1行に複数の処理を記述すんじゃねーよと
fopenとNULLチェックで2行に分けろと
ついでに戻り値が0非0の判定の「!=0」も省略するんじゃねーよと
0952デフォルトの名無しさん
2009/12/16(水) 08:43:070953デフォルトの名無しさん
2009/12/16(水) 09:01:54言語機能として直接「インターフェース」と呼ばれるものはありませんが、
純粋仮想関数を持ち実装を持たないクラスが他の言語の「インターフェース」と同様に使えます。
このようなクラスを「インターフェース(クラス)」と呼ぶこともあります。
0954デフォルトの名無しさん
2009/12/16(水) 09:19:08まあそう怒るなよ。昔は1画面20行くらいしか表示できなかったんだ。プリンターも遅かったしな。
こんな書き方でも慣れてしまうとなんとも思わない。
今はメリットないだろうけどね。
0955デフォルトの名無しさん
2009/12/16(水) 10:11:04> 昔は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>2台のPCのうち1台で編集した物を、もう1台に移してコンパイルを行った場合に必ず出ます。
今どきgitもhgもsvnも使ってないの?
0957デフォルトの名無しさん
2009/12/16(水) 10:20:450958デフォルトの名無しさん
2009/12/16(水) 11:43:07Cでその書き方ってできたっけ?
0959デフォルトの名無しさん
2009/12/16(水) 11:44:49特に問題ない。
関数の途中で変数を宣言したいならC99をつかえ。
ちなみにここはC++相談室。
0960デフォルトの名無しさん
2009/12/16(水) 11:45:550962デフォルトの名無しさん
2009/12/16(水) 14:36:01途中から最後までとか微妙なスコープだと悩むけど
0963デフォルトの名無しさん
2009/12/16(水) 14:42:250964デフォルトの名無しさん
2009/12/16(水) 14:53:34心配すんな
それよりもC言語そのものがないかもしれない
0965デフォルトの名無しさん
2009/12/16(水) 14:55:260966デフォルトの名無しさん
2009/12/16(水) 15:00:450967デフォルトの名無しさん
2009/12/16(水) 15:00:530968デフォルトの名無しさん
2009/12/16(水) 15:05:55まぁその頃までには日本は無いかもしれんな
恐るべし小沢&鳩山ってとこかな
0969デフォルトの名無しさん
2009/12/16(水) 15:07:27その頃には〜とか言ってほったらかした結果がY2Kだよ!
0970デフォルトの名無しさん
2009/12/16(水) 15:10:030971デフォルトの名無しさん
2009/12/16(水) 15:11:180972デフォルトの名無しさん
2009/12/16(水) 15:13:21俺の友達はそれやって死んだ
0973デフォルトの名無しさん
2009/12/16(水) 15:13:52rand()ならお馴染みですが、random()は初めてです。
何が違うのでしょうか?
0974デフォルトの名無しさん
2009/12/16(水) 15:16:170975デフォルトの名無しさん
2009/12/16(水) 15:17:350976デフォルトの名無しさん
2009/12/16(水) 15:18:49こういうのをあちこちのスレにコピペしまくったらどういう事態が生じる?
0977デフォルトの名無しさん
2009/12/16(水) 15:21:200978デフォルトの名無しさん
2009/12/16(水) 15:25:430979デフォルトの名無しさん
2009/12/16(水) 15:31:532038年1月19日3時14分7秒の30秒前に設定して30秒後どうなるか詳しく報告してくれ。
0980デフォルトの名無しさん
2009/12/16(水) 15:34:07たぶん大丈夫だと思うから設定して試してみて。お願い
0981デフォルトの名無しさん
2009/12/16(水) 15:40:54rand() の質が悪かった昔、random() が作られた。
でも今は同じなので、標準Cで規定された rand() を使うよろし。
0984デフォルトの名無しさん
2009/12/16(水) 17:50:00俺も試してみたけどなんともなかった
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:19C系で業務系アプリって関わったこと無いから
実在すんのかしらんけど。
0987デフォルトの名無しさん
2009/12/16(水) 19:53:57解説が面倒いからじゃないか
その必要があれば、いくらでも使っていいよ
C/C++では式は何でもセミコロンを付ければ式文になる
1;
とか
0;
とか
2 + 3;
とかも意味がないだけで構文的には問題ない
0988デフォルトの名無しさん
2009/12/16(水) 20:19:36thx
0989デフォルトの名無しさん
2009/12/16(水) 20:41:58> t.hogeは何故シンタックスエラーにならないのか教えてください
おれはここの部分の意図が理解できなかったのだが、
良く察したな。
さては魔女だな。
0990デフォルトの名無しさん
2009/12/16(水) 21:07:08コピコンは参照と決まっているだけ
つーか、そんくらいやってみればわかるだろ
理由は禿本に書いてあるし
逆に「少ない」って表現が気になる
0991デフォルトの名無しさん
2009/12/16(水) 21:56:53string s("str");
hoge(str);
と
hoge(string("str"));は同じですよね?
0992デフォルトの名無しさん
2009/12/16(水) 22:00:160993デフォルトの名無しさん
2009/12/16(水) 22:12:420995デフォルトの名無しさん
2009/12/16(水) 22:24:05そうなの?
0996デフォルトの名無しさん
2009/12/16(水) 22:34:53warum?
0997デフォルトの名無しさん
2009/12/16(水) 22:44:39>994-996
しつけぇw
どんだけ陰険なんだ低脳のくせに。
0998デフォルトの名無しさん
2009/12/16(水) 22:45:280999デフォルトの名無しさん
2009/12/16(水) 22:46:311000デフォルトの名無しさん
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||||||||”
"""""""" '''""""
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。