[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 04/16 18:53 / Filesize : 155 KB / Number-of Response : 599
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.77【環境依存OK】



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が重い事があるのでここも利用)

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っぽいことを書きたい時とかに使う

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モードにしないとだめだぞ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<155KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef