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


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

C++相談室 part62



1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part61
pc11.2ch.net/test/read.cgi/tech/1205059063/

652 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 00:19:50 ]
whileの代わりにgotoをつかえばいい

653 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 00:26:15 ]
>>650
フラグかgotoのどちらかを選ぶんだ。

654 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 00:29:06 ]
>>650
そのwhileブロックは、breakをreturnに変えて
何らかの意味のある名前を付けられるくらいの処理ではありませんか?

655 名前:650 mailto:sage [2008/07/08(火) 00:40:53 ]
whileを続行するかどうかのフラグ判定式に変更しwhileを抜ける場合はFALSEにセットしてからcontinueすればいい

656 名前:650 mailto:sage [2008/07/08(火) 00:42:49 ]
ということに気づき自己解決しました。
レスありがとうございました
(うっかりEnterと一緒にShiftを押してしまい途中で書き込んでしまいました…)

657 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 05:41:19 ]
あくまで自己解決と言い張るならもう質問すんなよ

658 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 06:09:44 ]
何怒ってんだよw

659 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 06:25:05 ]
657は別に怒ってないと思うが、658はなんでちょっぴり興奮してるんだろ、とは思う

660 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 09:38:38 ]
>>653 でフラグ使えと書いてるのに、そんなレスみるまでもなく自分で解決したよ
と言うからだろうw



661 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 09:56:40 ]
時間を鑑みるに、おっきしてるのを鎮めてる最中だったんだよきっと

662 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:15:01 ]
自分のレスの後、同じような内容で
自己解決したと書かれたくらいで、もう質問すんなとか、
もうちょっと心に余裕を持った方が良いかと。

663 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:20:05 ]
良いなぁこの馬鹿をかばう気持ち悪い空気

664 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:23:10 ]
相当頭に来てる御様子ですね。

665 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:27:14 ]
自己解決と書くのは、質問者が「お前ら役立たず」と言ってるようなもんだからなw

666 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:35:03 ]
>>664
ていうか、こう書けば誰を馬鹿と思ってるのかがわかると思ったんで。

なるほどね。

667 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:46:23 ]
>>666
>>662の後に>>663なら、普通は
>>650(馬鹿)をかばう気持ち悪い空気」と捉えるでしょう?
そこでこう書けばというのは、それこそ馬鹿丸(ry

668 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:48:25 ]
もう質問者にとって、このスレは用済みだからこねえよ

669 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:42:48 ]
>>667
うん、こう書けば、無駄に食い下がるかどうかで痛い人かどうかがわかると思ったんで。

なるほどね。

670 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:49:02 ]
オレには悔しいから一歩引いた視点の第3者を装って「なるほどね」と書いてるように見える。



671 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:50:18 ]
>>669
それは自虐ギャグですか?

672 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 16:19:05 ]
unique_ptrって本当にC++0xに入ってくれるんだろうか

673 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 16:47:35 ]
ばかばっか

674 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 17:18:49 ]
>>673
お前がな

675 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 17:26:45 ]
>>674
オマエモナー

676 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 17:27:46 ]
いってよし?

677 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 18:06:30 ]
逝ってよし

678 名前:デフォルトの名無しさん [2008/07/08(火) 22:11:51 ]
>>650
なぜスマートな方法ではないと思うのかを誤魔化さずきちんと述べよ

679 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 22:13:35 ]
gotoは悪って(事実かどうかは別にしても)よく言われてるからだろ。
多分。

680 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 22:38:18 ]
初心者スレと分けてる意味が無いように思う



681 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:33:06 ]
初心者スレってVC++しかなくね?

682 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:33:08 ]
newで動的確保をする際の質問なのですが
Base* foo = new Base(int bar);
この書き方だとBaseの引数付きコンストラクタが呼ばれる事はわかるのですが
動的に配列を確保する場合に引数付きコンストラクタを呼ぶ事は可能なのでしょうか?

イメージ的には↓のようなことをしたいです
Base* foo = new Base[3] {Base(int bar), Base(int bar), Base(int bar), };

683 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:37:08 ]
出来ません

684 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:37:54 ]
>>683
ありがとうございます

685 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 07:03:55 ]
一度配列か何かを確保しておいて、そこにforで引数付きコンストラクタをnewして回せば解決する。
デストラクタに注意

686 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 12:38:32 ]
まずメモリに連続した領域内に生成したいものが、ほんとうに
クラスのインスタンスじゃないとダメなのか再考してみたら?

