- 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が重い事があるのでここも利用)
- 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っぽいことを書きたい時とかに使う
- 364 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 11:01:58.72 ]
- >>359
この例だと、わざわざポインタ渡しするメリットが全くない。 多分、実際のコードではもっと大きなオブジェクトを渡していて コピーのコストが心配なんだろうけど、最近のコンパイラは こんな単純なケースでいちいちコピーなんかしないから値を返しても問題ない。 これでも読んどけ。 cpp-next.com/archive/2009/08/want-speed-pass-by-value/
- 365 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 11:05:52.26 ]
- >>363
>無理やりmoveっぽいことを書きたい そんなことはコンパイラが勝手にやる。
- 366 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:10:12.15 ]
- >>363
参照とポインタを一緒にされてもなぁ
- 367 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:23:48.54 ]
- >>365
返り値に関してはコンパイラ任せでいいだろうけど それじゃテンポラリを関数の引数に渡せないじゃん hoge.swap(MakeHoge()); みたいなことをするにはコンパイラの力だけじゃできない hoge.swap(MakeHoge().GetRef()); こういうふうに明示的に参照を返さないとね
- 368 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:33:24.07 ]
- int& get_int( int i = 0 )
{ i = 1; return i; }
- 369 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:50:41.24 ]
- 自動変数の参照返してどうすんだ
- 370 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:54:52.93 ]
- 一次オブジェクトのアドレスワラタ
それを仮に取ったとして、直後に大抵解体されてしまうから 無意味で危険なアドレスになっちまうよな constの参照は一次オブジェクトを束縛出来るんだっけ
- 371 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:11:14.91 ]
- できる
- 372 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:35:58.42 ]
- 皆さんレスありがとうございます.
すいません.質問用に単純化したので,実際には get_int() は _strtoui64() で ulonglong を返します. func_int() は自作の,set_datas() という値をclassのメンバに設定する関数で,ポインタ引数を複数持ち, NULLが設定されていない引数をメンバに設定します. //member func void set_data(const POINT* ppoint, const FILETIME* ptime, const ULONGLONG* pID) { if( ppoint ) m_point = *ppoint; if( ptime ) m_time = *ptime; if( pID ) m_point = *pID; } 例えば POINT get_point() や FILETIME get_time() のような構造体を返す場合は,一見すると問題なくできたのに, ulonglong を返す場合にエラーとなってしまったので質問させて頂きました. set_data( &get_point(), &get_time(), &_strtoui64("1",NULL, 10 ) ); この場合,get_point(), get_time() の返す一時オブジェクトは, set_data() が終了するまで生きていると考えたのですが, 認識が間違っていたでしょうか? template<typename T> inline const T* GetPtr(const T& in) { return ∈ } set_data( &get_point(), &get_time(), GetPtr( _strtoui64("1",NULL, 10 ) ) ); ↑また,先ほど思いついたのですが,この方法は問題がありますか?
- 373 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:51:16.73 ]
- 構造体を返す関数は実装上は呼び出し側で一時オブジェクトを用意してそのアドレスを関数に渡すということをやってるから
そんな実装依存オブジェクトの生存期間なんか知ったこっちゃない
- 374 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:13:46.62 ]
- >>372
言語仕様上、get_point()内で確保された一時オブジェクトは、 get_point()終了時に破棄される。 現実にはメモリ内には一時オブジェクトがそのまま残っていて 利用できることがあるが、あくまで偶然。
- 375 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:46:47.67 ]
- どうしてもポインタで渡すしかないならconst参照で引っ張ってみるトカ
const POINT& p = get_point(); const FILETIME& f = get_time(); const ULONGLONG& n = _strtoui64("1",NULL, 10 ); set_data( &p, &f, &n );
- 376 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:49:41.65 ]
- 変数作るなら普通に受け取れよ
VC++でもgccでも警告だぞそれは
- 377 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 15:30:47.58 ]
- なんかもう、C言語で書かれた関数を無理やりC++で流用してるせいで
参照の意味で使われている(C言語の)ポインタ渡しをただただ勘違いしてるという気がしないでもない。
- 378 名前:359 mailto:sage [2012/01/08(日) 17:48:54.81 ]
- 皆さん有難う御座います.
指摘の通り const 参照の時の寿命と同じようになるものだと勘違いしていたようです. VisualC++ 2010 Express でやっていたのですが,warning level 4 にしたら &get_point(), &get_time() の部分でも warning C4238 が出るようになりました. Microsoft の独自拡張で問題なく動いたように見えたのでしょうか? >>375 さんのやり方も参考にしながら,仕様変更も含めてもう一度考えたいと思います. 今回は勉強になりました.ありがとう.
- 379 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:22:44.32 ]
- Visual Studio 2010 です
C++では、クラスのメンバ変数に文字列の定数は宣言できない仕様、ですが 自分は、良くない仕様だと思うのですが、みなさんはどう思われますか? また。文字列の定数をクラスのメンバ変数で宣言する、裏技はありませんか?
- 380 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:36:28.86 ]
- const char* str;とか宣言しといてコンストラクタで : str("aaa")とかすればいいんじゃないの?
- 381 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:31:27.24 ]
- >>380
ありがとう。コンストラクタでは、宣言できるんですね。
- 382 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:37:15.29 ]
- static char const str[]; でいけるでしょ。定義はクラス外に分けないといけないけど。
- 383 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 12:27:22.64 ]
- const char * str() const {return "foo";}
- 384 名前:デフォルトの名無しさん [2012/01/10(火) 15:38:40.14 ]
- std::listで後ろの方の要素を前に持ってきたいときはどうすればいいですか?
例えばこんな感じです。 std::list<int> ls; ls.push_back(1); ls.push_back(2); ls.push_back(3); ls.push_back(4); ls.push_back(5); 先頭(1)-(2)-(3)-(4)-(5)終わり となってるところで、先頭(1)-(4)-(2)-(3)-(5)終わり、とやりたいです。 単純にリンクの張替えで出来ると思ったのですが、やり方がわかりません。
- 385 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 15:49:05.46 ]
- std::list<int>::iterator pos2 = std::find(ls.begin(), ls.end(), 2);
std::list<int>::iterator pos4 = std::find(ls.begin(), ls.end(), 4); assert(pos4 != ls.end()); ls.splice(pos2, ls, pos4);
- 386 名前:デフォルトの名無しさん [2012/01/10(火) 15:55:28.13 ]
- すげえ。。
ありがとうございました。
- 387 名前:デフォルトの名無しさん [2012/01/10(火) 23:39:37.95 ]
- リンクの付け替えとはとても思えないインターフェイス
これは洗練されているというべきなのか。
- 388 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 03:53:25.45 ]
- corutineの実装がいろいろあるけど
(Hamigakiとか) GPUを使うOpenCVとかと混ぜたらうまく動かないってことでいいのでしょうか
- 389 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 06:58:34.14 ]
- コルーチンってC#のyield returnみたいな構文が必要じゃね
- 390 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:26:37.71 ]
- 非同期のMessageBoxを作って、タイムアウトしたら自動で閉じるなどの機能を実装しようと思っています。
自分で作ったウィンドウではなく、MessageBox関数を利用します。 そこでMessageBoxのウィンドウハンドルを取得したいのですが 1 CreateThreadで別スレッドを作成 2 別スレッドがMessageBox呼び出し 3 メインスレッドがEnumThreadWindowsで別スレッドのウィンドウを列挙 4 GetWindowTextでタイトル照合 タイトルが一致するウィンドウがなければ3に戻る 5 取得したウィンドウハンドルは、タイムアウトしたらWM_CLOSEを送るなどに使用 CreateThreadで作成されたスレッドは IMEが作ったウィンドウや、タイトルのないウィンドウが あらかじめ作られているようで タイトルによってはそれらと一致してしまうので この手段が不確実です。 ウィンドウを列挙したり、文字列を比較するというのも かなり無駄が多いです。 このような原始的な方法しか思いつかないのですが 他になにか良い方法はないでしょうか。
- 391 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:42:36.84 ]
- タイトルを比較するのではなくウィンドウクラス名を調べればいい
メッセージボックスのウィンドウクラス名は #32770 になってるから1発でわかる クラス名はGetClassNameで取れる
- 392 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:47:09.02 ]
- MessageBoxTimeoutというUndocumented APIが存在するから困る
- 393 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:50:24.76 ]
- MessageBoxを使うタイムアウト付きメッセージボックスのコードはMSが公開していたりする
support.microsoft.com/kb/181934
- 394 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 10:33:38.43 ]
- void *に変換したら配置されてるメモリの先頭アドレスになるって保証ある?
- 395 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 10:38:49.79 ]
- >>394
何を言っているのかわからない。 int*をvoid*に変換したとき、intの2バイト目や3バイト目じゃなく 先頭を指すアドレスが得られるのか?ということか?
- 396 名前:390 mailto:sage [2012/01/12(木) 12:02:26.01 ]
- >>391 この方法を試してみたいと思います
>>392 MessageBoxTimeoutはどのような動作をするのですか? >>393 この方法では非同期が実現できなそうです
- 397 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:10:32.89 ]
- CSub* sub = new CSub;
CBase* base = sub; void* p = (void*)base; としたときに sub == pになるかってことじゃね
- 398 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:13:01.75 ]
- >>396
MessageBox を非同期化するのと同じ手法が使えないの?
- 399 名前:390 mailto:sage [2012/01/12(木) 12:39:24.61 ]
- >>398 393とCreateThreadを組み合わせるということですか?
とりあえず、393は制限時間が未定の場合に対応できなそうです。 例えば次のような状況です。 1 ファイルのコピーを開始 2 ユーザーがキャンセルを押す 3 キャンセルしますか? の非同期メッセージボックスを表示 4 ユーザーが押す前にコピーが終わってしまった 5 キャンセルしますか? を自動で閉じて、コピーが終了しましたと表示
- 400 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:51:46.50 ]
- >>399
タイムアウト型 (開く前に時間を決めておいて 経過時間が過ぎたら勝手に閉じる) と別イベント型 (入力操作とは別になんらかのイベントを受けて閉じる) 両方が機能できるような MessageBox が欲しいということですかい?
- 401 名前:390 mailto:sage [2012/01/12(木) 13:15:06.61 ]
- まずはメッセージボックスを閉じるclose()というようなメソッドを実装しようとしています。
タイムアウト型もイベント型もこれを呼び出すことで実装したいです。
- 402 名前:390 mailto:sage [2012/01/12(木) 13:38:21.79 ]
- >>391 この方法で、ウィンドウの判別ができました。
自分が作成したスレッドで、他にメッセージボックスがないことは確実なので 誤認することはなさそうです。 ありがとうございました。 しかし、依然としてウィンドウの列挙と文字列比較には変わりありません。 問題を整理してみます。 A 非同期でメッセージボックスを表示する →CreateThreadで作成したスレッドからMessageBoxを呼ぶ B タイムアウト、外部イベント、またはプログラム内から能動的にMessageBoxを閉じる →MessageBoxを閉じるメソッドの実装 C MessageBoxを閉じるメソッドの実装 →ハンドルを取得して、WM_CLOSEを送る D ハンドルの取得方法 →スレッドウィンドウを列挙して、クラス名を比較する Aに問題はなさそうです。 BとC自体に問題はないと思いますが、Dに無駄が多いので、 ハンドルを取得せずに、MessageBoxをメインスレッド閉じる方法があれば知りたいです。 または、Dのハンドル取得方法でもっとスマートなものがあればと思います。
- 403 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 14:04:01.96 ]
- SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProc,
でフック仕掛けて CallWndRetProcでWM_INITDIALOGを監視する
- 404 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 14:50:20.44 ]
- Cのsscanfって、大文字小文字を無視する設定ってできないんでしたっけ?
sscanf(str, "ID%d", &id"); などとするとき、"ID100"からも"Id100"からも100を取り出したいのですが。
- 405 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:09:48.77 ]
- id = atoi(&str[2]);
- 406 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:20:32.89 ]
- 条件分枝構文って
if else swich しかないのでしょうか boostやstlでもっと複雑なことのできる条件分枝はないのでしょうか
- 407 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:25:24.11 ]
- どんな複雑なことがやりたいんだ
- 408 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:26:08.52 ]
- あるよ
関数のオーバーロードやtemplate特化も条件分岐構文の一種 boostはこれらの条件分岐を駆使してとても複雑
- 409 名前:デフォルトの名無しさん [2012/01/12(木) 16:11:47.59 ]
-
2chやニコニコ動画に民主党から反日工作費が流れていることが知られるようになってきた。 民主党が用意した資金で工作員が2chを荒らしていることもだんだんと知られるようになってきた
- 410 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:26:40.40 ]
- 質問です。
同じ名前で引数が異なるローカル関数って作れますか? hoge(enum hoge); hoge(int hoge);
- 411 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:38:01.35 ]
- ローカル関数とは何のことを指しているのか
Cでの話なのかC++での話なのか はっきりしてくれ
- 412 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:38:54.87 ]
- そこで出てくるのがintとenumとか、分かってて聞いてる気がしてならない
- 413 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 22:11:17.80 ]
- ローカル関数てなんだ?
関数のオーバーロードなら C++で普通に出来ます。
- 414 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 06:53:45.81 ]
- ローカル関数:関数内関数のこと。C++では作れない。
c-production.com/contents/c/sec08.html プロトタイプ宣言: グローバル領域で宣言すればグローバル関数となりどこからも呼出し可能 ほかの関数内で宣言すればローカル関数となりその関数内でのみ呼出しができる ↑みたいに書いてあるサイトがあるけど規格票にそんなことかいてあったっけ?
- 415 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:25:23.68 ]
- gcc拡張切ってから喋れボケ
- 416 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:39:22.53 ]
- void func(void) {
struct { void operator () (void) {} } local ; local(); }
- 417 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 10:05:20.06 ]
- うげ gcc拡張だったとわ。
知らんかった。
- 418 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 11:37:09.75 ]
- >>414
グローバルな宣言がなくローカルに宣言した関数は、その関数からしか #ifdef __cplusplus 呼べない。 #else プロトタイプの適用が行なわれない。 #endif
- 419 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 11:56:02.25 ]
- C++はもともとローカル関数は作れないし
C言語はプロトタイプ宣言不要だよ? ローカル関数なんて言葉もなかったような…
- 420 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 12:15:05.78 ]
- 完全にnothrowでSTLの代替になって著作権にうるさくないC++ライブラリってありますか?
- 421 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 13:36:42.82 ]
- >>419
規格には記載ないな きっと local function definitions are illegal を ローカル関数の定義が正しくありません。 と訳したVC++の所為
- 422 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:25:41.78 ]
- どうしたらこのスレに書かれてることを理解できるレベルに到達できますか?
初心者向けの本は勉強したけど、全然わかりません。 やさしいC++をひと通りコード書いて理解しました。 int main(void) とか、int main の中に何か入ってるものは何を意味してるのか分からないし operator関数も難しいです。
- 423 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:48:10.47 ]
- 他人が書いたソースを読むことだな
とりあえず自分が興味ある分野のソースを見てみたらいい
- 424 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 21:01:01.85 ]
- >>423
いや、voidの意味から分からん言ってるなら、ロベールが先だろ
- 425 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:13:21.94 ]
- >>420
g++ で -fno-exceptions をつけるとかじゃダメなの?
- 426 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:06:12.81 ]
- 野田改造内閣に早速疑惑浮上
@aritayoshifu 有田芳生 捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の 行方はどこに? @minorucchu ジャーナリスト 田中稔 野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。 34分前 webから https://twitter.com/#!/minorucchu/status/157687110562881537 鹿野と筒井らしい 自公は問責も視野に調査開始だって
- 427 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:08:50.29 ]
- std::cout << "ほげ";
std::wcout << L"ほげ"; JavaからJNI(Java Native Interface)でc++のコードを使っていて、 デバッグ用にcoutを使ったら文字化けしてしまいました。 もしかしてコーディングが違うのでは?とか思いました。 調べてもよくわからないのですけど、おそらくJavaが用意したコンソールは、UTF16のビッグエンディアンなんじゃないかなと思いました。 なので、L"ほげ"というのをBigエンディアンに出来ないでしょうか? LってのがLittleだったら、神がかってるなと思って、B"ほげ"にしてみたらやっぱだめでした。 Localeなのかな。 std::wcout.imbue()付近で調べればわかりますかね?
- 428 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:22:56.59 ]
- >>427
エスパースレで聞いたほうがいい
- 429 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 03:08:09.92 ]
- LはLongだろ
- 430 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:00:04.10 ]
- どこのC++かは知らんが、VC++を使っているなら、
ShiftJIS(を独自拡張したCP932)しか使えないから。 文字列としてUTF16LEを受け入れたり内部で取り扱ったりすることはできるけど localeを経由すると必ずCP932になる。wchar_tに格納していてもCP932になる。 なぜならlocaleがunicode出力を受け付けないから(仕様)。ハゲワラ。
- 431 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:01:54.22 ]
- ごめん、UTF16LEじゃなくてUTF-16BEだったなw ま、これがUTF-32でもUTF-8でもいっしょだ。
localeを経由しないAPIかcharを使ってバイナリでごりごり出力するかどっちかだ。 あと、コンソールもUnicodeモードにしないとだめだぞ。
- 432 名前:デフォルトの名無しさん [2012/01/14(土) 14:05:30.65 ]
- windowsの問題というよりwindows日本語版の問題な。
- 433 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:13:22.67 ]
- >ShiftJIS(を独自拡張したCP932)しか使えないから。
馬鹿は休み休み言え
- 434 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:14:23.39 ]
- >>427
L は Letteral
- 435 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:32:16.79 ]
- 休み 休み 言って見ましたw
- 436 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:35:08.33 ]
- >>432
Windows日本語版の問題? うんにゃ。localeライブラリを自力で記述すればちゃんと動くよ。 VC++のlocaleがUnicodeを受け付けないのが問題なだけ
- 437 名前:デフォルトの名無しさん [2012/01/14(土) 16:03:26.59 ]
- >>423
他人が書いたソースが読めない場合は… まだ基礎力が足りていないんだと思うけど、一応初心者用の本をひと通り勉強したから ここからステップアップするには何が必要なんだろうかなと 他人が書いた"易しめ”のソースが、どこかで見られたら良いなと思うんですけど そういう場所や参考書は無いですか?
- 438 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 16:22:39.21 ]
- まずはアンカーの付け方とsage方を勉強しなさい
- 439 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:25:57.60 ]
- >>437
初心者用の本を読み終われば、他人のコードも読めるようになっているはず。 まだならば、読み切れていない。 知らない単語・関数があるのならば、リファレンス本(or Web)を使え。
- 440 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:42:18.61 ]
- >>439
リファレンス読んでみます。 オススメの初心者用の本を教えて下さい
- 441 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:48:59.22 ]
- codepad.org/N8er8eMm
8行目が4,3,2,1,0,になって欲しいんだけどなんでこうなっちゃうか教えて欲しい コピーコンストラクタが悪いんだろうけど何がおかしいのかわからなくて困ってる
- 442 名前:441 mailto:sage [2012/01/14(土) 19:00:36.48 ]
- >>441は解決しました
スレ汚しすみませんでした
- 443 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:32:10.91 ]
- class Interface {
public: virtual void Release(void) = 0; }; class Hoge : public Interface { public: void Release(void) { delete this; } }; extern "C" __declspec(dllexport) IHoge * __stdcall Create(void) { return new (std::nothrow) IHoge; } --------------- extern "C" __declspec(dllimport) IHoge * __stdcall Create(void) ; これってDLLとEXEでvtableの構成が変わっちゃうかも、とか気にしなくていいの?
- 444 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:32:43.86 ]
- ×Interface
○IHoge で
- 445 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:31:49.20 ]
- >>443
vtblのレイアウトはWindowsでは決まっている(そうじゃないとCOMが動かない)
- 446 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:49:50.45 ]
- >>445
なるほど VC++やOSのバージョンは特に気にしなくていいということですかね 安心しました
- 447 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:20:13.66 ]
- #ifdef HAVE_CPP11
とか #ifdef HAVE_CPP0X みたいなことってできないの?
- 448 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:26:58.33 ]
- www.google.co.jp/search?q=__cplusplus+%92%E8%8B%60%8D%CF%82%DD%8E%AF%95%CA%8Eq+%22c%2B%2B0x%22
かな
|

|