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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2014/10/05(日) 16:53:48.48 ID:4FShMSYH]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
前スレ
【初心者歓迎】C/C++室 Ver.92【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1406801653/

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

2 名前:デフォルトの名無しさん mailto:sage [2014/10/05(日) 16:56:04.71 ID:4FShMSYH]
テンプレここまで

3 名前:デフォルトの名無しさん [2014/10/05(日) 16:57:29.04 ID:a6/ySe32]
               ノ      ゚.ノヽ  , /}      ...
            ,,イ`"     、-'   `;_' '    ..::::::::::::::...
   ,-、  _.._   (        (,(~ヽ'~     ..:::::::::::::::::::::::
 )'~  レー'  〉   ヽ       i`'}       .:::::::::::::::::::::::
 ~つ     '-ー、  i       | i'     ...:::::::::::::::::::::::
 /       <  /     。/   !  ......:::::::::::::::::::::::::    これは>>1乙じゃなくて
/         ~^´     /},-'' ,●::::::::::::::::::::::::::::::::::::
i、        ,i' _,,...,-‐-、/    i  ::::::::  .:::::::::::::
..ゝ        <,,-==、   ,,-,/      .:::::::::::            放射能がうんたら
 )       {~''~>`v-''`ー゙`'~       ..:::::::::                          ........::.
 {        レ_ノ            ..::::::::.                         ......:::::::::
ノ         ''           ..:::::::                        ...::.:...:::::::::
                     .:::::::::                     ...:......:::::::::::: .
                    .:::::::::::.        .....      ..  ..::::::::::::::::::::::::   :::.
                    ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. ::  ::..
                    .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::    ::.
                    ::::::::::::::::: :::::::::::::::::::::::::::::: :::::
                          .::    ::.  :::

4 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 03:55:59.30 ID:PopA18EU]
クラスのメンバ変数にstd::unique_ptrを用意したら
変数が開放されるタイミングっていつでしょうか

変なことを聞いていたらすいません

5 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 04:03:08.69 ID:HfILY2kH]
デストラクタ

6 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 04:12:44.45 ID:PopA18EU]
>>5
ありがとうございます!

7 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 04:56:27.02 ID:PopA18EU]
先日、listでオーバーライドがしたいと
質問させて頂いた折に

>>std::list<抽象クラス*> list;
>>list.push_back(new 派生クラス);
>>ならできる

>>できるけど入れるのはunique_ptrにしとけよ
>>std::list<std::unique_ptr<base>>

と教えて頂いたので
std::list<std::unique_ptr<Base>> base_list;
base_list;.push_back( new 派生クラス );
としたのですが、

オーバーロードされた関数
"std::list<_Ty, _Alloc>::push_back [代入_Ty=std::unique_ptr<Base, std::default_delete<Base>>,
_Alloc=std::allocator<std::unique_ptr<Base, std::default_delete<Base>>>]"
のインスタンスが引数リストと一致しません

引数の型: (派生クラス *)


と出て格納できません...
単純に引数の型が違うぞ
ということだとは分かるのですが
これだと派生クラスを格納できないです...
何が間違っているのか教えていただけると幸いです。
よろしくお願いします。

8 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 05:06:35.25 ID:HfILY2kH]
base_list.emplace_back
これでおk

9 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 06:59:01.31 ID:GjS8ijKL]
>>7
>>できるけど入れるのはunique_ptrにしとけよ
>>std::list<std::unique_ptr<base>>

コレかいたのは俺だけど
list.push_back( std::unique_ptr<base>{new 派生クラス} );
こうやって入れる

10 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 14:23:22.88 ID:GyuMcj/U]
uniqeptrのweakptrってありますか?



11 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 15:28:04.08 ID:PopA18EU]
>>8
調べてみたところ、コンテナ内でで生成する分コピーのコストが省かれるとか...
しかもコードも簡潔になりますね。
便利ですね

>>9
なるほど
unique_ptrとして格納しないといけない
という事ですかね...
考えてみれば当たり前ですね...

この場合、>>8 さんと >>9 さん
どちらの書き方の方が良いのでしょうか

12 名前:デフォルトの名無しさん mailto:sage [2014/10/06(月) 18:01:21.24 ID:hlfW/IbB]
>>10
unique_ptrがどういうものか解ってないようだからshared_ptr使っとけ

13 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 17:27:39.42 ID:vTZNrayY]
あるvectorを複数のクラス間で共有して
どのクラスからでも値を変えたいとした時に
先頭のイテレータを渡すという方法は正しいですです?

14 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 17:37:18.69 ID:i3wuFRlZ]
>>13
固定長として扱うならおk、
その場合はstd::arrayの方が型で説明できるからそうしたいけど。
要素の追加・削除をするならNG

15 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 17:41:04.20 ID:umcRRgPC]
>>13
ダメ。誰かが追加を行なった瞬間にそのイテレータは無効になる。
つーか、なんでvectorの参照を渡さないの?

16 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 18:11:45.18 ID:vTZNrayY]
追加・削除したいです
参照渡しだと先頭アドレスを渡せるんですかね
そこからイテレータを作ってという形になるんですかね
理解しきれてないです
ごめんなさい

17 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 18:23:20.82 ID:umcRRgPC]
void someFunc(std::vector<someType> & vec)
{
for (auto it = vec.begin(); it != vec.end(); ++it) {
someSequence();
}
}

std::vector<someType> vec;
someFunc(vec);

18 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 19:56:45.01 ID:vTZNrayY]
>>17
ありがとうございますです
これは先頭のアドレスのみを渡しているという認識でいいですかね

19 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 20:21:10.60 ID:Mr3CuVyx]
void someFunc(std::vector<someType> * vec)
{
for (auto it = vec.begin(); it != vec.end(); ++it) {
someSequence();
}
}

std::vector<someType> vec;
someFunc(&vec);

こうならわかるかな・・・

20 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 20:35:43.38 ID:Msp0R78m]
>>19
間違ったコードは逆に混乱するからNG



21 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 20:51:26.83 ID:vTZNrayY]
すいませんポインタなのか参照なのかでしか分からないです
あと>>19は間違っているのですか?

22 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 21:07:58.15 ID:udc9ZQ+p]
>>21
ポインタも参照もわかってねーじゃねーか

23 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 21:10:37.56 ID:Msp0R78m]
Cの構造体とそのポインタを勉強し、
構造体のメンバー変数に、ポインタがある場合を考えるべし

24 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 21:51:34.97 ID:Ltx3TZMZ]
とりあえずそんな程度なら設定が悪い
そもそも異なるクラスからっていうのはプロセス跨ぐのかスレッド跨ぐのか同一スコープ内なのか前提条件なさすぎて答えられなくね?

25 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 21:52:47.28 ID:Ltx3TZMZ]
>>24
設定×
設計。

26 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 23:05:51.56 ID:Mr3CuVyx]
>>20
ああドット演算子をアロー演算子に直すの忘れてたわ

27 名前:デフォルトの名無しさん mailto:sage [2014/10/09(木) 16:56:41.56 ID:yBrUft/K]
値渡しとポインタ渡しと参照の違いはわかりますか?

28 名前:デフォルトの名無しさん mailto:sage [2014/10/09(木) 16:59:56.78 ID:XWUcutqt]
分かります

29 名前:デフォルトの名無しさん mailto:sage [2014/10/09(木) 18:12:51.93 ID:EHl7htGY]
Windowsです。
NODEFAULTLIB状態でitoaを使いたいです。
ntdll.dllの_itoa関数を暗黙的インポートしたいのですが
「error C2375: '_itoa' : 再定義されています。異なるリンケージです。」
とでて出来ません。
明示的に別名の関数としてインポートするしかないのでしょうか?

30 名前:デフォルトの名無しさん mailto:sage [2014/10/10(金) 03:06:13.85 ID:Sl2wbznm]
いいえ、そんなことはありません。
ちなみにコンパイラーのエラーのようなので
NODEFAULTLIBとは関係ないでしょう。



31 名前:デフォルトの名無しさん mailto:sage [2014/10/10(金) 05:15:45.39 ID:JlZ57FsU]
windows.hを使わずに代替ヘッダファイルを用意するということでしょうか?
結局user32.dllのwsprintfで同じことができるようなのでそれで済ませることにしました。

32 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 15:44:47.20 ID:8o33UJ2O]
いつも思うんだけどifとelse ifとelseって
同列に見えないからソース見にくいよね?
else if以下は条件式が右にずれてしまうし…

いつもこう書いてるんだけど

if(--------){
}

else if(--------)-{
}

else{
}

これはこれでまとまり感がないし…
なんかいい書き方ないですかね

33 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 15:46:05.55 ID:8o33UJ2O]
とにかく一番嫌いというか見にくいのが

if(--------){
}else if(--------)-{
}else{
}

これ。
コメント書きにくいしなぁ
なんかないかなぁ…

34 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 15:48:28.27 ID:vP4KqGkP]
if (false) {
} else if (=============) {
} else if (~~~~~~~~~~~~~~~) {
} else if (__________________) {
}