687 名前:デフォルトの名無しさん [2008/07/09(水) 12:41:11 ]
引き数つきのnewか…これはわりと難しいので、
あとで初期化用メソッドを呼ぶかポインタの配列にしたほうがらくちん。


688 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 19:09:17 ]
VC6以前のVS持っている人はいませんか?
DDE spyを分けて欲しいのですが・・・

689 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 19:18:31 ]
2.0のなら転がってるPCのHDDあされば出てくるかもだが・・・

690 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 19:56:05 ]
>>688
それってダメなんじゃないの?



691 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 20:48:29 ]
>>682
vectorじゃだめなのかい?

692 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 06:15:03 ]
最新のVC++コンパイラって、C99に対する完全な上位互換を持っていると
思っていいの?

693 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 07:29:57 ]
C99はまだスルーされてる

694 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:04:51 ]
まだどころか多分永遠にスルーされる
今の所C99に準拠しているのはIntel C++程度

695 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:05:45 ]
C99なんて有ったの… とか

696 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 12:30:01 ]
対応させるメリットないしな

697 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 14:39:59 ]
一行コメントと関数途中やfor初期化部での変数宣言に対応してくれればあとはいいや

698 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:25:18 ]
たしかVC++チームのブログのコメント欄だかで、C99対応してくれってユーザの声はほとんど無いって言っていたような。
C99のいくつかの有用な機能、一行コメントだとか、restrictだとかは取り入れたが、C99全部入れても、誰も使わないしなぁ。
Variable-length arrayなんて、いまどき誰が使うんだ。

699 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:51:39 ]
C++があるからねえ・・・

700 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 16:16:02 ]
gccでは可変長配列に対応してたりするけどな



701 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 17:36:42 ]
C99欲しい人は何が目当てなの?

702 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 17:39:47 ]
>>698
歴史的経緯でalloca()が実装されてないから、可変長配列はあれば便利だぞ。

703 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:04:05 ]
>歴史的経緯でalloca()が実装されてない
どこのはなし?

704 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:53:10 ]
stdint.hが欲しいんだ。


705 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:07:41 ]
よろしい

706 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:49:43 ]
そもそもallocaはC89、C99の規格の中には存在しない。
ありゃPOSIX規格のモンだ。
このスレ的にはWin32 APIと同等に扱われるべき環境依存の関数。

なんだけど、itoaとかと同じで、事実上無視できない存在ではあるね。
とはいえ、90年代ならまだしも、
今日び、スタックからわずかなメモリを確保できたところで、それほど利点も無いだろ。
現代なら定数時間でメモリを確保解放できるメモリプールで良いじゃん。

707 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:24:39 ]
C99を策定していた委員会の連中もC++98がこれだけ
広く使われるようになるとは夢にも思ってなかったろう。

でないとあれだけ緻密なC99の規格、しかもC89と互換性を
犠牲にしてわざわざ新しい規格を作るはずがない。

708 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:42:07 ]
>>706
>702は、POSIXにはあるallocaがWin32にはないから、代わりに使いたいと言ってるんじゃないかと。
確かに、freeする必要がないメモリを好きに取れるのは楽かもしれんね。
それこそ、今時スタックサイズをけちることもないんだし。

709 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:50:59 ]
ケチる必要は無いかもしれんが多用するのはバカのやることだぞ。
例えば、VCのリンカのデフォルトのスタックサイズは1MBだ。
何GBもメモリがある時代にたったの1MBだぞ。
*unixのことはよく知らんが、そう変わらんだろうよ。
現状の32bitコードで、スタックサイズが大きすぎると、
スレッドを数十個作っただけで、無駄にアドレス空間が浪費される。
だからスタックのサイズは小さいんだよ。

710 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:06:44 ]
>>708
_alloca()ならVC++でも普通に使えるよ



711 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:50:21 ]
こんなこともallocaと
って一度言ってみたいです

