1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.76【環境依存OK hibari.2ch.net/test/read.cgi/tech/1312621728/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
263 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:49:28.42 ] template <class T, unsigned int N> struct Array { T elements[N]; // コンストラクタデストラクタは書かない T & operator [] (unsigned int n) { if(n < N) return elements[n] else throw out_of_range("out_of_range"); } // 以下略 } ; たぶんこれでいけると思うよ
264 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 00:15:22.35 ] boostは使えませんので、類似のものを作るか・・・ >>263 operator[]はメンバー関数である必要があります っていわれました。 環境は、VC2010です
265 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:09:07.12 ] すいません。そのままでコンパイルできました。 size N を明示的に書かなくても使えますか?
266 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:42:55.10 ] 無理 でもVC10なら自分で書かずともstd::arrayで範囲チェックできるだろ
267 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:58:25.77 ] 平松サイド vs 橋下サイド 民主党 大阪市民 自民党 ν速民 共産党 財界 関西電力 連合 自治労 日教組 公務員 毎日新聞 MBS 解同 極左 大阪の敵が濃縮されてわかりやすくなったな
268 名前:265 [2011/12/30(金) 12:04:10.90 ] サイズを省略するのはあきらめます。 template <class T, unsigned int N> struct Array { T elements[N]; // コンストラクタデストラクタは書かない T & operator [] (unsigned int n) { if(n < N) return elements[n] else throw out_of_range("out_of_range"); } // 以下略 } ; int main() { Array<int,5> test = {1,2,3,4,5}; } みたいにすると、 コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください といわれコンパイル通らないのはなぜでしょうか?
269 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:16:50.18 ] MSVC2010 / C++ □使用可能なライブラリ stl / boost / zlib / ライセンスがうるさくないものであればその他もOK □やりたいこと zipファイルの中身(主にファイル名)を列挙したいです。 その時に、なるべくwchar_tベースでの書庫ファイル指定や、ファイル名取得をしたいです。 zlib + minizip だと、char文字列でのやり取りしかできないように思います。 □質問 どんなライブラリをどういう感じで使うと実現できますでしょうか。 よろしくお願いいたします。
270 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:23:41.34 ] charで格納された物は、ユニコードにならないんだよ。 ユニコードで格納された物はユニコードで取り出せる。 取り出しかたの問題ではないから工夫しても無理。
271 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:28:04.94 ] shift+JISの方が好き
272 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:03:50.87 ] EUCやSJISで格納された名前をwhar_tに変換して格納すれば良い。 zip読み取りルーチンとは関係なし。 UTF-16LEで格納されていればそのまま格納すれば良い。 格納時のエンコードの問題。
273 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:13:05.57 ] VC++であるクラスを継承してメンバ変数を追加し=operatorをオーバーロードした時に 基底クラスのメンバーをコピーするのはどうやって記述すればいいんでしょうか? class NewClass : public OldClass { public int mNewMenber; ... NewClass operator=(NewClass &nc){ /* 基底クラスのメンバーをコピー */ ???????????????? mNewMember = nc.mNewMember; return *this; }
274 名前:273 mailto:sage [2011/12/30(金) 13:15:57.84 ] ああ、基底クラスにも自身の=operatorが定義してあります。
275 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:27:13.08 ] NewClass & NewClass::operator = (NewClass const & other) { OldClass::operator = (other); mNewMember = other.mNewMember; return *this; }
276 名前:デフォルトの名無しさん [2011/12/30(金) 13:41:19.18 ] Visual C++ 2010 EEです。 std::swapのclass Cスペシャルを適用したまま、このエラーを消す方法はありますか? template< typename A0, typename A1, typename A2 > class C; // std::swapのclass Cスペシャル。※実際はもっと細かく特殊化をしているのでこの形式は崩せません。 namespace std{ template< typename A0, typename A1, typename A2 > void swap ( C< A0, A1, A2 >& v0, C< A0, A1, A2 >& v1 ){ 略 } };// namespace std void func(){ typedef C< int, int, int > C_t; std::vector< C_t > x; std::vector< C_t > y( x.begin(), x.end() ); // error C2668: 'std::swap' : オーバーロード関数の呼び出しを解決することができません。 };
277 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:15:17.84 ] >>268 > みたいにすると、 > コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください > > といわれコンパイル通らないのはなぜでしょうか? 初期化子の書き方。 テンプレートを使っててもユーザー定義のコンストラクタをもたないクラスの初期化のやり方はかわらない。 struct S1 { int a, b, c; }; struct S2 { int a, b[3], c; }; struct S3 { int a[3]; }; int main() { S1 s1 = {1, 2, 3}; S2 s2 = {1, {2, 3, 4}, 5}; S3 s3 = {{1, 2, 3}}; return 0; }
278 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:23:28.26 ] 下のwhile文でbool_isがfalseなら以下行を読まずにwhileの先頭に戻りたいのですが、 簡単な方法はありませんか? ifで括るとかだとちょっと長いんで・・・ while(i<max) { bool bool_is =hogehoge(); if(!bool) { i++; 以下の行を読まずにwhileの先頭に戻りたい。 } etcetra.... i++; }
279 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:26:08.90 ] continue
280 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:41:22.84 ] >>277 なるほど。では実際にこの配列を初期化して使うにはどうしたらよいのでしょう?
281 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:13:29.19 ] >>280 新しめのコンパイラを使うといい g++なら-std=c++0x
282 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:25:39.65 ] >>280 ヒント >>268 でテンプレートArrayはArray<int,5>で struct Array<int,5> { int elements[5]; // コンストラクタデストラクタは書かない int & operator [] (unsigned int n) { if(n < 5) return elements[n] else throw out_of_range("out_of_range"); } // 以下略 }; というクラスを定義する。メンバ関数を無視してみると…。 struct Array<int,5> { int elements[5]; };
283 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:28:06.42 ] >>276 class Cスペシャルのswapをstdでなくclass Cと同じ名前空間(だけ)に置く。
284 名前:281 mailto:sage [2011/12/30(金) 16:18:11.57 ] >>280 すまん、よく読んだらバージョン関係ないな >if(n < N) return elements[n] else throw out_of_range("out_of_range"); if(n < N) return elements[n]; else throw out_of_range("out_of_range"); セミコロンが抜けてるだけかと。
285 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 16:59:46.80 ] openglで戦車のアニメーションを作っています 動きは前進、後退、その場での方向転換をキー操作で行いたいです 戦車自体が方向転換しても次に前進しようとした時に、ワールド座標系のX軸の向きに進むため 戦車が横滑りしてる感じになってしまいます うまく移動→方向転換→移動をを実現するにはどうしたらいいでしょうか
286 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:07:56.55 ] 実物の戦車は横滑りするよ
287 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:08:15.37 ] 3Dプログラムできるのに方向転換すらできないとは。
288 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:10:33.85 ] 戦車ローカル座標でみた前方への移動ベクトルをワード座標に直すんだよ
289 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:12:28.23 ] 向いてる向きから進む距離を割り出せよ。北へ進むのがY+1で、北西ならX-1/√2 Y+1/√2 とかだろ。 cosθ、sinθであらわせるはずだろ。
290 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:16:10.66 ] openglが扱えてここに書き込む時間があれば自己解決すると思うんだが。 難解な物理法則や、戦車特有の挙動などが関与してるのか?
291 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:22:54.86 ] >>288 ,289 あー、戦車のローカル座標のX軸に進めることしか考えてなかったです 現在の向きから計算してやればいいのか ありがとうございます、やってみます
292 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 18:39:35.50 ] >>285 です やっぱりわかりません glTranslatef(go*cos(Turn * PI / 180.0), 0.0,-go*sin(Turn * PI / 180.0) );// 平行移動 glRotatef( turn, 0, 1, 0 ); // Y軸回転 turnは回転の角度、goは前進した距離、Turnはgoが更新されたときに現在の回転の角度が入ります 原点から 方向転回→前進→方向転換 までできるんですけど その後前進しようとすると、再び原点から方向転換した方向へ進み始めてしまいます 現在の位置を考慮しないといけないと思うのですが、うまく実装できません…
293 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:05:03.70 ] >>292 戦車のモデルが +z を向いていて、Y軸回転がθだとすると、 戦車の方向ベクトルは(sinθ, 0, cosθ)となり 方向ベクトル*速度 * 経過時間 = 移動ベクトル 別な考え方では 戦車の向きベクトル = 戦車のワールド行列 * ベクトル(0, 0, 1) あとは同様 戦車の位置+移動ベクトル=新しい位置
294 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:31:07.28 ] 朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。 捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。 Domain Information: [ドメイン情報] a. [ドメイン名] ASAHI-NP.CO.JP e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ f. [組織名] 株式会社 朝日新聞社 −「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」− これはおそらく週刊誌さえ書けない。 「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ 09.3
295 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 20:16:30.63 ] >>285 戦車の頭のある位置 - 戦車の中心 = 戦車を中心を0とした時の方位ベクトル 方位ベクトルを正規化して x+y+z=1.0になるようにする 何故なら最大推力が1.0だから そしたら今度は移動速度をそのベクトルに掛けて 戦車の中心座標に結果を加算する
296 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 21:36:15.20 ] てんさいです 【東京都渋谷区】 12/31(土) 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ! 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ! 12時00分 渋谷駅ハチ公前広場 「街頭演説」(〜13時30分) 13時30分 移動 14時00分 渋谷公会堂前 「街頭演説」(〜14時45分) 15時00分 代々木公園・NHK横「イベント広場」 「年忘れしてはならない!紅白桜祭」 抗議集会・コンサート・炊き出し等々 盛りだくさんでお送りします!(〜21時00分)
297 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:25:43.79 ] 初歩的かもしれませんが 入力文字列const char* inputを文字コードの文字列として格納したいのですが unsigned int len = strlen(input); char* str = (char*)malloc(2*len + 1); if(str){ for(unsigned int c = 0 ; c < len ; c++){ sprintf_s(&str[2*c],2,"%x",(char)input[c]); } str[2*len] = 0; } このようなコードだとsprintf_s関数でバッファが足りないと言われてしまいます charを16進数で表示すると2Byteになると思うのですがなにか思い違いをしてるのでしょうか
298 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:31:16.40 ] はい
299 名前:297 mailto:sage [2011/12/30(金) 23:34:57.26 ] 書き込んだ後に解決する法則 ヌル文字も数えろとのことですか、ぐぬぬ
300 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:51:08.09 ] %02x
301 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:53:11.73 ] %x も %02x も int になっちゃうから 引数キャスト (char) してもだめ
302 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:10:22.70 ] >>283 それも試しましたが、やはり名前の衝突は避けられず・・ 結局自前のswapの名前を変えることで対応しました なんかC++の限界を感じた・・どうもありがとうございました
303 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:26:47.11 ] まあ自分の限界を知るのは悪いことじゃないよ
304 名前:297 mailto:sage [2011/12/31(土) 00:31:45.74 ] もしかして>>297 のコードはinput[c]をunsigned charにキャストしないとマイナスの値に対してエラーになる? とかなんとなく思った
305 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:54:14.97 ] 正解おぬでとう
306 名前:297 mailto:sage [2011/12/31(土) 00:57:19.48 ] やったね! エラーが出なくなった時、人は優しくなれる
307 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 09:25:35.25 ] >302 これで VC++10 でコンパイル通るよ。っちゅうか std に置いたままでも通ってる。 まずはエラーが起こる最小コードから確認してみれば? #include <vector> namespace mine { template<typename A0, typename A1, typename A2> class C {}; template<typename A0, typename A1, typename A2> void swap(C<A0,A1,A2> &c1, C<A0,A1,A2> &c2) {} } int main(void) { typedef mine::C<int, int, int> C_t; std::vector<C_t> x; std::vector<C_t> y(x.begin(), x.end()); return 0; }
308 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 17:24:15.70 ] cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg テレビに騙されるな(自称街の人-台本読んでるだけの業者)
309 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:44:43.53 ] class Hoge { public: int *count; }; Hoge hoge =new Hoge[x]; こういう配列を作るとxの値によっては作った瞬間にエラーになってしまう場合があるのは何故ですか? 回避策はありませんか?
310 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:45:47.14 ] Hoge *hoge =new Hoge[x]; の書き間違いです。
311 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:56:43.17 ] > エラーになってしまう なんで、エラーの内容を書こうと思わないんだろう… お前がバカだからという回答でも期待してるのか?
312 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:57:28.18 ] try { Hoge *hoge = new Hoge[x]; } catch (std::bad_alloc &e) { std::cerr << e.what() << std::endl; }
313 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 04:22:28.69 ] 馬鹿には無理
314 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 10:47:15.57 ] K-POPの真実 89 名前:名無しさん@12周年[sage] 投稿日:2011/12/27(火) 18:42:50.71 ID:oPBf/MSP0 12月23日、東京国際フォーラムホールAで大国男児、X−5 、C-REAL、チェ・スジョンらが出演した『K-POP LIVE for X'mas 2011』が開催された。 しかし、ふたを開けてみれば2階はすべてクローズド、1階も後列は空席だらけと、さんざんな結果に終わった。 news.infoseek.co.jp/article/cyzowoman_27Dec2011_17759 ↓ ↓ ↓ 395 名前:山師さん@トレード中[] 投稿日:2011/12/27(火) 15:21:13.95 ID:E5FNgBRR0 K-POP LIVE for X'mas 2011 公演日:2011年12月23日(金) 会場:東京国際フォーラムホールA(収容人数5000人) 出演:大国男児 / X−5 / C-REAL / Yoonji 開演前 cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221655.jpg cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221654.jpg 開演中 cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224222054.jpg 補助金が尽きてガラガーラ テレビは捏造演出装置
315 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:06:09.92 ] std::unique_ptrの使い方を勉強してるのですが、単純にauto_ptrから書き換えていて躓きました。 引数として渡すときはわざわざ呼び出し側で f(std::move(p)) とするのが普通なのでしょうか? それとも、 void f(std::unique_ptr<Hoge>& p) { std::unique_ptr<Hoge> p_ = std::move(p); } とした方がいいのでしょうか? この場合はどっちでもいいような気がするのですが、p_をクラスのメンバとするときに 呼び出し側にstd::moveを意識させた方がいいのかそれは冗長なのか教えてください。
316 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:10:02.98 ] pの所有権が誰にあるかによるだろ
317 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:20:56.43 ] もちろん、呼び出された側にあります。 想定しているのは、 class Hage { public: std::unique_ptr<Hoge> p_; Hage(std::unique_ptr<Hoge> p) : p_(std::move(p)) { } }; class Mage public: std::unique_ptr<Hoge> p_; Mage(std::unique_ptr<Hoge>& p) : p_(std::move(p)) { } }; new Hage(std::move(p1)); new Mage(p2); HageとMageどちらがいいのかなと思いまして。 auto_ptrの使い方を踏襲するのなら、Mageですが呼び出し側に移譲を意識させるのならHageの方が いいような気もしています。
318 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:24:27.04 ] class Hage { public: std::unique_ptr<Hoge> p_; Hage(std::unique_ptr<Hoge>&& p) : p_(std::move(p)) { } }; 所有権を移動させるなら 俺ならこうする
319 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:44:57.90 ] まあ普通に考えたらそれしかない
320 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 03:12:05.20 ] Hage(std::unique_ptr<Hoge>& p) : p_(p.release()) { } auto_ptrを踏襲するならこれでもいいだろうが どちらにしろ>>317 はないな
321 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 17:15:58.39 ] みんな健康でいいね。
322 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:30:28.40 ] hoge.h内 extern int hoge[]; hoge.cpp内 int hoge[] = {0,1,2,3,4}; として、 main.cpp内で int size = sizeof(hoge)/sizeof(hoge[0]);として配列の要素数を求めたいのですが、 これが使えません。 初期時に要素数を指定しないのはそのままにmain.cppで配列の要素数を求める方法を 教えてください、
323 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:32:39.73 ] 無理です
324 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:36:00.92 ] 無理なのですかあ。残念
325 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:39:55.69 ] sizeof(hoge)/sizeof(int)
326 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:51:40.59 ] それコンパイルとおらんやろ
327 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:04:17.85 ] >>325 要素数求めるなら、分母はhoge[0]の方がよくね?
328 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:06:51.78 ] PS2のゲームなのにPS1並のグラだろ 察しろよ
329 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 18:12:10.00 ] >>322 // hoge.h extern int const yousosuu; // hoge.cpp extern int const yousosuu = sizeof(...
330 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 23:54:07.38 ] DXライブラリ(DirectX)やGLUT(OpenGL)って、グローバルな環境変数的な何かを使っているからか、 ウィンドウを一つしか用意できない「っぽい」んですよね。 今回の例に限らず(というかこの例はイケてないかな)、 『グローバル変数を利用するスレッドセーフではない』ライブラリを、 複数箇所から安全に利用する方法として、 使いたい人がサンドボックス的な他に影響を及ぼさない場所を用意して、 その中にライブラリを展開して、 サンドボックス名.普通の使い方、とか、サンドボックス名::普通の使い方、みたいなことって出来ませんか? 今現在あるネーム空間を無理やり他のネーム空間に突っ込む、ということが出来れば解決なのですけど。 接頭を付加できるって聞いたことないし、試してみてもうまくいかないっぽい。 言いたいことを書けているかな…。日本語が不自由で申し訳ない。
331 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:11:48.57 ] ttp://toro.2ch.net/test/read.cgi/tech/1324704285/381 Javaスレでも質問したのですけど、↑についてお願いできますか? C++の場合はどうなのでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:41:57.09 ] Objectの実装にもよるし コンパイラにもよる
333 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 09:04:05.51 ] >>330 ライブラリをDLLでビルドして適当なnamespace内の関数ポインタに各種関数をロード
334 名前:331 mailto:sage [2012/01/05(木) 13:12:32.62 ] >>332 ありがとうございます。 もう一件、Javaも知っている方とかに聞きたいのですけど、 C++の名前空間とJavaのパッケージとの違いですが、 ・名前空間には直接変数を宣言できる ・protectedについて、Javaは同一パッケージでpublic、C++は同一名前空間でも継承が無いとprivate みたいな感じで、ほとんど同じと考えていいのでしょうか? C++もJavaもあまりわかってないのですが…。
335 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 15:10:56.67 ] >>331 Javaの場合は同じなんじゃないの。 C++はデストラクタの挙動がちがってくると思うけど。
336 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 06:45:15.80 ] >>331 javac 1.6.0_26 で確認したら全く同じになった C++の方も一応説明すると Object hoge; 引数無しのコンストラクタ呼び出し hoge = ...; 代入演算子の呼び出し Object hoge = ...; ... を引数としたコンストラクタ呼び出し になるから、実装による
337 名前:デフォルトの名無しさん [2012/01/07(土) 17:37:13.94 ] C/C++を一通り勉強してそれなりのWindowsの アプリも作成できるようになり、今はC#で色々 作ったりしてるんですが、あらためて疑問に思うのは C++のstd::endlってどういう利便性があるのでしょうか? いっつも、"\n"で終わらしてたんですが end lineの略なんだろうけど、いまだにわかりません。 教えてください。
338 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:11:55.44 ] 一応出力バッファのフラッシュも兼ねる が、たいていの環境は行バッファリングなんで改行すればフラッシュされるので違いが見えなくなる
339 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:51:12.89 ] B* b = new C(); 最近Javaを学んでいたので、ついうっかり↑の書き方をしたら特に問題なく動きました。 C++的にこの書き方はありでOKですか? B* b = new C;って書くのが筋で、止めた方がいいとかあります?むしろ()付がいい? 過去に、C c()って書くと関数の宣言にされるのを知らずに凄く悩んで、引数なしの場合は()をつけないものと思ってたのですが。 new C と書こうが、new C() と書こうが、Cの文法には触れないのでどっちでもいいのかな。 むしろ、C c()が無理なのは、Cを引きずってるからなのかな。 日本語に出来てるか心配ですが、エスパーしてもらってもいいですか?
340 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:54:16.61 ] ふつうnewを使わないんじゃ。。
341 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:56:29.29 ] どっちでも同じ
342 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:57:08.47 ] しかもアスタつけないでそ
343 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:04:28.62 ] =を使うな B * p(new B()); と書くのが唯一の正解だ
344 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:05:18.80 ] >>343 どっちでも一緒じゃん
345 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:18:02.66 ] 違う
346 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:21:11.18 ] >>343 はいちいち全部 int a(1);とか書いてるのか バカなやつだ
347 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:30:30.13 ] >>346 普通そう書くよ hoge h(aaa); int i = 999; こういうふうに混在してたら見た目悪いだろ
348 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:22:31.10 ] じゃあ、あったまいいお前らにきく Hogeクラスのオブジェクトkusohogeを初期化値1で生成するとき、 Hoge kusohoge(1); 以外に書き方があるのか?
349 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:25:00.24 ] Hoge kusohoge{1};
350 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:26:53.08 ] Hoge hoge; hoge.Init(1);
351 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:36:05.61 ] 意外にあるんだな。。 >>349 言語使用上、(と{が区別なく使えるってことか? それとも、 Hoge kusohoge(1); Hoge kusohoge{1}; は、言語仕様上も違い意味になるのだが、この場合に限っては 結果が同じになるという意味? >>350 たしかに、これはあるな むしろ、順当な書き方と言えるな オブジェクト変数名に、あたかも関数のように()が つく表記の方が、はじめ見たときは違和感を感じた
352 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:15:38.73 ] >>348 Hoge hoge = 1;
353 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:17:58.59 ] >>337 CRLF、Multibyte-charの緩衝とか
354 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:22:40.91 ] CRLFは関係なくないか
355 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:26:51.23 ] endlはついでにフラッシュすんだよ
356 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:27:58.95 ] crc32を計算したいのですが、ネット上に落ちているコードを比べてみても、 2パターンあるみたいで、どれが正しいのか分かりません。 データ: "a" (1バイト boostとか、あとは動的にテーブルを生成しているタイプのコード (テーブルは 0x00000000, 0x77073096, で始まるようです) crc32: 0xe8b7be43 0x00000000, 0x04C11DB7 で始まるテーブルを持つコード crc32: 0x19939b6b ttp://blog.goo.ne.jp/masaki_goo_2006/e/69c68a18c872338e8c2751d662706f46 これらは何が違うのでしょうか?
357 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:29:38.63 ] アルゴリズムスレへどうぞ
358 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 01:58:12.32 ] アルゴリズムスレ落ちたままなんだな まあwikipediaでもみればいいんじゃないか
359 名前:デフォルトの名無しさん [2012/01/08(日) 07:55:56.97 ] int get_int() { int i = 1; return i; } void func_int(const int* p) { int i = *p; std::cout << "i: " << i << std::endl; } void main() { func_int( &get_int() ); // error C2102: '&' に左辺値がありません。 } get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが, どうやれば良いでしょうか?
360 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 07:59:49.48 ] 関数が返すのは「値」であって、「変数」を返すわけではない。
361 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:11:39.78 ] >>359 > get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが, そもそもなんでそんなことしたいのさ。 int の一時オブジェクトとやらがあるのかどうかは知らんけど、仮にあったとしても func_int( ) に 渡った時点でそのオブジェクトは消えてるかもしれないよ。 「一時」オブジェクトなんだし。
362 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:52:02.73 ] >一時オブジェクトのポインタ そんな邪悪なものは封印すべきだ
363 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:58:58.24 ] 一次オブジェクトへのポインタ(あるいは参照)は普通に使うでしょ 無理やりmoveっぽいことを書きたい時とかに使う