35 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:05:19.98 ID:n4H9xNXC]
>>33
俺そのスタイルなんだけど、コメント書きにくいってのは何で?

36 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:31:02.60 ID:K67PydJN]
>>33
これが一番一般的で実際見やすくね?
変なところで切られたら
構造が把握しにくい。
何処かの条件に入ったら
それ以降の条件を見ないのが
if else if ...なのに

37 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:43:02.41 ID:sBs95EDt]
>>32の形式で書いてる
ただしifの閉じ波カッコの行とelseの行は必ず隣接させてる
(コメント行も入れない。elseについてのコメントが必要ならelse句の開き波カッコの後ろに入れる)
else ifのおさまりの悪さは俺も思うけど、諦めてそういう句として見るようにしてる

38 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:47:37.65 ID:bfCObt5l]
>>32
コメントも加えると、こういうことかな?

// if の条件式についてのコメント
if(--------){
 // if 成立時に実行する内容のコメント
}

// else if の条件式についてのコメント
else if(--------)-{
 // else if の同
}

// 非成立時のコメント?
else{
 // 同
}

39 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:54:38.55 ID:sv4A2Uaz]
>>33
俺もこれだな
コメントは、
    // ケース1
if(--------){

    // ケース2
} else if(--------){

} else { // ケース3

}
みたいな。

40 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:57:56.67 ID:6GWa82oQ]
else ifが大量に発生するようなコード設計を回避しようぜ…



41 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 17:02:37.95 ID:K67PydJN]
なんで?

42 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 17:09:37.61 ID:K67PydJN]
lispのcondみたいに書ける構文があれば
良いのだけど。

43 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 17:30:09.51 ID:sBs95EDt]
elseifが大量に出るのはよくない兆し、ってのは俺も聞いたことがあるけど
そこでどんな理由が説明されていたか覚えてないな・・・

今の俺自身の考えは

(1) 処理のまとまりが長くなりすぎる
 if → else if → else if ... ってのが、ある意味一つの処理のまとまりとも取れるので
 それが長くなりすぎると全体の把握がしづらくなることがある
 個人的には、else ifが2個ついていたら「どこまで続くんだこれ・・・」って不安になってくる
 「1つの関数を大きくしすぎないようにする」と似たような考え方

(2) switchで書けるケースがある
 一つの状態(変数)を軸にして分岐する場合はswitch文の方がすっきりすることがたまにある
 まあこれは安易に書き換えられないケースの方が多そうだけど

(3) 付け焼刃的な実装になりがち(?)
 これは完全に俺自身の経験からくるもので万人に当てはまるものではないけど
 「あ、このケース漏れてた。じゃelseifで補足しよう」的な考えが見えてしまって
 やっぱり「大丈夫ですかこのコード・・・」的な不安を覚える(たとえ自分が書いたコードでも)

44 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 17:45:14.00 ID:K67PydJN]
switchの制約が強すぎるんだよ。

本来単純なブロック構造で
switchとにたようなロジックを
if else if ...で書かせるから
無駄にわかりづらくなる。

45 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 18:02:37.48 ID:6GWa82oQ]
複雑な条件分岐はバグのもと
そんなスーパーメソッドは止めて適切に処理分割しよう
単純なものなら見難くはならないのでif elseそのものは否定しないけど、単純化したら三項演算子でよくね?ってケースになることも多い
if elseよりもswitchのほうが良い最適化になることがある
くらいかなー

アジャイル正義とは言わないけど割と感覚的に共感できることは多いよ
まあ実際の仕事だと変なコーディングルールやらでクソコードになっちゃってストレスマッハだけど

46 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 18:12:11.59 ID:sv4A2Uaz]
>>43
>  個人的には、else ifが2個ついていたら「どこまで続くんだこれ・・・」って不安になってくる

一目で把握できないなら、あなたの言うように...

>  「1つの関数を大きくしすぎないようにする」

と同じで、適切に分割すればいいだけかと。

> (2) switchで書けるケースがある

そりゃ書けるなら switch の方がいい。

> (3) 付け焼刃的な実装になりがち(?)

設計のやり方の問題でしょ?

オブジェクト指向で条件分岐が頻出するのはおかしい(多態を使え)と言うのはあるけど、それと混同してない?

47 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 18:23:03.27 ID:sBs95EDt]
>>46
殆どはあなたの言う通りだと思う
(3)については>>41の「なんで?」に対する俺の意見のつもりだった
まさに設計の問題

>>42
Lispのcondっぽく、というとこんな感じ?(exprに相当する部分が汚いけど許して)
 pastebin.com/7p6BDS9w