712 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 22:03:10 ]

         |:;:;:;:;:;:;:;:;:;:;:;:;:;:i;:;:;:;:;:;:;:;:;:;:;:;:;|
           |;:;:_:;:_:;:_:;:_;:;_:;:l:;_;:_:;:_:;:_:;:_;:_;|
        |______|_____|
        | 三|  _     _   |三 !
        | 三|  三シ   ヾ三  |三 |
        | 三′  .._     _,,..  i三 |
        ト、ニ| <でiンヽ  ;'i"ィでiン |三.|
        ', iヽ!  、 ‐' /  !、 ーシ |シ,イ
         i,ヽリ    ,' :  !.     |f ノ
         ヾ!    i ,、 ,..、ヽ   lノ
          |      _ _    イ l       malloca
            l    ,ィチ‐-‐ヽ  i /、
             ゙i、   ゝ、二フ′ ノ/'"\
              | \  ー一 / /   _,ン'゙\
          ,ィ|、  \     /_,、-'" _,.-''´ `丶、__
       _, イ  | ヽ_ 二=''" _,. -''´  """""´´  ``ー



713 名前:デフォルトの名無しさん [2008/07/10(木) 22:19:03 ]
alloca は gcc の configure でもチェックあるよな

714 名前:デフォルトの名無しさん [2008/07/10(木) 22:20:10 ]
> バカのやることだぞ

まだそんなカキコしてるんですか? にっぽんのドクターさん

715 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 23:11:49 ]
プログラム=PCアプリだと思ってる連中は気楽でいいのう・・

716 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 23:15:46 ]
どう気楽なのかキッチリ説明してもらおう。  (と言ってみる

717 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:06:24 ]
C99は無かったことにならないかな。下手にこんなのがあると、コンパイラ
ベンダーが、C99実装しかねない。

718 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:13:54 ]
たいていのコンパイラベンダはC++を優先するだろ

sizeofがコンパイル時定数にならないとか悪夢過ぎるだろ

719 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:51:13 ]
・conio.hを何とかして欲しい。
・stdint.hの声が何故大きくない?

720 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:58:56 ]
それにしてもC++自体が変態化してきて誰にも使われなくなりそうな気がするのは俺だけだろうか



721 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:06:43 ]
おれのVC++のソース、alloca普通に便利に使ってる

722 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:26:23 ]
C++はいろいろ変な部分があるが、
代わりになるいい言語がないのも事実
web限定とかだとPerl系に軍配が上がるが

723 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:40:53 ]
C++0xはC99みたいな立場になるだろうな
そして代わりに○○が台頭する

○○にはお好きな言語をどうぞ

724 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:55:57 ]
Obj-C

725 名前:デフォルトの名無しさん [2008/07/11(金) 01:58:45 ]
アプリケーション(ダイアログ)に表示された文字を外のアプリケーションから取得する方法ご存知のかたいませんか?


726 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:01:16 ]
D言語がいつか主流になる・・・
そんな風に考えていた時期がありました・・・

727 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:20:56 ]
>>725
君がすれ違いだということだけは、はっきりわかる。
プラットフォームすら記載されてないので、どのすれが適当かはしらん。

728 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 03:03:54 ]
>>726
今ひとつ流行らんよなアレ

729 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 04:15:06 ]
>>728
だってDは、「言語仕様が確定=開発終了」だもん。
D1の仕様は決まったけど、D2のほうが進歩してるのに誰がつかうよ。

730 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 12:54:57 ]
仕様と同時に実装が下りてくるってのもエキサイティングだとは思うがね
なんにせよ俺は指をくわえて見てるだけ



731 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 02:55:05 ]
無名namespaceについて教えてください。

名前のある名前空間の場合、
namespace hoge{
void f();
}
というように宣言して、後で
void hoge::f(){}
のように定義できますが、名前無しの場合
namespace{
void f();
}
として後で定義を書く場合、??::f()というような形式では定義できないのでしょうか?
もちろん定義のときも
namespace{
}で囲ってやればいいのでしょうが、関数定義のような長いものをブラケットで
囲むというのも、邪魔くさいなぁと思い。


732 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 03:05:35 ]
確かに邪魔くさいが、
だからこそそんなもの使わないですむようしておけって話じゃね?

733 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 03:08:33 ]
>>731
>として後で定義を書く場合、??::f()というような形式では定義できないのでしょうか?
こういう参照が出来ないからこそ役に立つんだと思う

734 名前:731 mailto:sage [2008/07/12(土) 03:15:56 ]
レスどうもです。

基本的に、C++では翻訳単位内でのみ使用する変数や関数は、C言語のような
staticを付けるのではなく、無名名前空間を推奨しているようですが、
そうなると関数の定義は
namespace{
void f() { }
}
のようにするということでしょうか。みんなそうしてるのかな。

735 名前:732 mailto:sage [2008/07/12(土) 03:27:22 ]
ごめん。 もっとくだらない理由だと思ってた。

"翻訳単位内でしか使わない"っていうことを明示したいなら、
その邪魔くさいnamespaseが(目立つから)役に立つだろうし、
邪魔くさいnamespaseを使いたくないってことは、
"翻訳単位内でしか使わない"っていうことを明示しなくてかまわない
と、俺は思うけど。

本当に邪魔だと思うなら、翻訳単位内でしか使わないとか、あきらめなよ。

736 名前:731 mailto:sage [2008/07/12(土) 03:51:39 ]
外部リンケージを持たせたくない変数や関数の宣言だけを
namespace{}に収めるところまでは、目立たせる意味でも
一覧という意味でも非常にスッキリしてると思うんですよね。
ただ、ここに関数のボディまで書いてしまうと、一望しづらくなるので
別途書くことになるのですが、関数定義をブラケットで囲むということに
少し拒否反応がでてしまった次第です。ただ、これしか方法がないなら
そうするしかないですね。邪魔だから使わないというわけにもいかない
機能ですし。あとは、関数定義1つ1つをnamespace{]で囲むのか、複数の
関数定義をまとめてnamespace[]で囲むのか、こだわれるところとしたら
そのくらいですか。



737 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 04:02:32 ]
すごい余談だけど、目立たせなくてはいけないのは、関数本体だと思うんだ。
関数本体をメンテナンスするとき、どの関数に使用されているかが問題になるので。

宣言が目立たないと、間違って呼び出そうとしてリンクエラーでるじゃん? それもいやじゃん?
ていわれりゃそうなんだけどさ。

738 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:09:05 ]
templateで、doubleとfloatだけしか使えないようにするには、
何か書き方があるのでしょうか。教えてください。
template<typename T> void hoge(T arg);

739 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:30:51 ]
template<typename T> void hoge(T arg){return;}
void hoge(double arg);
void hoge(float arg);

740 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:33:12 ]
>>738
template<typename T> struct hoge_chk{hoge_chk(){ use_float_or_double(); }};
template<> struct hoge_chk<float>{};
template<> struct hoge_chk<double>{};

template<typename T> void hoge(T arg){
   hoge_chk<T>();
   ...
}



741 名前:740 mailto:sage [2008/07/12(土) 08:35:10 ]
use_float_or_double()は定義されていない前提ね。
コンパイルエラーにさせるため。

742 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:39:49 ]
template<typename T> void hoge(T arg);
template<> void hoge(float arg) { }
template<> void hoge(double arg) { }

でいいじゃん。

743 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:44:11 ]
>>739 >>742
それだと
void hoge(float arg) {}
void hoge(double arg) {}
と同じだし、それぞれ実装書かないといけないから
テンプレート関数にする意味無いだろw

744 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:45:47 ]
template<typename T> void hoge_impl(T arg) {}

template<typename T> void hoge(T arg);
template<> void hoge(float arg) { hoge_impl(arg); }
template<> void hoge(double arg) { hoge_impl(arg); }

745 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:52:53 ]
>>743
同じじゃねーよ。そのコードでhoge("hogehoge")はエラーだけど>>739>>742はエラーじゃない。
テンプレートにする意味がないっていうのは質問者に言えって。

746 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:55:57 ]
>>745
いや、hoge("hogehoge")で>>742はエラーになるよ。

747 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:56:00 ]
>>744
だから下のテンプレート関数は意味無いってw
それでやるならこうだろ
template<typename T> void hoge_impl(T arg) {}
inline void hoge(float arg) { hoge_impl(arg); }
inline void hoge(double arg) { hoge_impl(arg); }

748 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:59:00 ]
質問者がdoubleとfloatだけしか使えないように、と言ってるので
使えてしまう>>739も駄目だな

749 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:04:54 ]
>>745
>テンプレートにする意味がないっていうのは質問者に言えって。
>>740>>747はテンプレートにする意味あると思うけど。

750 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:16:21 ]
>>747
テンプレートの特殊化は関数の多重定義に優先するから
意味が違う



751 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:21:25 ]
>>750
意味分かって言ってる?
それで困る「まともな状況」書いてみ

752 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:22:41 ]
テンプレートの特殊化と関数の多重定義を二つかくと
関数の多重定義の方が無視されるだろ






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

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

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