48 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 18:26:08.42 ID:sBs95EDt]
ごめん、>>47で貼ったコード見直したらうまく動いてないや
忘れて(;´Д`)

49 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 09:24:30.77 ID:0ktC7py0]
これはどうかな
for (int i=0; i<5; i++) {
  if (条件1 && i==0) {
    // 処理1
    break;
  }
  if (条件2 && i==1) {
    // 処理2
    break;
  }
  …
  if (条件4 && i==4) {
    // 処理4
    break;
  }
}

50 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 09:40:18.17 ID:HAWua27Y]
>>49
インデクスを条件にするのはおかしくね?
ループ内に入れる意味が無いと思うんだが。
ただの例だとは思うんだけど、実際いるんだよねー。



51 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 09:59:02.19 ID:0ktC7py0]
>>50
ループに入れないと多条件分岐の大域脱出ができない
if else を使わずにcomplex conditionの多条件分岐をするにはこれしかない

52 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 10:02:24.30 ID:R99qWLrl]
そんなバッドノウハウ的なループを組むぐらいだったら
潔くgotoしたほうがよっぽどすっきりするんじゃ・・・

53 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 10:06:09.49 ID:PPv6Llzm]
>>49
goto がウォーミングアップを開始したようです

54 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 10:32:27.43 ID:yDwfk/q+]
do {} while(false)
使えよ

switch {
case if (a<0):
//何らかの処理
break;
case if (a==0):
//
...
}
みたいな文法が追加されないものか。

55 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 10:32:57.61 ID:UJCB5jQM]
ごとうさん禁止

56 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 10:33:52.69 ID:UJCB5jQM]
>>54
Ruby使っとけ

57 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 15:03:50.49 ID:C0citLy+]
>>51
それは何かを見失ってるぞ…

58 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 15:28:31.26 ID:yFRqmPNp]
これでスッキリ解決
while(1){
  if(条件1){
    // 処理1
    break;
  }
  if(条件2){
    // 処理2
    break;
  }
  …
  if(条件4){
    // 処理4
    break;
  }
  break;
}

59 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 15:56:57.90 ID:xmRmtkZK]
条件式が定数になっていますと出るからやだ!
#pragmaで消すのもやだ!

60 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 16:11:03.09 ID:oBfc/N42]
switch()default{〜};



61 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 16:15:28.41 ID:PPv6Llzm]
>>59
for(;;) { }

62 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 16:16:21.40 ID:ILi3nfyT]
do{
  if(条件1){
    // 処理1
    break;
  }
  if(条件2){
    // 処理2
    break;
  }
  …
  if(条件4){
    // 処理4
    break;
  }
}while(0);

これでも定数条件警告はでるんかね

63 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 16:19:26.50 ID:xmRmtkZK]
でるしループしない

64 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 16:26:04.57 ID:31lhSK+c]
>>62
割といい気がする

>>63
ループしなくていいんじゃないの?

65 名前:デフォルトの名無しさん [2014/10/13(月) 17:02:55.96 ID:yFRqmPNp]
switch-case は実は要らない子

66 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 19:47:15.34 ID:xmRmtkZK]
>>64
じゃあなんでループスコープがあんの?

67 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 19:54:04.38 ID:HxbDOdsz]
breakしてelseifの代わりにしてる
桁が揃う

68 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 20:21:29.13 ID:6VoVg4Hp]
goto使えよ
多重ループを抜けるためのものとして言語仕様に規定されてんだから

69 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 20:23:03.32 ID:83yd1iMH]
>>66
break用

70 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 20:40:29.84 ID:xmRmtkZK]
そっちのが冗長な気が
if   (){
}else if(){
}else{
}
式合わせたいだけならこうじゃあかんの?



71 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 21:18:56.70 ID:R99qWLrl]
pastebin.com/v6Tqy4Ay

ってか反復実行用の制御構造を反復実行以外のために使うの
正直どうかと思うんだけども
あと桁揃えってそんなに必要か?ってのもあるし

72 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 21:27:11.36 ID:VHCsShnL]
こういうのは見たことある
if () {
}
else
if () {
}
else {
}

73 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 22:26:38.93 ID:eSZv2Ied]
変なこと聞きます

どこからでもアクセス、変更できる
全ソース唯一で共通の変数が欲しいんですが
まずいでしょうか?まずいですよね...
どうしたらいいでしょうか

74 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 22:49:45.09 ID:6TQ4M6Zy]
ウンコVisual C++でプリコンパイルヘッダーで宣言して
その定義用ファイルで定義

75 名前:デフォルトの名無しさん [2014/10/13(月) 23:09:38.66 ID:aHzEmfe8]
>>71
なかなか面白いアイディアだと思う。
俺だったら、

#define ifif  if
#define elif  else if


で、

ifif(...){

}
elif(...){

}
else{

}
はどうかな。
ififってモシモシって発音する。俺の発明。

76 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 23:20:25.78 ID:Mz6dBuwi]
ifの入れ子と勘違いする

77 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 23:44:40.22 ID:li7EYIGU]
>>75
そんなの書いてるやついたらぶん殴るわw
趣味なら好きにして良いけど

78 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 23:57:23.66 ID:7i+sJhXA]
>>75
たぶん最低最悪の方法

79 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 00:02:39.56 ID:li7EYIGU]
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/
ここに載ってそうなウンコードだよなww

80 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 00:12:30.16 ID:Y0D0XXw9]
>>73
どうしてもというのであれば仮定義が近いが、それでも唯一というのは無理だね、ヘッダも使えない/使いたくないの?



81 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 00:27:43.42 ID:rPKdJ04U]
>>80
あ、すいません...
cppをソースっていうんでしたね...
ヘッダーでも全く問題ないです

82 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 01:18:36.52 ID:GaMs9Qls]
>>73
どうしてもならSingletonにしてみればどうかな?

83 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 01:21:09.38 ID:YkkW72Cg]
>>82はどうしようもない低脳

84 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 01:23:56.31 ID:GaMs9Qls]
>>83
どこがどう?
externするよりはSingletonにしてアクセサメソッド使うことでデバッグも容易になると思うけど何か読み違えたかな
そうならごめん

85 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 01:26:19.21 ID:t5fH7arr]
>>75
俺は半分皮肉であのコードを書いたので
マジリアクションされても、その、困る

86 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 01:35:32.06 ID:1U4zg6hk]
>>84
Singletonを使うかどうかは質問と関係なくね?

87 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 01:51:12.41 ID:GaMs9Qls]
>>86
うん、Singleton勧めた理由は上述の通りデバッグの観点から
超グローバル使うならリスク少ない方が良いかと思った

88 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 02:31:12.23 ID:rPKdJ04U]
シングルトン
聞いたことはあったのですがこれを機に調べてみました。
素人目から見るとこれいいじゃん!
となったのですが、私の用途の場合どうなのでしょうか

シングルトンを.hに書いて
使いたいクラスでインクルード
そのクラスのコンストラクタでメンバに渡す
メンバ関数でいつでもアクセス・変更が可能
というような具合でしょうか?

89 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 06:01:42.33 ID:sqIDnjxe]
>>88
> 私の用途の場合どうなのでしょうか

あんたの用途がわからんことにはなんとも...

90 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 07:15:12.54 ID:lV7cR9FO]
>>85
ボケにも皮肉にもなってないということだよ



91 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 09:02:01.54 ID:yI2xaj4J]
memory mapped file

92 名前:デフォルトの名無しさん mailto:sage [2014/10/14(火) 12:38:47.77 ID:iGc1RRvU]
>>71
割とあり

93 名前:デフォルトの名無しさん mailto:sage [2014/10/15(水) 08:01:01.84 ID:caHw/4to]
同意します

94 名前:71 mailto:sage [2014/10/15(水) 08:02:56.80 ID:Mz70dzpQ]
まあ別に止めんが

95 名前:デフォルトの名無しさん mailto:sage [2014/10/15(水) 10:38:48.73 ID:caHw/4to]
一回だけループと捉えれば矛盾はしない

96 名前:デフォルトの名無しさん mailto:sage [2014/10/18(土) 18:08:58.62 ID:MX5ZltoI]
名前付きブロックと名前付きブレーク文があればいいのにな。
b1 {
 if (...) { break b1; }
 if (...) { break b1; }
}

b2 {
 for (...) b3 {
  for (...) { if (...) break b2; else brak b3; }
 }
}
と思ったけど、流れが分かりにくくてやっぱ嫌だなw

97 名前:デフォルトの名無しさん mailto:sage [2014/10/18(土) 18:20:58.99 ID:RLn7ZGiN]
goto と変わらん希ガス

98 名前:デフォルトの名無しさん mailto:sage [2014/10/18(土) 18:34:11.42 ID:4Ds6Kb18]
 if (...) { goto b1; }
 if (...) { goto b1; }
b1:;

 for (...) {
b3:;
  for (...) { if (...) goto b2; else goto b3; }
 }
b3:;

99 名前:デフォルトの名無しさん [2014/10/18(土) 20:42:20.12 ID:rcF0KJ7P]
バグってるな

100 名前:デフォルトの名無しさん mailto:sage [2014/10/18(土) 21:05:12.23 ID:b+FwjjaL]
つか、条件式の位置を揃えたいならif と()の間にスペースでも増やして揃えればいいし、
条件式につけるようなコメントが本当に必要なのか?って感じがする
// iが0のとき
if (i == 0) {
  // iが0のときの処理
}
とかバカバカしくね?



101 名前:デフォルトの名無しさん mailto:sage [2014/10/18(土) 21:27:07.64 ID:4Ds6Kb18]
else
if (ってやればいいよね

102 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 00:07:19.88 ID:qe4xvLvd]
>>100
それはコメント書くことがバカバカしいのではなくて
そのコメントの書き方がバカバカしいだけでは?

103 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 05:49:57.35 ID:irMeVnbo]
>>100
例が悪い

104 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 14:21:02.67 ID:sYDl3gbX]
[&amp;]() {
  if (...) {
   ...
   return;
  }
  if (...) {
   ...
   return;
  }
  ...
  ...
}();

105 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 15:02:04.08 ID:sVtqNbj4]
>>104
jQueryみたいだ・・・

106 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 15:10:49.12 ID:GzqB2qjr]
なんでelseで列が合わないってだけでそこまでしなきゃならんねん

107 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 15:47:46.94 ID:n9kPv86G]
>101
だめです
下の下です

108 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 16:49:15.61 ID:PsSi0GjT]
ameblo.jp/nana-2007-july/entry-10037531052.html
に、switchで文字列を使用する方法が書いてあるのですが、
問題なく動くし、switchで文字列が使える事は画期的だと思うのですが、
ググってもここ以外にこの方法に関してヒットしないのですが、世の中ではあまり
普及していない方法なのでしょうか?
このやり方を積極的に使っても問題ないでしょうか?

109 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 16:53:48.42 ID:c/fNN/TF]
文字列(ただし4バイトに限る)なんて使えるとは言わない
そんなのバグの元だやめとけ

110 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 16:55:32.08 ID:PsSi0GjT]
>>文字列(ただし4バイトに限る)
わたしも今気付きました。
残念。
FAQかもしれませんが、switchで文字列を使うお勧めの方法は
ありますか?



111 名前:デフォルトの名無しさん mailto:sage [2014/10/19(日) 16:59:11.07 ID:I8zMPvcx]
>>108
4文字以上で比較がおかしくなるし、10文字以上でバッファーオーバーフローするし、エンディアン考慮してないし
ダメダメ過ぎる

112 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 04:43:09.29 ID:R4boVMR3]
>>108
複数文字の文字定数を使ってるだけで、別に面白いテクではない
もちろんやらない方がいい

>>110
文字列を入力にintを返す関数を使えばいい

113 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 09:12:23.00 ID:nHn9rVxH]
switchで羅列できるような程度の処理分岐なら素直にif(strcmp == 0) ...
ただ値返すだけのような処理ならbsearchかunordered_map使えよ

114 名前:デフォルトの名無しさん [2014/10/20(月) 09:34:51.62 ID:eWr20XAi]
switch なんて飾りです

115 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 21:53:32.14 ID:y5NmhbBv]
うそー switchって書かないとコンパイルエラーになるよー

116 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 22:23:16.91 ID:YIaZ+UJI]
たとえばMyClass.hが物凄く長くなったので分割したい場合、
--- MyClass.h ---
class MyClass{
public:
  int a;
  // ...その他の定義がたくさん
private:
  int b;
  // ...その他の定義がたくさん
};
-----------------
を、
--- MyClass.h ---
class MyClass{
#include "public.h"
#include "private.h
};
-- public.h --
public:
  int a;
  // ...
-- private.h --
private:
  int b;
  // ...
のように、分割したのですが、おかしいですか?
もっとお勧めの方法があれば教えてください。

117 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 22:27:32.77 ID:Z/nnvF1A]
おかしいに決まってんだろ
そんなでかいクラス作るな
もっと分割しろ

118 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 22:35:22.05 ID:YIaZ+UJI]
>>117
レスありがとうございます。
MyClassの設計は別問題として、最初に示した例のように分割したファイルを
#include 文で読み込む方法は、一般的なやり方かどうかを教えてください。

119 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 22:38:02.03 ID:Z/nnvF1A]
単体では何の意味のないヘッダファイル作ってどうすんだよ

120 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 23:16:44.85 ID:YIaZ+UJI]
>>119
ググっても良い例が見つからないのですが、どこかお勧めのサイト
ありませんか?



121 名前:デフォルトの名無しさん mailto:sage [2014/10/20(月) 23:49:59.29 ID:OiFIr1mQ]
ファイルを分けなければならないほどクラスが大きくなったら分割するのが普通だと思う。
とりあえずPImplあたりでprivate部分だけでも分離したら?

122 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 00:14:35.72 ID:y+Kj1blL]
でかいクラスって作った事ないんだけど、具体的にどうするの?

123 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 01:08:23.61 ID:TXfJYF3K]
とりあえず質問に答えるなら一般的ではない
リファクタリングして適切なサイズにするのが一般的だと思うが、社内の力関係とかで無理なら諦めろ

124 名前:デフォルトの名無しさん [2014/10/21(火) 04:53:46.23 ID:X9UkWcg0]
--- MyClass.h ---
class MyClass{
#include "public.inc"
#include "private.inc
};
-- public.inc --
public:
  int a;
  // ...
-- private.inc --
private:
  int b;
  // ...

125 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 05:46:30.86 ID:FIetDqZP]
ファイル分けるほど巨大ならリファクタリングしたいな

126 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 11:43:07.07 ID:c4wBsC2+]
関数内でMixInしたくて#includeしたことある

127 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 11:52:23.39 ID:AscR5tLz]
>関数内で

128 名前:デフォルトの名無しさん [2014/10/21(火) 21:40:25.60 ID:uqnmK+pt]
プログラミング設計の本でこれだけは読んどけってものはありますか?

129 名前:デフォルトの名無しさん mailto:sage [2014/10/21(火) 22:06:07.21 ID:RG7X7O+y]
>>118
>>119 のいうとおりだ、ヘッダというのものは元来複数の .c, .cpp/.C から参照されるべきもの

130 名前:デフォルトの名無しさん mailto:sage [2014/10/22(水) 21:12:18.01 ID:ga5n3yyZ]
すみません
VC++(mfc)で、
Aというダイアログクラスに、Bというリストコントロール(レポートビュー)を作成しています。
BはCListCtrlを継承した独自クラスで、そのなかにCというコンボボックスを作成しリスト内の項目で一部リストから選択できるようにしています。
CはCComboBoxを継承した独自クラスです。
これら全てを合わせて一つの機能をもったダイアログなのですが、
1.Cのコンボボックスのソースになる値(std::vector)
2.1.の変数を操作するメソッド(追加、削除、取得等)
3.Bのリストに表示する値(std::vector)
4.3.を操作するメソッド(追加、削除、取得等)
これらはそれぞれどのクラスに持つのが良いのでしょうか?
オブジェクト指向についてまだまだ勉強不足なのですが、
皆さんのご意見をお聞かせください。

ちなみに現在は、Aのダイアログクラスにすべての値(1.3.)を持たせ、
B,Cはそれのポインタを格納するメンバ変数を持っています。
2.はAのダイアログクラスのメンバ変数で操作し、
4.はCのリストコントロールクラスでリストが変更されるタイミングで変数の値を操作しています。
よろしくお願いします。



131 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 20:50:15.08 ID:2OoN5cPH]
vector<string> v = {"abc", "", "de", "", "fgh"};
の時に、空文字列の要素を除去して v =
"abc"
"de"
"fgh"
にしたいのですが、vectorの要素をループで除去するとエラーして
うまく行きません。お勧めの方法教えてください。

132 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 20:59:50.39 ID:1Ixd4XIg]
vector::eraseの戻り値を使ってiteratorを更新する

133 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 21:07:07.09 ID:qs1er6cd]
>>131
ttp://ideone.com/qUew3U

134 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 21:47:32.19 ID:2OoN5cPH]
>>132,133
レスありがとうございました。
eraseとremoveを組み合わせてこんなに簡単に書けるとは、知らなかったです。
133さん有難うございました。

135 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 22:02:33.02 ID:zZIfWK5x]
ところで"abc"s って書いたらstd::string型になるのって
C++14だっけ?

136 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 23:34:06.70 ID:h3WwlHdL]
v.erase(std::remove(v.begin(),v.end(),””),v.end());

137 名前:デフォルトの名無しさん mailto:sage [2014/10/24(金) 23:49:54.78 ID:bzRiGdHm]
>>135
そう

138 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 14:40:57.22 ID:CQNov1og]
for (const string& s : v) cout << s<< endl;
なんだこれわ
うーむ未熟

139 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 14:46:05.50 ID:GwfszP9i]
for (const string& s : v)
このfor文の残念な仕様は何とかならないものか
for (const string& s : (const vector<string>&)v)
相当のことを簡単にしたいんだが

140 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 14:56:33.12 ID:PupOMkEO]
>>139
そこに何の意味が?



141 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 15:21:11.20 ID:BH5UYxje]
何が残念なのかわからん

142 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 15:46:57.08 ID:2HGeWB2j]
vector<string>::iterator it = v.begin();
const string & s = (const string &)*it;

vector<string>::const_iterator it = ((const vector<string> &)v).begin();
const string & s = *it;

非constのコストが違うかもしれないコンテナでの話とか
気分的な問題か

143 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 16:22:59.91 ID:KswX2872]
constであることに意味があるならconst_cast使って明示的にした方が意図が分かりやすい

144 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 18:39:16.95 ID:PupOMkEO]
いやいやconst_castは違うだろう

145 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 18:51:37.16 ID:VuWM8zaB]
アスペが多いな。
for (auto& itr = v.cbegin(); itr != v.cend(); ++itr)
を簡潔に書きたいってことだろ。
constにキャストするのは今の文法でconst_iteratorを得るための一手段ってだけで

146 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 19:11:43.50 ID:PupOMkEO]
そんなの皆分かっているだろうに。
確実にcbegin呼ばせたいなら
そういうcbegin,cendラップして
begin.endとして見せる
template classとヘルパ関数作ればいい。

それが標準に無いのはそういう需要まで
想定していないだけじゃね。
まあ、std::cbeginが遅れて標準になるくらいだから、一般的な需要を網羅しきれていないのは確かだが。

147 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 19:13:38.13 ID:dFV7jCVh]
そもそもcbeginはautoのために入ったようなもんだろ

148 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 21:43:08.79 ID:Zc1H9u/G]
ヘルパ関数作った。これでどうだ
ideone.com/PrJK5g

149 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 23:03:33.40 ID:vC010Lko]
糞言語の糞コード

150 名前:デフォルトの名無しさん mailto:sage [2014/10/25(土) 23:18:42.59 ID:Vmq3hk+I]
ここで議論しないといけないようなことは使わないという選択



151 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 02:25:41.90 ID:NC0YiWNr]
スーパー初心者なのでスーパー初心者な事聞きますが
ポインタがコスト削減というのも、扱いが難しく危険というのも
なんとなーく分かりましたが
変哲もない、誰に渡すでもない
そんなローカル変数をもポインタで宣言すべきでしょうか?

152 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 02:36:02.76 ID:tTDGdEGp]
NO
ポインタはインスタンス参照時の値コピーコストを減らすのが目的なので、
ポインタへわざわざnewしたインスタンスのアドレスを渡して、破棄(delete)を必須にするのは冗長になるだけ

153 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 03:17:23.53 ID:NC0YiWNr]
おぉ、なるほど
確かに言われてみればそんな気がします
値を渡すことが無い限り、又はint1つ程度の小ささなら
普通の宣言でよいのですね
ありがとうございました

154 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 03:44:09.47 ID:NI/V74vF]
どっかで実体は取るわけだかんね

155 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 04:19:18.75 ID:tTDGdEGp]
一応、スタックに入りきらない時にわざとnewしてヒープに確保する時があるけど、
普段使いだとまずないから普段は通常の変数宣言で良いよ

156 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 04:39:00.30 ID:QN0pZI7S]
>ポインタはインスタンス参照時の値コピーコストを減らすのが目的なので、

バカは意味を考えないから
そういう形式的な観点でしか考えられないのだろう

157 名前:デフォルトの名無しさん [2014/10/26(日) 05:55:15.51 ID:P4UrXCNx]
rubyですね
わかります

158 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 06:59:51.73 ID:7QrOBmsc]
アドレスを保持でき、型サイズ単位のアドレスジャンプ、ないし型インターフェースを提供云々って言えば良かったのか?
質問が具体的操作の一例なのに構造だけ述べたってピンと来る人少ないだろう

159 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 07:07:58.69 ID:/I9/+mIH]
やはり低脳にはポインターは理解できないようだな
大きさとか性能も大切だが そもそも
値としての振る舞いを期待しているのか参照としての振る舞いを期待しているのかの発想が無いらしい

160 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 07:16:13.76 ID:7QrOBmsc]
値としての振る舞いってダブルポインタ以上くらいしか無いと思うが・・・



161 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 07:30:04.50 ID:/US9w/Z3]
>>160
低能って言葉が好きな人に関する傾向を考えると
わざわざ反応する必要はないと思う

162 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 07:58:33.05 ID:/I9/+mIH]
>傾向を考えると

なるほど
レスの内容を読む知能もない低能は
自演するしか能がないわけだなふむふむ

163 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 08:26:38.35 ID:IQ+MA170]
>>158
ポインタの指してるメモリの1word前には確保したときのサイズが格納されてることもある

164 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 08:28:35.93 ID:IQ+MA170]
>>160
ダブルポインタって呼び方いつから流行ったのか知らないけど
誤解を招く表現だからあまり使わない方が良いと思う
ちゃんと「ポインタのポインタ」と言うべき

165 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 09:32:42.41 ID:rLkTHiAH]
それじゃ長すぎ。ポポンタだな

166 名前:デフォルトの名無しさん [2014/10/26(日) 10:12:55.33 ID:CRv5XK0J]
>>164
正確には「ポインタへのポインタ」な。

167 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 10:37:19.40 ID:hAmBOh4e]
>>164
> 誤解を招く表現だからあまり使わない方が良いと思う

なにと誤解するんだ?

168 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 10:45:44.89 ID:USY7r1W5]
double*

169 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 10:47:29.67 ID:sxXC7dR9]
日本語だったら2階のポインタ、で回避できるな

170 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 10:55:14.52 ID:P4UrXCNx]
ダブルポインタなんて言うのは日本時だけだったっけ?



171 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 11:40:28.26 ID:OTYv3dOc]
>>163
それはなんというBSTR型ですか

172 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 13:50:15.01 ID:8S4QBfQC]
>>170
いや日本人でも言わないよ

173 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 13:59:29.63 ID:gMYGq5V7]
>>171
mallocでもなるよ

174 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 16:18:13.37 ID:hyoMl1hX]
>>173
なるかもしれないことに何の意味があるん?

175 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 16:56:10.71 ID:1Oyy5cGI]
アドレスとサイズの情報はどこかでもってるけど前とは限らん
この範囲のアドレスはぜんぶ同じサイって管理もあるしハイブリッドもある

176 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 17:21:15.98 ID:NI/V74vF]
自動(オート)変数って取れなくなる時ってあるっけ?
あるべなぁ・・・
そん時はどうなるんだっけなぁ。なったことないしぃ

ちょと大きめなメモリが欲しいときはstaticで宣言してたなぁ。
C++になってからはSTLでらくちんちんw

177 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 17:29:36.55 ID:ngEx6XQB]
>>176
スタックオーバーフローの話?
register 付けていると &でアドレスが取れなくなる処理系
があったように記憶している

178 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 17:54:06.61 ID:USY7r1W5]
処理系というかもともとcでregister変数のアドレスとるのはできない仕様だったような。
c++はokだけどそれってregisterの意味無いよね

179 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/10/26(日) 21:06:38.86 ID:FU/kawyh]
これかな。知らんかった。
ISO/IEC 9899:2011
6.5.3.2 Address and indirection operators
Constraints
The operand of the unary&operator shall be either a function designator,the result of a []or unary*operator,or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.

180 名前:デフォルトの名無しさん [2014/10/26(日) 21:07:12.33 ID:kiy4PZ8g]
register変数のアドレス参照するようなコードがあってもいちいちエラーにしない親切仕様ってだけだろ
register変数使ってるような古臭いコードのメインテナンス作業者を救済するというか



181 名前:デフォルトの名無しさん mailto:sage [2014/10/26(日) 21:17:14.31 ID:NHig/W5N]
今は昔のautoみたいに飾りだよね

182 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 00:24:34.57 ID:LftTpzNV]
autoキーワードを使うと老害に説明するのが面倒くさい。

183 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 08:30:08.51 ID:YiFaNuCf]
世の中のコンパイラができるだけ早くC++11に対応しますように

184 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 13:47:34.18 ID:MTe62n5j]
clang/G++/Visual C++がそこそこ対応してりゃいいや
Visual C++14はリリースまでに せめてconstexprフル実装して欲しい所

185 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 13:57:59.87 ID:SHa9u56N]
それ以外のC++環境を知らない

186 名前:デフォルトの名無しさん [2014/10/27(月) 14:06:32.19 ID:pOuq9Cgi]
dmc

187 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 19:27:47.44 ID:nARZkbNV]
vc: Windowsで開発するとき使う
g++: Linuxで開発するとき使う
clang: 上記二つの挙動が怪しいと思った時に文法を確認するために使う

icc何ソレうまいの?

188 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 19:33:11.11 ID:6oMDTSh6]
某ランド

189 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 19:37:19.05 ID:LftTpzNV]
>>187はLCC試食版がお似合いな人

190 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 19:38:39.81 ID:6oMDTSh6]
CC見てるとトイレ逝きたくなる



191 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 19:40:20.09 ID:yil7HT1j]
>>189
いぁいぁBDS-CとかDOH-Cで十分でしょう

192 名前:デフォルトの名無しさん mailto:sage [2014/10/27(月) 21:25:00.08 ID:mYDuejPS]
LCC試食版は宗教
何故か劣ったものを他人に勧める迷惑な奴ら

193 名前:デフォルトの名無しさん mailto:sage [2014/10/28(火) 06:47:28.89 ID:AaLfatfL]
opencvのサンプルにあるfind_obj.cpp内のdst_conersはどのように算出されているのでしょうか?
hがそれぞれ何を指しているのかも理解できていない初心者です。
よろしくお願いします。

194 名前:デフォルトの名無しさん mailto:sage [2014/10/28(火) 06:51:37.02 ID:WrhD/8H6]
スレ違いを装った荒らしは去れ

195 名前:デフォルトの名無しさん mailto:sage [2014/10/28(火) 09:44:49.87 ID:XK3wSZjJ]
>>187
iccもappleもclang
もうclang/LLVM化という流れだ

196 名前:デフォルトの名無しさん [2014/10/28(火) 20:42:59.95 ID:kXG8DokC]
組み込み用のチップメーカー謹製コンパイラなんて未だに使ってる奴いる?
gccベースでもないやつ

197 名前:デフォルトの名無しさん [2014/10/30(木) 12:21:16.77 ID:HIs5p7W3]
JavaからCやってるんですが対応関数がよくわかりません

String.splitというメソッドがJavaにはありますが
Cにはあるんですか?

agrs.lengthとやって引数を数えることができたんですが
Cではそんなのはあるんでしょうか?
調べかたが難しいです

198 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 12:27:13.37 ID:5HPq9xeF]
>>197
strtok
argc

199 名前:デフォルトの名無しさん [2014/10/30(木) 13:47:47.64 ID:HIs5p7W3]
ありがとう。
Cの場合ポインタがあるので、すごいたくさん宣言の仕方や書き方があります
1個だけ宣言と値とアドレスの出し方覚えて
そればっかり使って書くのである程度対応ってできるでしょうか
そもそもポインタ使って書かなくて書ける気がしますし
メソッドにアドレスを渡したい時は&aって書いたほうがわかりやすいんですが

配列など大量の同じ意味のいろいろな記述の仕方は
読むための知識であり
自分で書くにはいらないんでしょうか?

200 名前:デフォルトの名無しさん [2014/10/30(木) 14:21:35.41 ID:/AIAlFmM]
イイエ



201 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 15:15:04.84 ID:HIs5p7W3]
ありがとう
EasyIDECというのをつかってるんですが
コマンドライン引数をいれて実行ってどうやってやるんでしょう

202 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 15:48:28.28 ID:1rX8nkrW]
コマンドライン引数をいれて実行ってどういう意味なんでしょう

203 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 15:49:12.95 ID:s/3Hn11s]
visualstudioならできるよ

204 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 15:56:47.23 ID:HIs5p7W3]
>>202
文章問題でよくあるやつです
argvのやつ

205 名前:デフォルトの名無しさん [2014/10/30(木) 16:05:57.58 ID:/AIAlFmM]
真面目に質問してるなら、答えはVisual Studio使え。

荒らしたいだけならUbuntuでも入れてみると良いと思う。
viを使っていろいろするとサイヤ人になれる。
Ctags使ってインテリセンスよりすごいとかいろいろ言えるよ。
頑張れ。

206 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 17:07:28.69 ID:qqM1eCNi]
>>196
shとかにgccベースなんてあるなら教えてくれ。

207 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 17:20:14.39 ID:T0ormrYn]
GCC for SuperH

208 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 20:30:28.60 ID:RCZ8rVU+]
ポインタが難しいんですが
これは値
これはアドレス
メソッドの引数の形はこれ
みたいなおすすめのまとめ表ってないですよね?

209 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 20:48:20.94 ID:tTw0X6PP]
多分おすすめという発想が間違っている
あるいは、stl的デザインパターンがそうなのかもしれない

210 名前:デフォルトの名無しさん [2014/10/30(木) 21:06:20.82 ID:/AIAlFmM]
どこが難しいのかがわからん。



211 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 21:08:20.79 ID:O+0lZGmY]
>>199
アセンブラの勉強をしてから戻ってくればいいさ
どんなコードを出しているかわかれば理解も深まる

gcc だとsave-tempsかな

212 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 21:43:45.71 ID:RCZ8rVU+]
ポインタは自分でまとめるしかないんですね。

char st1[11] = "Hello";
char *st2 = "World";

strcat( st1, st2 );
これのst1が *st1の時どうやって連結するんでしょうか

213 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 21:44:57.71 ID:T0ormrYn]
イミフ

214 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:03:53.50 ID:RCZ8rVU+]
char *st1 = "Hello";
char *st2 = "World";

strcat( st1, st2 );

こういうことです

215 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:06:54.18 ID:P+CVnAvq]
ばっふぁあふれなのでやってはいけません

216 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:09:12.41 ID:RCZ8rVU+]
無理なんですか。どうしてますこういう時?
*strみたいなのが1000個あったり

217 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:09:31.01 ID:xlcuHbGp]
エスパーするとこう
ideone.com/h5TsbX

文字列リテラルは文字分しか確保されてない固定長なので、連結用の配列が別に必要

218 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:10:16.25 ID:xlcuHbGp]
リロード忘れてた

219 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:11:17.67 ID:RCZ8rVU+]
サイズを図ってchar str[]を作って
つなげて
つなげたもののまたサイズ測ってですか?

220 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:12:28.29 ID:P+CVnAvq]
普通にstd::string使えばいい



221 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:14:14.95 ID:RCZ8rVU+]
C言語です

222 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:20:13.33 ID:0FdzLgz5]
文字列を連結したいが結果のサイズが分からない場合どうするのかって事か?

223 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:22:20.93 ID:P+CVnAvq]
strlenと足し算

224 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:32:12.43 ID:xlcuHbGp]
ポインタはあくまでも代入されたアドレスが指す先の値を操作するに過ぎない、要はアドレス専用の変数
文字列リテラルは固定長配列、ポインタst1へ連結しようとすると結果は>>215の通り

新たに用意する配列が固定長なら>>219の通り、色々めんどい、
めんどいのが嫌ならstd::string、std::stringが嫌なら自前で可変長操作、
その場合はめんどくさいメモリ確保処理と解放忘れの問題が付きまとうがCを使うんだから面倒みてやってよね
ideone.com/LrGJJF

225 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:49:52.91 ID:kwGwCnBy]
実行時に必要なメモリが不明な時 って事でしょ。
Cならそこでメモリを取るか、C++ならstring とか STLで楽しく。
gccなら配列の宣言時に要素数を"変数"で指定出来る。やってみ。

226 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:56:12.75 ID:P+CVnAvq]
Cでわざわざ文字列構造体を作るなんて給料泥棒じゃねーか

227 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:00:25.62 ID:T0ormrYn]
誰も言ってないがお前には何が見えているんだ

228 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:05:18.38 ID:P+CVnAvq]
(連結した文字列の長さを効率よく計算するには構造体かクラスのように長さを保持する必要があるがしかし……)
まで脳内補完してくれ

229 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:17:46.40 ID:s/3Hn11s]
Cの文字列は文字の配列に過ぎないから

230 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:20:18.21 ID:cvgUvqEP]
>>228はコミュ障



231 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:28:31.10 ID:P+CVnAvq]
古代人はみんな現代人と話が通じないから対話困難。

232 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:32:46.58 ID:P+CVnAvq]
現代人も古代人から見ると対話困難。
対話困難は相対的なものと言える。

233 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:33:11.69 ID:7MhAAUAK]
>連結した文字列の長さを効率よく計算するには構造体かクラスのように長さを保持する必要がある

文字列の長さ管理じゃなくて「連結した文字列」の長さってのは
どこから湧いて出てきたんだ?

234 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 23:35:51.46 ID:P+CVnAvq]
strcatから

235 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 07:25:38.16 ID:oaAdI0DZ]
char*pTest="test";
sprintf(pTest,"%dok.",i);
みたいな前任者のソースで発狂しそうになった事があるわ

236 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 10:54:56.54 ID:dyhu2CEA]
char *p;
*p=0;

237 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 11:29:29.39 ID:9c95bT0v]
int *n;
*n = 5;

238 名前:デフォルトの名無しさん [2014/10/31(金) 14:35:54.19 ID:xFSA8QSJ]
sprintf() で使われる予定の文字列長を事前に返してくれる関数はありますか?
たとえば

int i = 12345678901234567890;
char *pTest = "test";
sprintf(pTest,"%dok.",i);
の場合
int len = hoge(pTest,"%dok.",i);
で len に 23 が代入されるみたいな

239 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 15:05:51.16 ID:aPk8p0sK]
無いから大目にバッファ取っとけ

240 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 15:07:29.36 ID:9c95bT0v]
C99のsnprintf使えよ



241 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 15:08:03.96 ID:0xcgHm3e]
snprintf
最後の\0は含まない

242 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 16:21:28.51 ID:NwqKHC4I]
>>238
どうしてもということなら、fprintf()の戻り値が出力サイズだからそれが使える。
どこにも出力したくないなら、ナルデバイス(/dev/null)に出力すればいい。

243 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 16:39:23.70 ID:nkl0tAlX]
>>237
プログラマになってからなんと1年半これでやってました。まじ
不思議に動くから困るw

244 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 16:56:33.07 ID:NwqKHC4I]
Christ!

245 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 17:55:53.28 ID:pV90KxjZ]
>>238
len = scprintf("%dok.", i);
でよくね?

246 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 18:46:43.08 ID:RBA0S+28]
eclipseでCをやるとデバックを動かしたあとなのか原因がわかりませんが
全部文字を消してもエラーがでてうごかないとこがあります
エラーが出ましたと言われてもどこに出たのかわからないことが多いですし。

一般的なC言語の開発環境というのは何ですか?
ecliseってjava用ですよね?

247 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 18:49:33.82 ID:ejHWUQeH]
どうせこんなこと聞くやつはwindowsだろうし
VisualStudioでいい

248 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 18:51:35.19 ID:RBA0S+28]
win8です。
参考書には30日たつとゆうりょうになると書いてありました

249 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 18:54:00.49 ID:GUmb6A97]
snprintf?
sprintf_sだろjk

250 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 18:55:30.09 ID:ejHWUQeH]
>>248
んなわけないだろ
そんな腐った本は捨てちまえ



251 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:01:14.02 ID:RBA0S+28]
たくさんありすぎてわからないんですが
Visual Studio Express 2012 for Windows 8
これでいいんですか?

252 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:02:42.71 ID:aPk8p0sK]
それはストアアプリ用
Visual Studio Express 2013 for desktop
を入れろ

253 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:08:55.24 ID:RBA0S+28]
>>252
その単語ででてきます?ないんですけど

254 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:17:00.52 ID:aPk8p0sK]
ttp://www.visualstudio.com/ja-jp/products/visual-studio-express-vs.aspx
あるじゃん

255 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:17:52.99 ID:RBA0S+28]
vs2013.3_dskexp_JPN.iso
4.7 GB

これでいいんですか?でかすぎません?

256 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:21:56.81 ID:aPk8p0sK]
開発環境なんてそれぐらいでかいもんだろ

257 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 19:30:12.78 ID:RBA0S+28]
でかすぎて今日やめとく

258 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 20:44:50.80 ID:0cCeEQ17]
DVD1枚分に余計なものぶち込みまくってるからだ

259 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 21:22:53.88 ID:zWE6Wm7I]
webinstallしろよ
何台にもインストールするのでなければisoダンロードするひつようない

260 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 21:29:31.50 ID:RBA0S+28]
>>259
ネットに常につなげないんですが一度いれるとずっとつかえます?
Microsoft Visual Studio Express 2013 with Update 3 for Web
これですか?



261 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 21:56:31.25 ID:DZaV0AiJ]
dequeってvectorよりlistに近い?

262 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:01:12.06 ID:DZaV0AiJ]
んなわけないですね
なんでreserveがないでしょうか?

263 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:04:04.93 ID:aPk8p0sK]
dequeのどの領域をreserveする気だ

264 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:07:20.53 ID:DZaV0AiJ]
リングバッファのサイズ

265 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:15:35.68 ID:aPk8p0sK]
リングバッファで実装されているとは限らないし
先頭末尾への追加は定数時間なんだから内部のサイズを気にする必要はないだろ

266 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:20:43.67 ID:DZaV0AiJ]
バッファサイズを増やすときにコストがかかるのはvectorと違わないと思ったんだけど、違うの?

267 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:25:06.47 ID:aPk8p0sK]
vectorみたいに領域拡張時のコピーのコストはかからないよ

268 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:27:18.29 ID:DZaV0AiJ]
それは何故?

269 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:34:12.21 ID:aPk8p0sK]
std::list<std::vector<int>> list;
list.emplace_back();
とするのに元から持ってる領域のコピーなんて起きないだろ?

270 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 22:39:37.24 ID:DZaV0AiJ]
そういう実装なら確かに



271 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 23:11:06.70 ID:1hv4dreP]
dequeはvectorと違ってはメモリ領域の連続性の保障いらないし

272 名前:デフォルトの名無しさん mailto:sage [2014/10/31(金) 23:32:52.05 ID:nkl0tAlX]
最初と最後が管理できれば中身も途中もどうでもいいデクの棒

273 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 00:12:16.03 ID:6A68v5BH]
dequeはリングバッファでの実装が多いのか?
俺が昔実装したときはvectorのリストでやったな
リングバッファだとリアロケーションが必要になったとき時間食うだろ

274 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 05:02:10.51 ID:9q09lipk]
常に倍のサイズに拡張していけば平均時間は定数だな

275 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 09:09:51.03 ID:N73zy/Fb]
頭良いな

276 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 09:15:58.85 ID:oG951rSt]
C言語で文字を扱うのって普通やらないんですか?

277 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 09:31:36.25 ID:+aIx/l6K]
C言語は文字列を扱うために造られた言語だよ

278 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 09:40:26.49 ID:6Mb2wx73]
動的配列の面倒くささの一例として文字列が出たからと言って、文字列をやらないって理由にはならないよ

279 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 13:56:35.43 ID:BAlmKsTx]
めんどうですよね文字だけ

280 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 14:02:13.63 ID:hS36Mqce]
そら、40年前に当時のコンピュータを前提に設計された言語なんだから、
色々面倒なのは仕方ない。



281 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 19:03:23.79 ID:NaXltOS/]
プラモデルみたいに楽しいとこでもあるかと。
リンクリストや文字列の切り貼りなんかは1回作っちゃえば
使いまわすだけだし、そんなに気にならないかな。

282 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 19:05:52.28 ID:bVrmggLn]
>>279
string使えば便利やん。

283 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 20:09:45.57 ID:T4d0WzbM]
文字セット周辺が嫌

284 名前:デフォルトの名無しさん mailto:sage [2014/11/01(土) 21:43:00.03 ID:uX1Ymwvo]
文字集合
の意味を理解しない人がひとり

285 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 08:23:14.96 ID:eOU6dP5q]
String *str1="1234565";
String *str2="ちゃんえ";
String *str3="2ちゃん";
String *str4="掲示板";

って文字を連結するにはどうしてます?

286 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 08:30:57.52 ID:wiF4o1zx]
>>285
Stringの定義は?

287 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 08:38:20.63 ID:wiF4o1zx]
>>285
auto *s1 = reinterpret_cast<char const *>(str1);
auto *s2 = reinterpret_cast<char const *>(str2);
auto *s3 = reinterpret_cast<char const *>(str3);
auto *s7 = reinterpret_cast<char const *>(str4);
std::string 連結された文字列 = std::string(s1) + s2 + s3 +s4;

288 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 08:53:48.00 ID:Lqm+QUe+]
>>287
型推論知ってる俺ってすげーw

289 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 11:44:43.30 ID:++xaUzh4]
>>287
C++
でなくてCの場合です

290 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:13:06.00 ID:CjBmvnJw]
strcpy(str, str1);
strcat(str, str2);
strcat(str, str3);
strcat(str, str4);

あるいは

sprintf(str, "%s%s%s%s%s", str1, str2, str3, str4, str5);



291 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:23:33.73 ID:vxEoPS2x]
>>290
おいおい、その str は十分な広さをもった領域を指していることを断っとかないかんでしょ?

292 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:29:06.65 ID:xEMkpyWh]
str[0] = '\0';
char *strs[4] = {str1, str2, str3, str4};

for (int i = 0; i < 4; i++) {
strcat(str, strs[i]);
}

293 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:31:04.69 ID:CjBmvnJw]
>>291
それは常識だからな

おまいはいちいち「トイレでうんこしたら手あらえよ」って言ってもらうのか?

294 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:35:18.66 ID:pqNT6JBN]
>>290
文字覚えるの面倒だから全部*strでやりたいんですが
できなくないんですね

295 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:38:15.66 ID:UL8V4M8/]
機械に文字覚えさせるのはへたくそなのにね

296 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:38:16.79 ID:CjBmvnJw]
>>294
おまいは質問する前に日本語覚えろ?

297 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:48:24.63 ID:vxEoPS2x]
>>293
常識‥常識ってなんだ?誰が決めたんだ?
あとその喩えは極端だね‥あ、俺、ときどき手ぇ洗わんな‥

298 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 12:52:53.30 ID:Lqm+QUe+]
>>293
strncpyを使ってケツを拭いたつもりになってる奴はよく見かける。

299 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 15:01:40.29 ID:xEMkpyWh]
初心者には常識になるまでの学習がまだ足りないだろ

300 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 16:40:22.16 ID:nVDzouXs]
>>298
くぁしく



301 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 16:48:00.05 ID:dpih5k6a]
>>300
linuxjm.sourceforge.jp/html/LDP_man-pages/man3/strcpy.3.html
ここの「注意」んところに書いてある事を言ってるんだと思う
コピー文字数 n に、コピー元文字列の長さより小さい数を指定すると
コピー後の文字列がNUL終端されないから
その後の操作をしくじるとバッファオーバーランとかやらかす可能性がある

302 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 17:08:20.98 ID:02WOdBRy]
strncpy(str, src, n);
str[n-1] = '\0';
常にこう書けば安心

303 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 17:17:14.55 ID:IOKONguf]
strncpy(str, src, n-1);

304 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 17:26:40.22 ID:ncE4y5cR]
strncpy_s 使えばええやん

305 名前:デフォルトの名無しさん [2014/11/02(日) 17:30:09.68 ID:02WOdBRy]
wchar_tでさらに混乱するんですね判ります

306 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 17:33:05.70 ID:ncE4y5cR]
wcsncpy_s 使えばええやん

307 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 18:02:44.51 ID:OTX65kKG]
>>303
それでバッファー初期化してなくて何となく動いてる(たまにアクセスエラー吐く)コードは見たことあるな。

308 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 18:04:47.40 ID:IOKONguf]
>>307
*cpyじゃなくて*catじゃねえ?

309 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 18:07:39.12 ID:02WOdBRy]
一度でも str[n-1] の位置に \0 以外のデータが入ったら終わり

310 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 18:10:30.47 ID:OTX65kKG]
>>308
マジで言ってるなら今まで自分の書いたコード見直した方がいいぞ



311 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 18:46:18.61 ID:IOKONguf]
上書きするのに初期化とかアホじゃねーの

312 名前:デフォルトの名無しさん [2014/11/02(日) 18:47:04.33 ID:ncE4y5cR]
strcpyなんか使わずに
string + string で連結して
c_str()
すればええやん。

313 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 18:51:57.37 ID:OTX65kKG]
>>311
>>303 のコードでいつstr[n-1]が上書きされるんだよ

314 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 19:34:46.65 ID:3JcJaSAl]
FAQ
debugモードのときだけ正常に動きます

315 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 19:36:03.97 ID:3JcJaSAl]
>>312

>>289

316 名前:デフォルトの名無しさん [2014/11/02(日) 20:07:54.18 ID:ncE4y5cR]
>>315
ちょっと便利なC++のstringの機能をCから使っても
ええんちゃあうん?
なんでそないC限定にする必要あるん?

317 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 20:43:34.23 ID:FncLEk0A]
Cオンリーの世界で動いてるモノもあるんやで

318 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 20:51:38.03 ID:ncE4y5cR]
どないな世界やねん

319 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 20:53:37.50 ID:o/WdZ5W1]
linux も windows もそうだね

320 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 20:58:54.31 ID:ncE4y5cR]
g++もvc++も有るがな。.cを.cpp
に変えてビルドするだけやがな。



321 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:13:47.58 ID:PKN5AcrL]
>>289
len = scprintf("%s%s%s%s", str1, str2, str3, str4);
len+\0の分で動的確保

322 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:20:46.80 ID:KDVIc7Px]
それだと出力されね?
普通に>>242じゃだめなの

323 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:23:09.43 ID:OTX65kKG]
カーネルって言いたいんだろ。OSがカーネルだけで出来てるなんて思ってもないだろうにな。

324 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:30:19.20 ID:o1wy83SR]
カーネルおじさん

325 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:32:53.94 ID:9ZcuQJuu]
>>324
が、どうしたんだい?

326 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:36:27.68 ID:PKN5AcrL]
>>322
出力されなかったよ
VC++2010 EE コンソール

327 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:36:41.36 ID:o1wy83SR]
道頓堀に投げ出された

328 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:45:33.99 ID:o1wy83SR]
ワンワン

329 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:48:28.80 ID:o1wy83SR]
にゃんにゃん

330 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:51:40.16 ID:TOrV8LyY]
>>316
釣りじゃないなら、どうやって使うかを書けよ



331 名前: ◆iXuZYxKV0gTb mailto:sage [2014/11/02(日) 21:56:00.20 ID:8weHS+cp]
普通にstrlen、wcslenしろ
引数が文字定数ならコンパイル時に計算されて定数処理される

332 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 21:58:29.29 ID:o1wy83SR]
(1)拡張子を.cから.cppに変える。
(2)#include <string>
(3)std::string型変数を宣言する。連結したい場合は+=や+を使う。
長さを知りたい場合は.size()を使う。
(4)関数で書き込む場合は引数にstd::string&を使い、関数で読み込む場合はconst std::string&を使う。

333 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 22:07:48.16 ID:o1wy83SR]
(5)リファレンスを嫁

334 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 22:10:12.70 ID:TOrV8LyY]
>>332
組み込みで C++ サポートしてないケースは想像できないと?

335 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 22:15:11.47 ID:EyycLmZD]
むしろ組み込みでCやってる人が
文字列の結合程度が本気でわからないはずがない

336 名前:デフォルトの名無しさん [2014/11/02(日) 22:21:44.91 ID:5r/tMWaD]
突然申し訳ないです。

#include <iostream>
#include <string>
using namespace std;

struct person{
string name;
int age;
};
#define MAX 100
int main(){
person *a[MAX], *tmp;
a=new person[MAX];
......

このようなプログラムを組んだのですが、a=new person[MAX];の行で、
" 'person *' から 'person *[100]' に変換できません。 "と出ました。
以下のプログラムでは'person *[100]'の型を使っているので、
上に書いたプログラムの中で'person *'型となっているところを 'person *[100]'型に直したいのですが、
どう改変すればいいでしょうか。

初心者なので専門用語等はあまりわかりませんが、教えてくださると幸いです。

337 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 22:22:02.51 ID:TOrV8LyY]
>>335
わかってるから、>>316 がアホみたいって言ってるだけだが

338 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 22:39:33.87 ID:IyW8WEC0]
>>336
「'person *'型となっているところ」がどこのことを言ってるのかよくわからんけど、
そもそも配列 new なんか使わずに std::vector<person> a(MAX); じゃダメなのか?

339 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 22:42:34.26 ID:FncLEk0A]
ポインタと配列の関係が理解出来てないみたいだね
そこを調べて勉強してみよう

340 名前:デフォルトの名無しさん [2014/11/02(日) 23:24:00.04 ID:5r/tMWaD]
>>338
vectorは使うな、とのことでした……

>>339
ggってみますね。ありがとうございます。



341 名前:デフォルトの名無しさん mailto:sage [2014/11/02(日) 23:58:55.53 ID:IyW8WEC0]
>>340
習作か。じゃ、まあ、がんばれ。

342 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 00:26:13.36 ID:fxU30L/y]
宣言のところをperson *a[MAX]じゃなくperson *aだけにして

person *a, *tmp;
a=new person[MAX];

じゃちがうのかな

343 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 00:43:10.68 ID:Yc5J/idl]
まあそうだけど、C/C++使うなら配列とポインタの関係は知るべきだから調べなさい、と
わからなくなったらまた聞きに来ればよい

344 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 00:50:17.68 ID:qBxjH7bs]
>>316
学生あたりが秋月の小規模マイコン(PICとか)とかを趣味・学校の実習で使うとかだとCでってなるだろ。
Win・Linuxの初心者定番プログラムの秋月キャラLCDに文字表示をPICでやろうってしているんじゃないか

345 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 00:50:41.64 ID:fxU30L/y]
person *a, *tmp;
a=(person *)malloc(MAX*sizeof(person));

やっぱりmallocの方が本質は理解できると思う

346 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 01:00:42.49 ID:wj4A8VFW]
vectorはダメなのにstringはいいのか
じゃあ代わりにdequeでもlistでもいいんじゃないの

347 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 01:05:17.67 ID:GHCh+c9h]
>>345
その代わりC++は一ミリも理解してないって自分で証明しちゃってるしね

348 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 01:07:26.10 ID:I0t195PW]
>>345
mallocじゃコンストラクタが呼ばれないから
危ないだろう

349 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 01:14:59.31 ID:GHCh+c9h]
C++学ぶのに配列newとか不要だよな

350 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 01:15:51.50 ID:gzxZLKcA]
俺はmallocーfreeが好きや。
メモリをガバッと確保してる感じが
伝わって来るのが快感。



351 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 01:38:22.42 ID:1QJRaIFf]
C++使えるならSTL使った方が楽だよ
その環境でパフォーマンスが問題になるようなことなさそうだし
スマートポインタとコンテナでロジック以外の思考を外せるし
ただ、基礎学習ならきちっとCやってメモリ管理するのがええよ
後で他の言語やるときの品質が段違いになる
まあPCアプリもやる組み込みプログラマの一意見だけども、基礎がちゃんとしてないやつは品質もクソだよ

352 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 02:14:02.65 ID:C1Q+kNpr]
今時STLとかどんな糞環境だよ
20世紀からタイムスリップでもしてきたか?

353 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 02:26:04.38 ID:GHCh+c9h]
また沸いた。標準ライブラリに含まれてるのはSTLじゃねえよ厨

354 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 02:38:09.75 ID:wj4A8VFW]
以下STLがあーだーこーだ言うレスが10は付きます

355 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 02:42:16.69 ID:f1DnjkKs]
>>345
最近の数学では
× MAX * sizeof(person)
○ sizeof(person) * MAX
らしいな

356 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:19:13.40 ID:VWaLlR99]
>>351
同意します

357 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:38:31.91 ID:gykicciK]
>>353
誤りを指摘されても事実を受け入れられない人は
プログラミングに向いていない

358 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:43:09.00 ID:GHCh+c9h]
>>357
en.m.wikipedia.org/wiki/Standard_Template_Library

359 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:44:08.77 ID:GHCh+c9h]
>>357
こっちでやってくれ

360 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:48:04.61 ID:VWaLlR99]
>>357
同意します



361 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:54:09.09 ID:MMft+ZKk]
>>350
つ sbrk

362 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 05:59:44.27 ID:UGbZfCjU]
>>357
世の中訂正しなければならない誤りだらけで大変ですね!
頑張って下さい!

363 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 06:01:10.58 ID:wfj2dgwM]
>>358
嘘ソースの代名詞のWikipediaですら「STLは標準C++ライブラリに影響を与えた」と
まともなこと書いてるなw
こっちでやってくれといいつつ自滅ソースのレスを投下するマッチポンプ乙

364 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 06:06:29.94 ID:GHCh+c9h]
>>363
実装の欄に書いてあるの見れないの?

365 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 06:16:12.28 ID:GHCh+c9h]
>>363
そもそもWikipediaをソースとして出したんじゃねえよ。
そんなにそれが大事な事なら正しいソースを出典に明記して修正しろっていってんだよ。

366 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 07:53:51.00 ID:QwIS5woN]
strstream とか sstream とかいつも
STLと標準C++テンプレートライブラリのどっちがどっちだっけになる

367 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 07:59:27.90 ID:i5YIlJSL]
元凶はiostreamだな
混ぜるな危険

368 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 08:57:12.20 ID:gonBAC+u]
Cでって言ってるのにC++使えは答えじゃない

369 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 09:08:00.19 ID:i5YIlJSL]
インターフェースだけCにして内部はC++でも良いんじゃね

370 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 10:23:04.08 ID:Fo7mazF8]
とりあえず貼っとくか。
〜姉妹スレより〜
・STLは標準化前の遺物派
 (ステパノフのアレ、もしくはSGIのアレ)
・コンテナ、イテレーター、アルゴ、ファンクタ
 のみSTL派(string含まず)
・stringもSTL派(iostream含まず)
・テンプレートは全てSTL派
・C++の標準ライブラリは全てSTL派
・なんとなくライブラリは全てSTL派

「化石のSTLは標準ライブラリのコンテナの基礎となった」
が正しい。
標準ライブラリには「ここはSTL」という説明はなく
また化石STLと標準ライブラリの類似部分とは完全に一致でもない



371 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 10:42:57.49 ID:KYPXUM4w]
ここはCとC++が共存すれのはずだが
C++使いが我が物顔でC++の文法やライブラリを
これ見よがしに貼り付けるKUSOSURE

372 名前:デフォルトの名無しさん [2014/11/03(月) 10:50:30.70 ID:Avy9gAi6]
2ちゃんに何を求めるかは人それぞれ

373 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 10:54:39.21 ID:A+2eW2k6]
複数の関数で使う再帰呼び出し回数監視クラス、みたいなのを作りたいんですが
template<class T>class Counter
{
static int _count;
public :
Counter(){_count++;}
~Counter(){_count--;}
int getCount()const{return _count;}
};
複数の関数で呼び出した場合_countを共有しないようにtemplateを使って何とか出来ないかと考えてますが
なにかよい方法ありませんかね?

374 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 10:55:27.70 ID:GHCh+c9h]
C言語だけのスレあったはずだから、C言語を求めるならそっちに行けばいいんじゃね?

375 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 11:07:26.39 ID:LFWM4IX/]
環境依存な話で、Cを外す理由がわからない

376 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 11:14:19.86 ID:wj4A8VFW]
>>373
普通はそんなことせず回数を引数として渡す

377 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 11:18:05.98 ID:GHCh+c9h]
>>373
struct scoped_counter
{
int& count_;
scoped_counter(int &c):count_(c){count_++;}
~scoped_counter(){count_--;}
};

void f()
{
thread_local int recursive_count=0;
scoped_counter c(recursive_count);

std::cout<<recursive_count<<std::endl;
f();
}

378 名前:デフォルトの名無しさん mailto:sage [2014/11/03(月) 11:28:20.75 ID:A+2eW2k6]
>>376
そう言われればそうですね

>>377
thread_localを初めて知りました
ありがとうございます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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