トップページ⇒tech
1001コメント280KB

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

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

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

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
0002デフォルトの名無しさん2014/10/05(日) 16:56:04.71ID:4FShMSYH
テンプレここまで
0003デフォルトの名無しさん2014/10/05(日) 16:57:29.04ID:a6/ySe32
               ノ      ゚.ノヽ  , /}      ...
            ,,イ`"     、-'   `;_' '    ..::::::::::::::...
   ,-、  _.._   (        (,(~ヽ'~     ..:::::::::::::::::::::::
 )'~  レー'  〉   ヽ       i`'}       .:::::::::::::::::::::::
 ~つ     '-ー、  i       | i'     ...:::::::::::::::::::::::
 /       <  /     。/   !  ......:::::::::::::::::::::::::    これは>>1乙じゃなくて
/         ~^´     /},-'' ,●::::::::::::::::::::::::::::::::::::
i、        ,i' _,,...,-‐-、/    i  ::::::::  .:::::::::::::
..ゝ        <,,-==、   ,,-,/      .:::::::::::            放射能がうんたら
 )       {~''~>`v-''`ー゙`'~       ..:::::::::                          ........::.
 {        レ_ノ            ..::::::::.                         ......:::::::::
ノ         ''           ..:::::::                        ...::.:...:::::::::
                     .:::::::::                     ...:......:::::::::::: .
                    .:::::::::::.        .....      ..  ..::::::::::::::::::::::::   :::.
                    ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. ::  ::..
                    .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::    ::.
                    ::::::::::::::::: :::::::::::::::::::::::::::::: :::::
                          .::    ::.  :::
0004デフォルトの名無しさん2014/10/06(月) 03:55:59.30ID:PopA18EU
クラスのメンバ変数にstd::unique_ptrを用意したら
変数が開放されるタイミングっていつでしょうか

変なことを聞いていたらすいません
0005デフォルトの名無しさん2014/10/06(月) 04:03:08.69ID:HfILY2kH
デストラクタ
0006デフォルトの名無しさん2014/10/06(月) 04:12:44.45ID:PopA18EU
>>5
ありがとうございます!
0007デフォルトの名無しさん2014/10/06(月) 04:56:27.02ID: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>>>]"
のインスタンスが引数リストと一致しません

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


と出て格納できません...
単純に引数の型が違うぞ
ということだとは分かるのですが
これだと派生クラスを格納できないです...
何が間違っているのか教えていただけると幸いです。
よろしくお願いします。
0008デフォルトの名無しさん2014/10/06(月) 05:06:35.25ID:HfILY2kH
base_list.emplace_back
これでおk
0009デフォルトの名無しさん2014/10/06(月) 06:59:01.31ID:GjS8ijKL
>>7
>>できるけど入れるのはunique_ptrにしとけよ
>>std::list<std::unique_ptr<base>>

コレかいたのは俺だけど
list.push_back( std::unique_ptr<base>{new 派生クラス} );
こうやって入れる
0010デフォルトの名無しさん2014/10/06(月) 14:23:22.88ID:GyuMcj/U
uniqeptrのweakptrってありますか?
0011デフォルトの名無しさん2014/10/06(月) 15:28:04.08ID:PopA18EU
>>8
調べてみたところ、コンテナ内でで生成する分コピーのコストが省かれるとか...
しかもコードも簡潔になりますね。
便利ですね

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

この場合、>>8 さんと >>9 さん
どちらの書き方の方が良いのでしょうか
0012デフォルトの名無しさん2014/10/06(月) 18:01:21.24ID:hlfW/IbB
>>10
unique_ptrがどういうものか解ってないようだからshared_ptr使っとけ
0013デフォルトの名無しさん2014/10/08(水) 17:27:39.42ID:vTZNrayY
あるvectorを複数のクラス間で共有して
どのクラスからでも値を変えたいとした時に
先頭のイテレータを渡すという方法は正しいですです?
0014デフォルトの名無しさん2014/10/08(水) 17:37:18.69ID:i3wuFRlZ
>>13
固定長として扱うならおk、
その場合はstd::arrayの方が型で説明できるからそうしたいけど。
要素の追加・削除をするならNG
0015デフォルトの名無しさん2014/10/08(水) 17:41:04.20ID:umcRRgPC
>>13
ダメ。誰かが追加を行なった瞬間にそのイテレータは無効になる。
つーか、なんでvectorの参照を渡さないの?
0016デフォルトの名無しさん2014/10/08(水) 18:11:45.18ID:vTZNrayY
追加・削除したいです
参照渡しだと先頭アドレスを渡せるんですかね
そこからイテレータを作ってという形になるんですかね
理解しきれてないです
ごめんなさい
0017デフォルトの名無しさん2014/10/08(水) 18:23:20.82ID:umcRRgPC
void someFunc(std::vector<someType> & vec)
{
for (auto it = vec.begin(); it != vec.end(); ++it) {
someSequence();
}
}

std::vector<someType> vec;
someFunc(vec);
0018デフォルトの名無しさん2014/10/08(水) 19:56:45.01ID:vTZNrayY
>>17
ありがとうございますです
これは先頭のアドレスのみを渡しているという認識でいいですかね
0019デフォルトの名無しさん2014/10/08(水) 20:21:10.60ID:Mr3CuVyx
void someFunc(std::vector<someType> * vec)
{
for (auto it = vec.begin(); it != vec.end(); ++it) {
someSequence();
}
}

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

こうならわかるかな・・・
0020デフォルトの名無しさん2014/10/08(水) 20:35:43.38ID:Msp0R78m
>>19
間違ったコードは逆に混乱するからNG
0021デフォルトの名無しさん2014/10/08(水) 20:51:26.83ID:vTZNrayY
すいませんポインタなのか参照なのかでしか分からないです
あと>>19は間違っているのですか?
0022デフォルトの名無しさん2014/10/08(水) 21:07:58.15ID:udc9ZQ+p
>>21
ポインタも参照もわかってねーじゃねーか
0023デフォルトの名無しさん2014/10/08(水) 21:10:37.56ID:Msp0R78m
Cの構造体とそのポインタを勉強し、
構造体のメンバー変数に、ポインタがある場合を考えるべし
0024デフォルトの名無しさん2014/10/08(水) 21:51:34.97ID:Ltx3TZMZ
とりあえずそんな程度なら設定が悪い
そもそも異なるクラスからっていうのはプロセス跨ぐのかスレッド跨ぐのか同一スコープ内なのか前提条件なさすぎて答えられなくね?
0025デフォルトの名無しさん2014/10/08(水) 21:52:47.28ID:Ltx3TZMZ
>>24
設定×
設計。
0026デフォルトの名無しさん2014/10/08(水) 23:05:51.56ID:Mr3CuVyx
>>20
ああドット演算子をアロー演算子に直すの忘れてたわ
0027デフォルトの名無しさん2014/10/09(木) 16:56:41.56ID:yBrUft/K
値渡しとポインタ渡しと参照の違いはわかりますか?
0028デフォルトの名無しさん2014/10/09(木) 16:59:56.78ID:XWUcutqt
分かります
0029デフォルトの名無しさん2014/10/09(木) 18:12:51.93ID:EHl7htGY
Windowsです。
NODEFAULTLIB状態でitoaを使いたいです。
ntdll.dllの_itoa関数を暗黙的インポートしたいのですが
「error C2375: '_itoa' : 再定義されています。異なるリンケージです。」
とでて出来ません。
明示的に別名の関数としてインポートするしかないのでしょうか?
0030デフォルトの名無しさん2014/10/10(金) 03:06:13.85ID:Sl2wbznm
いいえ、そんなことはありません。
ちなみにコンパイラーのエラーのようなので
NODEFAULTLIBとは関係ないでしょう。
0031デフォルトの名無しさん2014/10/10(金) 05:15:45.39ID:JlZ57FsU
windows.hを使わずに代替ヘッダファイルを用意するということでしょうか?
結局user32.dllのwsprintfで同じことができるようなのでそれで済ませることにしました。
0032デフォルトの名無しさん2014/10/12(日) 15:44:47.20ID:8o33UJ2O
いつも思うんだけどifとelse ifとelseって
同列に見えないからソース見にくいよね?
else if以下は条件式が右にずれてしまうし…

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

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

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

else{
}

これはこれでまとまり感がないし…
なんかいい書き方ないですかね
0033デフォルトの名無しさん2014/10/12(日) 15:46:05.55ID:8o33UJ2O
とにかく一番嫌いというか見にくいのが

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

これ。
コメント書きにくいしなぁ
なんかないかなぁ…
0034デフォルトの名無しさん2014/10/12(日) 15:48:28.27ID:vP4KqGkP
if (false) {
} else if (=============) {
} else if (~~~~~~~~~~~~~~~) {
} else if (__________________) {
}
0035デフォルトの名無しさん2014/10/12(日) 16:05:19.98ID:n4H9xNXC
>>33
俺そのスタイルなんだけど、コメント書きにくいってのは何で?
0036デフォルトの名無しさん2014/10/12(日) 16:31:02.60ID:K67PydJN
>>33
これが一番一般的で実際見やすくね?
変なところで切られたら
構造が把握しにくい。
何処かの条件に入ったら
それ以降の条件を見ないのが
if else if ...なのに
0037デフォルトの名無しさん2014/10/12(日) 16:43:02.41ID:sBs95EDt
>>32の形式で書いてる
ただしifの閉じ波カッコの行とelseの行は必ず隣接させてる
(コメント行も入れない。elseについてのコメントが必要ならelse句の開き波カッコの後ろに入れる)
else ifのおさまりの悪さは俺も思うけど、諦めてそういう句として見るようにしてる
0038デフォルトの名無しさん2014/10/12(日) 16:47:37.65ID:bfCObt5l
>>32
コメントも加えると、こういうことかな?

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

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

// 非成立時のコメント?
else{
 // 同
}
0039デフォルトの名無しさん2014/10/12(日) 16:54:38.55ID:sv4A2Uaz
>>33
俺もこれだな
コメントは、
    // ケース1
if(--------){

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

} else { // ケース3

}
みたいな。
0040デフォルトの名無しさん2014/10/12(日) 16:57:56.67ID:6GWa82oQ
else ifが大量に発生するようなコード設計を回避しようぜ…
0041デフォルトの名無しさん2014/10/12(日) 17:02:37.95ID:K67PydJN
なんで?
0042デフォルトの名無しさん2014/10/12(日) 17:09:37.61ID:K67PydJN
lispのcondみたいに書ける構文があれば
良いのだけど。
0043デフォルトの名無しさん2014/10/12(日) 17:30:09.51ID:sBs95EDt
elseifが大量に出るのはよくない兆し、ってのは俺も聞いたことがあるけど
そこでどんな理由が説明されていたか覚えてないな・・・

今の俺自身の考えは

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

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

(3) 付け焼刃的な実装になりがち(?)
 これは完全に俺自身の経験からくるもので万人に当てはまるものではないけど
 「あ、このケース漏れてた。じゃelseifで補足しよう」的な考えが見えてしまって
 やっぱり「大丈夫ですかこのコード・・・」的な不安を覚える(たとえ自分が書いたコードでも)
0044デフォルトの名無しさん2014/10/12(日) 17:45:14.00ID:K67PydJN
switchの制約が強すぎるんだよ。

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

アジャイル正義とは言わないけど割と感覚的に共感できることは多いよ
まあ実際の仕事だと変なコーディングルールやらでクソコードになっちゃってストレスマッハだけど
0046デフォルトの名無しさん2014/10/12(日) 18:12:11.59ID:sv4A2Uaz
>>43
>  個人的には、else ifが2個ついていたら「どこまで続くんだこれ・・・」って不安になってくる

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

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

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

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

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

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

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

オブジェクト指向で条件分岐が頻出するのはおかしい(多態を使え)と言うのはあるけど、それと混同してない?
0047デフォルトの名無しさん2014/10/12(日) 18:23:03.27ID:sBs95EDt
>>46
殆どはあなたの言う通りだと思う
(3)については>>41の「なんで?」に対する俺の意見のつもりだった
まさに設計の問題

>>42
Lispのcondっぽく、というとこんな感じ?(exprに相当する部分が汚いけど許して)
 http://pastebin.com/7p6BDS9w
0048デフォルトの名無しさん2014/10/12(日) 18:26:08.42ID:sBs95EDt
ごめん、>>47で貼ったコード見直したらうまく動いてないや
忘れて(;´Д`)
0049デフォルトの名無しさん2014/10/13(月) 09:24:30.77ID: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;
  }
}
0050デフォルトの名無しさん2014/10/13(月) 09:40:18.17ID:HAWua27Y
>>49
インデクスを条件にするのはおかしくね?
ループ内に入れる意味が無いと思うんだが。
ただの例だとは思うんだけど、実際いるんだよねー。
0051デフォルトの名無しさん2014/10/13(月) 09:59:02.19ID:0ktC7py0
>>50
ループに入れないと多条件分岐の大域脱出ができない
if else を使わずにcomplex conditionの多条件分岐をするにはこれしかない
0052デフォルトの名無しさん2014/10/13(月) 10:02:24.30ID:R99qWLrl
そんなバッドノウハウ的なループを組むぐらいだったら
潔くgotoしたほうがよっぽどすっきりするんじゃ・・・
0053デフォルトの名無しさん2014/10/13(月) 10:06:09.49ID:PPv6Llzm
>>49
goto がウォーミングアップを開始したようです
0054デフォルトの名無しさん2014/10/13(月) 10:32:27.43ID:yDwfk/q+
do {} while(false)
使えよ

switch {
case if (a<0):
//何らかの処理
break;
case if (a==0):
//
...
}
みたいな文法が追加されないものか。
0055デフォルトの名無しさん2014/10/13(月) 10:32:57.61ID:UJCB5jQM
ごとうさん禁止
0056デフォルトの名無しさん2014/10/13(月) 10:33:52.69ID:UJCB5jQM
>>54
Ruby使っとけ
0057デフォルトの名無しさん2014/10/13(月) 15:03:50.49ID:C0citLy+
>>51
それは何かを見失ってるぞ…
0058デフォルトの名無しさん2014/10/13(月) 15:28:31.26ID:yFRqmPNp
これでスッキリ解決
while(1){
  if(条件1){
    // 処理1
    break;
  }
  if(条件2){
    // 処理2
    break;
  }
  …
  if(条件4){
    // 処理4
    break;
  }
  break;
}
0059デフォルトの名無しさん2014/10/13(月) 15:56:57.90ID:xmRmtkZK
条件式が定数になっていますと出るからやだ!
#pragmaで消すのもやだ!
0060デフォルトの名無しさん2014/10/13(月) 16:11:03.09ID:oBfc/N42
switch()default{〜};
0061デフォルトの名無しさん2014/10/13(月) 16:15:28.41ID:PPv6Llzm
>>59
for(;;) { }
0062デフォルトの名無しさん2014/10/13(月) 16:16:21.40ID:ILi3nfyT
do{
  if(条件1){
    // 処理1
    break;
  }
  if(条件2){
    // 処理2
    break;
  }
  …
  if(条件4){
    // 処理4
    break;
  }
}while(0);

これでも定数条件警告はでるんかね
0063デフォルトの名無しさん2014/10/13(月) 16:19:26.50ID:xmRmtkZK
でるしループしない
0064デフォルトの名無しさん2014/10/13(月) 16:26:04.57ID:31lhSK+c
>>62
割といい気がする

>>63
ループしなくていいんじゃないの?
0065デフォルトの名無しさん2014/10/13(月) 17:02:55.96ID:yFRqmPNp
switch-case は実は要らない子
0066デフォルトの名無しさん2014/10/13(月) 19:47:15.34ID:xmRmtkZK
>>64
じゃあなんでループスコープがあんの?
0067デフォルトの名無しさん2014/10/13(月) 19:54:04.38ID:HxbDOdsz
breakしてelseifの代わりにしてる
桁が揃う
0068デフォルトの名無しさん2014/10/13(月) 20:21:29.13ID:6VoVg4Hp
goto使えよ
多重ループを抜けるためのものとして言語仕様に規定されてんだから
0069デフォルトの名無しさん2014/10/13(月) 20:23:03.32ID:83yd1iMH
>>66
break用
0070デフォルトの名無しさん2014/10/13(月) 20:40:29.84ID:xmRmtkZK
そっちのが冗長な気が
if   (){
}else if(){
}else{
}
式合わせたいだけならこうじゃあかんの?
0071デフォルトの名無しさん2014/10/13(月) 21:18:56.70ID:R99qWLrl
http://pastebin.com/v6Tqy4Ay

ってか反復実行用の制御構造を反復実行以外のために使うの
正直どうかと思うんだけども
あと桁揃えってそんなに必要か?ってのもあるし
0072デフォルトの名無しさん2014/10/13(月) 21:27:11.36ID:VHCsShnL
こういうのは見たことある
if () {
}
else
if () {
}
else {
}
0073デフォルトの名無しさん2014/10/13(月) 22:26:38.93ID:eSZv2Ied
変なこと聞きます

どこからでもアクセス、変更できる
全ソース唯一で共通の変数が欲しいんですが
まずいでしょうか?まずいですよね...
どうしたらいいでしょうか
0074デフォルトの名無しさん2014/10/13(月) 22:49:45.09ID:6TQ4M6Zy
ウンコVisual C++でプリコンパイルヘッダーで宣言して
その定義用ファイルで定義
0075デフォルトの名無しさん2014/10/13(月) 23:09:38.66ID:aHzEmfe8
>>71
なかなか面白いアイディアだと思う。
俺だったら、

#define ifif  if
#define elif  else if


で、

ifif(...){

}
elif(...){

}
else{

}
はどうかな。
ififってモシモシって発音する。俺の発明。
0076デフォルトの名無しさん2014/10/13(月) 23:20:25.78ID:Mz6dBuwi
ifの入れ子と勘違いする
0077デフォルトの名無しさん2014/10/13(月) 23:44:40.22ID:li7EYIGU
>>75
そんなの書いてるやついたらぶん殴るわw
趣味なら好きにして良いけど
0078デフォルトの名無しさん2014/10/13(月) 23:57:23.66ID:7i+sJhXA
>>75
たぶん最低最悪の方法
0079デフォルトの名無しさん2014/10/14(火) 00:02:39.56ID:li7EYIGU
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/
ここに載ってそうなウンコードだよなww
0080デフォルトの名無しさん2014/10/14(火) 00:12:30.16ID:Y0D0XXw9
>>73
どうしてもというのであれば仮定義が近いが、それでも唯一というのは無理だね、ヘッダも使えない/使いたくないの?
0081デフォルトの名無しさん2014/10/14(火) 00:27:43.42ID:rPKdJ04U
>>80
あ、すいません...
cppをソースっていうんでしたね...
ヘッダーでも全く問題ないです
0082デフォルトの名無しさん2014/10/14(火) 01:18:36.52ID:GaMs9Qls
>>73
どうしてもならSingletonにしてみればどうかな?
0083デフォルトの名無しさん2014/10/14(火) 01:21:09.38ID:YkkW72Cg
>>82はどうしようもない低脳
0084デフォルトの名無しさん2014/10/14(火) 01:23:56.31ID:GaMs9Qls
>>83
どこがどう?
externするよりはSingletonにしてアクセサメソッド使うことでデバッグも容易になると思うけど何か読み違えたかな
そうならごめん
0085デフォルトの名無しさん2014/10/14(火) 01:26:19.21ID:t5fH7arr
>>75
俺は半分皮肉であのコードを書いたので
マジリアクションされても、その、困る
0086デフォルトの名無しさん2014/10/14(火) 01:35:32.06ID:1U4zg6hk
>>84
Singletonを使うかどうかは質問と関係なくね?
0087デフォルトの名無しさん2014/10/14(火) 01:51:12.41ID:GaMs9Qls
>>86
うん、Singleton勧めた理由は上述の通りデバッグの観点から
超グローバル使うならリスク少ない方が良いかと思った
0088デフォルトの名無しさん2014/10/14(火) 02:31:12.23ID:rPKdJ04U
シングルトン
聞いたことはあったのですがこれを機に調べてみました。
素人目から見るとこれいいじゃん!
となったのですが、私の用途の場合どうなのでしょうか

シングルトンを.hに書いて
使いたいクラスでインクルード
そのクラスのコンストラクタでメンバに渡す
メンバ関数でいつでもアクセス・変更が可能
というような具合でしょうか?
0089デフォルトの名無しさん2014/10/14(火) 06:01:42.33ID:sqIDnjxe
>>88
> 私の用途の場合どうなのでしょうか

あんたの用途がわからんことにはなんとも...
0090デフォルトの名無しさん2014/10/14(火) 07:15:12.54ID:lV7cR9FO
>>85
ボケにも皮肉にもなってないということだよ
0091デフォルトの名無しさん2014/10/14(火) 09:02:01.54ID:yI2xaj4J
memory mapped file
0092デフォルトの名無しさん2014/10/14(火) 12:38:47.77ID:iGc1RRvU
>>71
割とあり
0093デフォルトの名無しさん2014/10/15(水) 08:01:01.84ID:caHw/4to
同意します
0094712014/10/15(水) 08:02:56.80ID:Mz70dzpQ
まあ別に止めんが
0095デフォルトの名無しさん2014/10/15(水) 10:38:48.73ID:caHw/4to
一回だけループと捉えれば矛盾はしない
0096デフォルトの名無しさん2014/10/18(土) 18:08:58.62ID:MX5ZltoI
名前付きブロックと名前付きブレーク文があればいいのにな。
b1 {
 if (...) { break b1; }
 if (...) { break b1; }
}

b2 {
 for (...) b3 {
  for (...) { if (...) break b2; else brak b3; }
 }
}
と思ったけど、流れが分かりにくくてやっぱ嫌だなw
0097デフォルトの名無しさん2014/10/18(土) 18:20:58.99ID:RLn7ZGiN
goto と変わらん希ガス
0098デフォルトの名無しさん2014/10/18(土) 18:34:11.42ID:4Ds6Kb18
 if (...) { goto b1; }
 if (...) { goto b1; }
b1:;

 for (...) {
b3:;
  for (...) { if (...) goto b2; else goto b3; }
 }
b3:;
0099デフォルトの名無しさん2014/10/18(土) 20:42:20.12ID:rcF0KJ7P
バグってるな
0100デフォルトの名無しさん2014/10/18(土) 21:05:12.23ID:b+FwjjaL
つか、条件式の位置を揃えたいならif と()の間にスペースでも増やして揃えればいいし、
条件式につけるようなコメントが本当に必要なのか?って感じがする
// iが0のとき
if (i == 0) {
  // iが0のときの処理
}
とかバカバカしくね?
0101デフォルトの名無しさん2014/10/18(土) 21:27:07.64ID:4Ds6Kb18
else
if (ってやればいいよね
0102デフォルトの名無しさん2014/10/19(日) 00:07:19.88ID:qe4xvLvd
>>100
それはコメント書くことがバカバカしいのではなくて
そのコメントの書き方がバカバカしいだけでは?
0103デフォルトの名無しさん2014/10/19(日) 05:49:57.35ID:irMeVnbo
>>100
例が悪い
0104デフォルトの名無しさん2014/10/19(日) 14:21:02.67ID:sYDl3gbX
[&amp;]() {
  if (...) {
   ...
   return;
  }
  if (...) {
   ...
   return;
  }
  ...
  ...
}();
0105デフォルトの名無しさん2014/10/19(日) 15:02:04.08ID:sVtqNbj4
>>104
jQueryみたいだ・・・
0106デフォルトの名無しさん2014/10/19(日) 15:10:49.12ID:GzqB2qjr
なんでelseで列が合わないってだけでそこまでしなきゃならんねん
0107デフォルトの名無しさん2014/10/19(日) 15:47:46.94ID:n9kPv86G
>101
だめです
下の下です
0108デフォルトの名無しさん2014/10/19(日) 16:49:15.61ID:PsSi0GjT
http://ameblo.jp/nana-2007-july/entry-10037531052.html
に、switchで文字列を使用する方法が書いてあるのですが、
問題なく動くし、switchで文字列が使える事は画期的だと思うのですが、
ググってもここ以外にこの方法に関してヒットしないのですが、世の中ではあまり
普及していない方法なのでしょうか?
このやり方を積極的に使っても問題ないでしょうか?
0109デフォルトの名無しさん2014/10/19(日) 16:53:48.42ID:c/fNN/TF
文字列(ただし4バイトに限る)なんて使えるとは言わない
そんなのバグの元だやめとけ
0110デフォルトの名無しさん2014/10/19(日) 16:55:32.08ID:PsSi0GjT
>>文字列(ただし4バイトに限る)
わたしも今気付きました。
残念。
FAQかもしれませんが、switchで文字列を使うお勧めの方法は
ありますか?
0111デフォルトの名無しさん2014/10/19(日) 16:59:11.07ID:I8zMPvcx
>>108
4文字以上で比較がおかしくなるし、10文字以上でバッファーオーバーフローするし、エンディアン考慮してないし
ダメダメ過ぎる
0112デフォルトの名無しさん2014/10/20(月) 04:43:09.29ID:R4boVMR3
>>108
複数文字の文字定数を使ってるだけで、別に面白いテクではない
もちろんやらない方がいい

>>110
文字列を入力にintを返す関数を使えばいい
0113デフォルトの名無しさん2014/10/20(月) 09:12:23.00ID:nHn9rVxH
switchで羅列できるような程度の処理分岐なら素直にif(strcmp == 0) ...
ただ値返すだけのような処理ならbsearchかunordered_map使えよ
0114デフォルトの名無しさん2014/10/20(月) 09:34:51.62ID:eWr20XAi
switch なんて飾りです
0115デフォルトの名無しさん2014/10/20(月) 21:53:32.14ID:y5NmhbBv
うそー switchって書かないとコンパイルエラーになるよー
0116デフォルトの名無しさん2014/10/20(月) 22:23:16.91ID: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;
  // ...
のように、分割したのですが、おかしいですか?
もっとお勧めの方法があれば教えてください。
0117デフォルトの名無しさん2014/10/20(月) 22:27:32.77ID:Z/nnvF1A
おかしいに決まってんだろ
そんなでかいクラス作るな
もっと分割しろ
0118デフォルトの名無しさん2014/10/20(月) 22:35:22.05ID:YIaZ+UJI
>>117
レスありがとうございます。
MyClassの設計は別問題として、最初に示した例のように分割したファイルを
#include 文で読み込む方法は、一般的なやり方かどうかを教えてください。
0119デフォルトの名無しさん2014/10/20(月) 22:38:02.03ID:Z/nnvF1A
単体では何の意味のないヘッダファイル作ってどうすんだよ
0120デフォルトの名無しさん2014/10/20(月) 23:16:44.85ID:YIaZ+UJI
>>119
ググっても良い例が見つからないのですが、どこかお勧めのサイト
ありませんか?
0121デフォルトの名無しさん2014/10/20(月) 23:49:59.29ID:OiFIr1mQ
ファイルを分けなければならないほどクラスが大きくなったら分割するのが普通だと思う。
とりあえずPImplあたりでprivate部分だけでも分離したら?
0122デフォルトの名無しさん2014/10/21(火) 00:14:35.72ID:y+Kj1blL
でかいクラスって作った事ないんだけど、具体的にどうするの?
0123デフォルトの名無しさん2014/10/21(火) 01:08:23.61ID:TXfJYF3K
とりあえず質問に答えるなら一般的ではない
リファクタリングして適切なサイズにするのが一般的だと思うが、社内の力関係とかで無理なら諦めろ
0124デフォルトの名無しさん2014/10/21(火) 04:53:46.23ID:X9UkWcg0
--- MyClass.h ---
class MyClass{
#include "public.inc"
#include "private.inc
};
-- public.inc --
public:
  int a;
  // ...
-- private.inc --
private:
  int b;
  // ...
0125デフォルトの名無しさん2014/10/21(火) 05:46:30.86ID:FIetDqZP
ファイル分けるほど巨大ならリファクタリングしたいな
0126デフォルトの名無しさん2014/10/21(火) 11:43:07.07ID:c4wBsC2+
関数内でMixInしたくて#includeしたことある
0127デフォルトの名無しさん2014/10/21(火) 11:52:23.39ID:AscR5tLz
>関数内で
0128デフォルトの名無しさん2014/10/21(火) 21:40:25.60ID:uqnmK+pt
プログラミング設計の本でこれだけは読んどけってものはありますか?
0129デフォルトの名無しさん2014/10/21(火) 22:06:07.21ID:RG7X7O+y
>>118
>>119 のいうとおりだ、ヘッダというのものは元来複数の .c, .cpp/.C から参照されるべきもの
0130デフォルトの名無しさん2014/10/22(水) 21:12:18.01ID: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のリストコントロールクラスでリストが変更されるタイミングで変数の値を操作しています。
よろしくお願いします。
0131デフォルトの名無しさん2014/10/24(金) 20:50:15.08ID:2OoN5cPH
vector<string> v = {"abc", "", "de", "", "fgh"};
の時に、空文字列の要素を除去して v =
"abc"
"de"
"fgh"
にしたいのですが、vectorの要素をループで除去するとエラーして
うまく行きません。お勧めの方法教えてください。
0132デフォルトの名無しさん2014/10/24(金) 20:59:50.39ID:1Ixd4XIg
vector::eraseの戻り値を使ってiteratorを更新する
0133デフォルトの名無しさん2014/10/24(金) 21:07:07.09ID:qs1er6cd
>>131
ttp://ideone.com/qUew3U
0134デフォルトの名無しさん2014/10/24(金) 21:47:32.19ID:2OoN5cPH
>>132,133
レスありがとうございました。
eraseとremoveを組み合わせてこんなに簡単に書けるとは、知らなかったです。
133さん有難うございました。
0135デフォルトの名無しさん2014/10/24(金) 22:02:33.02ID:zZIfWK5x
ところで"abc"s って書いたらstd::string型になるのって
C++14だっけ?
0136デフォルトの名無しさん2014/10/24(金) 23:34:06.70ID:h3WwlHdL
v.erase(std::remove(v.begin(),v.end(),””),v.end());
0137デフォルトの名無しさん2014/10/24(金) 23:49:54.78ID:bzRiGdHm
>>135
そう
0138デフォルトの名無しさん2014/10/25(土) 14:40:57.22ID:CQNov1og
for (const string& s : v) cout << s<< endl;
なんだこれわ
うーむ未熟
0139デフォルトの名無しさん2014/10/25(土) 14:46:05.50ID:GwfszP9i
for (const string& s : v)
このfor文の残念な仕様は何とかならないものか
for (const string& s : (const vector<string>&)v)
相当のことを簡単にしたいんだが
0140デフォルトの名無しさん2014/10/25(土) 14:56:33.12ID:PupOMkEO
>>139
そこに何の意味が?
0141デフォルトの名無しさん2014/10/25(土) 15:21:11.20ID:BH5UYxje
何が残念なのかわからん
0142デフォルトの名無しさん2014/10/25(土) 15:46:57.08ID: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のコストが違うかもしれないコンテナでの話とか
気分的な問題か
0143デフォルトの名無しさん2014/10/25(土) 16:22:59.91ID:KswX2872
constであることに意味があるならconst_cast使って明示的にした方が意図が分かりやすい
0144デフォルトの名無しさん2014/10/25(土) 18:39:16.95ID:PupOMkEO
いやいやconst_castは違うだろう
0145デフォルトの名無しさん2014/10/25(土) 18:51:37.16ID:VuWM8zaB
アスペが多いな。
for (auto& itr = v.cbegin(); itr != v.cend(); ++itr)
を簡潔に書きたいってことだろ。
constにキャストするのは今の文法でconst_iteratorを得るための一手段ってだけで
0146デフォルトの名無しさん2014/10/25(土) 19:11:43.50ID:PupOMkEO
そんなの皆分かっているだろうに。
確実にcbegin呼ばせたいなら
そういうcbegin,cendラップして
begin.endとして見せる
template classとヘルパ関数作ればいい。

それが標準に無いのはそういう需要まで
想定していないだけじゃね。
まあ、std::cbeginが遅れて標準になるくらいだから、一般的な需要を網羅しきれていないのは確かだが。
0147デフォルトの名無しさん2014/10/25(土) 19:13:38.13ID:dFV7jCVh
そもそもcbeginはautoのために入ったようなもんだろ
0148デフォルトの名無しさん2014/10/25(土) 21:43:08.79ID:Zc1H9u/G
ヘルパ関数作った。これでどうだ
http://ideone.com/PrJK5g
0149デフォルトの名無しさん2014/10/25(土) 23:03:33.40ID:vC010Lko
糞言語の糞コード
0150デフォルトの名無しさん2014/10/25(土) 23:18:42.59ID:Vmq3hk+I
ここで議論しないといけないようなことは使わないという選択
0151デフォルトの名無しさん2014/10/26(日) 02:25:41.90ID:NC0YiWNr
スーパー初心者なのでスーパー初心者な事聞きますが
ポインタがコスト削減というのも、扱いが難しく危険というのも
なんとなーく分かりましたが
変哲もない、誰に渡すでもない
そんなローカル変数をもポインタで宣言すべきでしょうか?
0152デフォルトの名無しさん2014/10/26(日) 02:36:02.76ID:tTDGdEGp
NO
ポインタはインスタンス参照時の値コピーコストを減らすのが目的なので、
ポインタへわざわざnewしたインスタンスのアドレスを渡して、破棄(delete)を必須にするのは冗長になるだけ
0153デフォルトの名無しさん2014/10/26(日) 03:17:23.53ID:NC0YiWNr
おぉ、なるほど
確かに言われてみればそんな気がします
値を渡すことが無い限り、又はint1つ程度の小ささなら
普通の宣言でよいのですね
ありがとうございました
0154デフォルトの名無しさん2014/10/26(日) 03:44:09.47ID:NI/V74vF
どっかで実体は取るわけだかんね
0155デフォルトの名無しさん2014/10/26(日) 04:19:18.75ID:tTDGdEGp
一応、スタックに入りきらない時にわざとnewしてヒープに確保する時があるけど、
普段使いだとまずないから普段は通常の変数宣言で良いよ
0156デフォルトの名無しさん2014/10/26(日) 04:39:00.30ID:QN0pZI7S
>ポインタはインスタンス参照時の値コピーコストを減らすのが目的なので、

バカは意味を考えないから
そういう形式的な観点でしか考えられないのだろう
0157デフォルトの名無しさん2014/10/26(日) 05:55:15.51ID:P4UrXCNx
rubyですね
わかります
0158デフォルトの名無しさん2014/10/26(日) 06:59:51.73ID:7QrOBmsc
アドレスを保持でき、型サイズ単位のアドレスジャンプ、ないし型インターフェースを提供云々って言えば良かったのか?
質問が具体的操作の一例なのに構造だけ述べたってピンと来る人少ないだろう
0159デフォルトの名無しさん2014/10/26(日) 07:07:58.69ID:/I9/+mIH
やはり低脳にはポインターは理解できないようだな
大きさとか性能も大切だが そもそも
値としての振る舞いを期待しているのか参照としての振る舞いを期待しているのかの発想が無いらしい
0160デフォルトの名無しさん2014/10/26(日) 07:16:13.76ID:7QrOBmsc
値としての振る舞いってダブルポインタ以上くらいしか無いと思うが・・・
0161デフォルトの名無しさん2014/10/26(日) 07:30:04.50ID:/US9w/Z3
>>160
低能って言葉が好きな人に関する傾向を考えると
わざわざ反応する必要はないと思う
0162デフォルトの名無しさん2014/10/26(日) 07:58:33.05ID:/I9/+mIH
>傾向を考えると

なるほど
レスの内容を読む知能もない低能は
自演するしか能がないわけだなふむふむ
0163デフォルトの名無しさん2014/10/26(日) 08:26:38.35ID:IQ+MA170
>>158
ポインタの指してるメモリの1word前には確保したときのサイズが格納されてることもある
0164デフォルトの名無しさん2014/10/26(日) 08:28:35.93ID:IQ+MA170
>>160
ダブルポインタって呼び方いつから流行ったのか知らないけど
誤解を招く表現だからあまり使わない方が良いと思う
ちゃんと「ポインタのポインタ」と言うべき
0165デフォルトの名無しさん2014/10/26(日) 09:32:42.41ID:rLkTHiAH
それじゃ長すぎ。ポポンタだな
0166デフォルトの名無しさん2014/10/26(日) 10:12:55.33ID:CRv5XK0J
>>164
正確には「ポインタへのポインタ」な。
0167デフォルトの名無しさん2014/10/26(日) 10:37:19.40ID:hAmBOh4e
>>164
> 誤解を招く表現だからあまり使わない方が良いと思う

なにと誤解するんだ?
0168デフォルトの名無しさん2014/10/26(日) 10:45:44.89ID:USY7r1W5
double*
0169デフォルトの名無しさん2014/10/26(日) 10:47:29.67ID:sxXC7dR9
日本語だったら2階のポインタ、で回避できるな
0170デフォルトの名無しさん2014/10/26(日) 10:55:14.52ID:P4UrXCNx
ダブルポインタなんて言うのは日本時だけだったっけ?
0171デフォルトの名無しさん2014/10/26(日) 11:40:28.26ID:OTYv3dOc
>>163
それはなんというBSTR型ですか
0172デフォルトの名無しさん2014/10/26(日) 13:50:15.01ID:8S4QBfQC
>>170
いや日本人でも言わないよ
0173デフォルトの名無しさん2014/10/26(日) 13:59:29.63ID:gMYGq5V7
>>171
mallocでもなるよ
0174デフォルトの名無しさん2014/10/26(日) 16:18:13.37ID:hyoMl1hX
>>173
なるかもしれないことに何の意味があるん?
0175デフォルトの名無しさん2014/10/26(日) 16:56:10.71ID:1Oyy5cGI
アドレスとサイズの情報はどこかでもってるけど前とは限らん
この範囲のアドレスはぜんぶ同じサイって管理もあるしハイブリッドもある
0176デフォルトの名無しさん2014/10/26(日) 17:21:15.98ID:NI/V74vF
自動(オート)変数って取れなくなる時ってあるっけ?
あるべなぁ・・・
そん時はどうなるんだっけなぁ。なったことないしぃ

ちょと大きめなメモリが欲しいときはstaticで宣言してたなぁ。
C++になってからはSTLでらくちんちんw
0177デフォルトの名無しさん2014/10/26(日) 17:29:36.55ID:ngEx6XQB
>>176
スタックオーバーフローの話?
register 付けていると &でアドレスが取れなくなる処理系
があったように記憶している
0178デフォルトの名無しさん2014/10/26(日) 17:54:06.61ID:USY7r1W5
処理系というかもともとcでregister変数のアドレスとるのはできない仕様だったような。
c++はokだけどそれってregisterの意味無いよね
0179KUSO KOTE ◆unko./w.Osri 2014/10/26(日) 21:06:38.86ID: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.
0180デフォルトの名無しさん2014/10/26(日) 21:07:12.33ID:kiy4PZ8g
register変数のアドレス参照するようなコードがあってもいちいちエラーにしない親切仕様ってだけだろ
register変数使ってるような古臭いコードのメインテナンス作業者を救済するというか
0181デフォルトの名無しさん2014/10/26(日) 21:17:14.31ID:NHig/W5N
今は昔のautoみたいに飾りだよね
0182デフォルトの名無しさん2014/10/27(月) 00:24:34.57ID:LftTpzNV
autoキーワードを使うと老害に説明するのが面倒くさい。
0183デフォルトの名無しさん2014/10/27(月) 08:30:08.51ID:YiFaNuCf
世の中のコンパイラができるだけ早くC++11に対応しますように
0184デフォルトの名無しさん2014/10/27(月) 13:47:34.18ID:MTe62n5j
clang/G++/Visual C++がそこそこ対応してりゃいいや
Visual C++14はリリースまでに せめてconstexprフル実装して欲しい所
0185デフォルトの名無しさん2014/10/27(月) 13:57:59.87ID:SHa9u56N
それ以外のC++環境を知らない
0186デフォルトの名無しさん2014/10/27(月) 14:06:32.19ID:pOuq9Cgi
dmc
0187デフォルトの名無しさん2014/10/27(月) 19:27:47.44ID:nARZkbNV
vc: Windowsで開発するとき使う
g++: Linuxで開発するとき使う
clang: 上記二つの挙動が怪しいと思った時に文法を確認するために使う

icc何ソレうまいの?
0188デフォルトの名無しさん2014/10/27(月) 19:33:11.11ID:6oMDTSh6
某ランド
0189デフォルトの名無しさん2014/10/27(月) 19:37:19.05ID:LftTpzNV
>>187はLCC試食版がお似合いな人
0190デフォルトの名無しさん2014/10/27(月) 19:38:39.81ID:6oMDTSh6
CC見てるとトイレ逝きたくなる
0191デフォルトの名無しさん2014/10/27(月) 19:40:20.09ID:yil7HT1j
>>189
いぁいぁBDS-CとかDOH-Cで十分でしょう
0192デフォルトの名無しさん2014/10/27(月) 21:25:00.08ID:mYDuejPS
LCC試食版は宗教
何故か劣ったものを他人に勧める迷惑な奴ら
0193デフォルトの名無しさん2014/10/28(火) 06:47:28.89ID:AaLfatfL
opencvのサンプルにあるfind_obj.cpp内のdst_conersはどのように算出されているのでしょうか?
hがそれぞれ何を指しているのかも理解できていない初心者です。
よろしくお願いします。
0194デフォルトの名無しさん2014/10/28(火) 06:51:37.02ID:WrhD/8H6
スレ違いを装った荒らしは去れ
0195デフォルトの名無しさん2014/10/28(火) 09:44:49.87ID:XK3wSZjJ
>>187
iccもappleもclang
もうclang/LLVM化という流れだ
0196デフォルトの名無しさん2014/10/28(火) 20:42:59.95ID:kXG8DokC
組み込み用のチップメーカー謹製コンパイラなんて未だに使ってる奴いる?
gccベースでもないやつ
0197デフォルトの名無しさん2014/10/30(木) 12:21:16.77ID:HIs5p7W3
JavaからCやってるんですが対応関数がよくわかりません

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

agrs.lengthとやって引数を数えることができたんですが
Cではそんなのはあるんでしょうか?
調べかたが難しいです
0198デフォルトの名無しさん2014/10/30(木) 12:27:13.37ID:5HPq9xeF
>>197
strtok
argc
0199デフォルトの名無しさん2014/10/30(木) 13:47:47.64ID:HIs5p7W3
ありがとう。
Cの場合ポインタがあるので、すごいたくさん宣言の仕方や書き方があります
1個だけ宣言と値とアドレスの出し方覚えて
そればっかり使って書くのである程度対応ってできるでしょうか
そもそもポインタ使って書かなくて書ける気がしますし
メソッドにアドレスを渡したい時は&aって書いたほうがわかりやすいんですが

配列など大量の同じ意味のいろいろな記述の仕方は
読むための知識であり
自分で書くにはいらないんでしょうか?
0200デフォルトの名無しさん2014/10/30(木) 14:21:35.41ID:/AIAlFmM
イイエ
0201デフォルトの名無しさん2014/10/30(木) 15:15:04.84ID:HIs5p7W3
ありがとう
EasyIDECというのをつかってるんですが
コマンドライン引数をいれて実行ってどうやってやるんでしょう
0202デフォルトの名無しさん2014/10/30(木) 15:48:28.28ID:1rX8nkrW
コマンドライン引数をいれて実行ってどういう意味なんでしょう
0203デフォルトの名無しさん2014/10/30(木) 15:49:12.95ID:s/3Hn11s
visualstudioならできるよ
0204デフォルトの名無しさん2014/10/30(木) 15:56:47.23ID:HIs5p7W3
>>202
文章問題でよくあるやつです
argvのやつ
0205デフォルトの名無しさん2014/10/30(木) 16:05:57.58ID:/AIAlFmM
真面目に質問してるなら、答えはVisual Studio使え。

荒らしたいだけならUbuntuでも入れてみると良いと思う。
viを使っていろいろするとサイヤ人になれる。
Ctags使ってインテリセンスよりすごいとかいろいろ言えるよ。
頑張れ。
0206デフォルトの名無しさん2014/10/30(木) 17:07:28.69ID:qqM1eCNi
>>196
shとかにgccベースなんてあるなら教えてくれ。
0207デフォルトの名無しさん2014/10/30(木) 17:20:14.39ID:T0ormrYn
GCC for SuperH
0208デフォルトの名無しさん2014/10/30(木) 20:30:28.60ID:RCZ8rVU+
ポインタが難しいんですが
これは値
これはアドレス
メソッドの引数の形はこれ
みたいなおすすめのまとめ表ってないですよね?
0209デフォルトの名無しさん2014/10/30(木) 20:48:20.94ID:tTw0X6PP
多分おすすめという発想が間違っている
あるいは、stl的デザインパターンがそうなのかもしれない
0210デフォルトの名無しさん2014/10/30(木) 21:06:20.82ID:/AIAlFmM
どこが難しいのかがわからん。
0211デフォルトの名無しさん2014/10/30(木) 21:08:20.79ID:O+0lZGmY
>>199
アセンブラの勉強をしてから戻ってくればいいさ
どんなコードを出しているかわかれば理解も深まる

gcc だとsave-tempsかな
0212デフォルトの名無しさん2014/10/30(木) 21:43:45.71ID:RCZ8rVU+
ポインタは自分でまとめるしかないんですね。

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

strcat( st1, st2 );
これのst1が *st1の時どうやって連結するんでしょうか
0213デフォルトの名無しさん2014/10/30(木) 21:44:57.71ID:T0ormrYn
イミフ
0214デフォルトの名無しさん2014/10/30(木) 22:03:53.50ID:RCZ8rVU+
char *st1 = "Hello";
char *st2 = "World";

strcat( st1, st2 );

こういうことです
0215デフォルトの名無しさん2014/10/30(木) 22:06:54.18ID:P+CVnAvq
ばっふぁあふれなのでやってはいけません
0216デフォルトの名無しさん2014/10/30(木) 22:09:12.41ID:RCZ8rVU+
無理なんですか。どうしてますこういう時?
*strみたいなのが1000個あったり
0217デフォルトの名無しさん2014/10/30(木) 22:09:31.01ID:xlcuHbGp
エスパーするとこう
http://ideone.com/h5TsbX

文字列リテラルは文字分しか確保されてない固定長なので、連結用の配列が別に必要
0218デフォルトの名無しさん2014/10/30(木) 22:10:16.25ID:xlcuHbGp
リロード忘れてた
0219デフォルトの名無しさん2014/10/30(木) 22:11:17.67ID:RCZ8rVU+
サイズを図ってchar str[]を作って
つなげて
つなげたもののまたサイズ測ってですか?
0220デフォルトの名無しさん2014/10/30(木) 22:12:28.29ID:P+CVnAvq
普通にstd::string使えばいい
0221デフォルトの名無しさん2014/10/30(木) 22:14:14.95ID:RCZ8rVU+
C言語です
0222デフォルトの名無しさん2014/10/30(木) 22:20:13.33ID:0FdzLgz5
文字列を連結したいが結果のサイズが分からない場合どうするのかって事か?
0223デフォルトの名無しさん2014/10/30(木) 22:22:20.93ID:P+CVnAvq
strlenと足し算
0224デフォルトの名無しさん2014/10/30(木) 22:32:12.43ID:xlcuHbGp
ポインタはあくまでも代入されたアドレスが指す先の値を操作するに過ぎない、要はアドレス専用の変数
文字列リテラルは固定長配列、ポインタst1へ連結しようとすると結果は>>215の通り

新たに用意する配列が固定長なら>>219の通り、色々めんどい、
めんどいのが嫌ならstd::string、std::stringが嫌なら自前で可変長操作、
その場合はめんどくさいメモリ確保処理と解放忘れの問題が付きまとうがCを使うんだから面倒みてやってよね
http://ideone.com/LrGJJF
0225デフォルトの名無しさん2014/10/30(木) 22:49:52.91ID:kwGwCnBy
実行時に必要なメモリが不明な時 って事でしょ。
Cならそこでメモリを取るか、C++ならstring とか STLで楽しく。
gccなら配列の宣言時に要素数を"変数"で指定出来る。やってみ。
0226デフォルトの名無しさん2014/10/30(木) 22:56:12.75ID:P+CVnAvq
Cでわざわざ文字列構造体を作るなんて給料泥棒じゃねーか
0227デフォルトの名無しさん2014/10/30(木) 23:00:25.62ID:T0ormrYn
誰も言ってないがお前には何が見えているんだ
0228デフォルトの名無しさん2014/10/30(木) 23:05:18.38ID:P+CVnAvq
(連結した文字列の長さを効率よく計算するには構造体かクラスのように長さを保持する必要があるがしかし……)
まで脳内補完してくれ
0229デフォルトの名無しさん2014/10/30(木) 23:17:46.40ID:s/3Hn11s
Cの文字列は文字の配列に過ぎないから
0230デフォルトの名無しさん2014/10/30(木) 23:20:18.21ID:cvgUvqEP
>>228はコミュ障
0231デフォルトの名無しさん2014/10/30(木) 23:28:31.10ID:P+CVnAvq
古代人はみんな現代人と話が通じないから対話困難。
0232デフォルトの名無しさん2014/10/30(木) 23:32:46.58ID:P+CVnAvq
現代人も古代人から見ると対話困難。
対話困難は相対的なものと言える。
0233デフォルトの名無しさん2014/10/30(木) 23:33:11.69ID:7MhAAUAK
>連結した文字列の長さを効率よく計算するには構造体かクラスのように長さを保持する必要がある

文字列の長さ管理じゃなくて「連結した文字列」の長さってのは
どこから湧いて出てきたんだ?
0234デフォルトの名無しさん2014/10/30(木) 23:35:51.46ID:P+CVnAvq
strcatから
0235デフォルトの名無しさん2014/10/31(金) 07:25:38.16ID:oaAdI0DZ
char*pTest="test";
sprintf(pTest,"%dok.",i);
みたいな前任者のソースで発狂しそうになった事があるわ
0236デフォルトの名無しさん2014/10/31(金) 10:54:56.54ID:dyhu2CEA
char *p;
*p=0;
0237デフォルトの名無しさん2014/10/31(金) 11:29:29.39ID:9c95bT0v
int *n;
*n = 5;
0238デフォルトの名無しさん2014/10/31(金) 14:35:54.19ID:xFSA8QSJ
sprintf() で使われる予定の文字列長を事前に返してくれる関数はありますか?
たとえば

int i = 12345678901234567890;
char *pTest = "test";
sprintf(pTest,"%dok.",i);
の場合
int len = hoge(pTest,"%dok.",i);
で len に 23 が代入されるみたいな
0239デフォルトの名無しさん2014/10/31(金) 15:05:51.16ID:aPk8p0sK
無いから大目にバッファ取っとけ
0240デフォルトの名無しさん2014/10/31(金) 15:07:29.36ID:9c95bT0v
C99のsnprintf使えよ
0241デフォルトの名無しさん2014/10/31(金) 15:08:03.96ID:0xcgHm3e
snprintf
最後の\0は含まない
0242デフォルトの名無しさん2014/10/31(金) 16:21:28.51ID:NwqKHC4I
>>238
どうしてもということなら、fprintf()の戻り値が出力サイズだからそれが使える。
どこにも出力したくないなら、ナルデバイス(/dev/null)に出力すればいい。
0243デフォルトの名無しさん2014/10/31(金) 16:39:23.70ID:nkl0tAlX
>>237
プログラマになってからなんと1年半これでやってました。まじ
不思議に動くから困るw
0244デフォルトの名無しさん2014/10/31(金) 16:56:33.07ID:NwqKHC4I
Christ!
0245デフォルトの名無しさん2014/10/31(金) 17:55:53.28ID:pV90KxjZ
>>238
len = scprintf("%dok.", i);
でよくね?
0246デフォルトの名無しさん2014/10/31(金) 18:46:43.08ID:RBA0S+28
eclipseでCをやるとデバックを動かしたあとなのか原因がわかりませんが
全部文字を消してもエラーがでてうごかないとこがあります
エラーが出ましたと言われてもどこに出たのかわからないことが多いですし。

一般的なC言語の開発環境というのは何ですか?
ecliseってjava用ですよね?
0247デフォルトの名無しさん2014/10/31(金) 18:49:33.82ID:ejHWUQeH
どうせこんなこと聞くやつはwindowsだろうし
VisualStudioでいい
0248デフォルトの名無しさん2014/10/31(金) 18:51:35.19ID:RBA0S+28
win8です。
参考書には30日たつとゆうりょうになると書いてありました
0249デフォルトの名無しさん2014/10/31(金) 18:54:00.49ID:GUmb6A97
snprintf?
sprintf_sだろjk
0250デフォルトの名無しさん2014/10/31(金) 18:55:30.09ID:ejHWUQeH
>>248
んなわけないだろ
そんな腐った本は捨てちまえ
0251デフォルトの名無しさん2014/10/31(金) 19:01:14.02ID:RBA0S+28
たくさんありすぎてわからないんですが
Visual Studio Express 2012 for Windows 8
これでいいんですか?
0252デフォルトの名無しさん2014/10/31(金) 19:02:42.71ID:aPk8p0sK
それはストアアプリ用
Visual Studio Express 2013 for desktop
を入れろ
0253デフォルトの名無しさん2014/10/31(金) 19:08:55.24ID:RBA0S+28
>>252
その単語ででてきます?ないんですけど
0254デフォルトの名無しさん2014/10/31(金) 19:17:00.52ID:aPk8p0sK
ttp://www.visualstudio.com/ja-jp/products/visual-studio-express-vs.aspx
あるじゃん
0255デフォルトの名無しさん2014/10/31(金) 19:17:52.99ID:RBA0S+28
vs2013.3_dskexp_JPN.iso
4.7 GB

これでいいんですか?でかすぎません?
0256デフォルトの名無しさん2014/10/31(金) 19:21:56.81ID:aPk8p0sK
開発環境なんてそれぐらいでかいもんだろ
0257デフォルトの名無しさん2014/10/31(金) 19:30:12.78ID:RBA0S+28
でかすぎて今日やめとく
0258デフォルトの名無しさん2014/10/31(金) 20:44:50.80ID:0cCeEQ17
DVD1枚分に余計なものぶち込みまくってるからだ
0259デフォルトの名無しさん2014/10/31(金) 21:22:53.88ID:zWE6Wm7I
webinstallしろよ
何台にもインストールするのでなければisoダンロードするひつようない
0260デフォルトの名無しさん2014/10/31(金) 21:29:31.50ID:RBA0S+28
>>259
ネットに常につなげないんですが一度いれるとずっとつかえます?
Microsoft Visual Studio Express 2013 with Update 3 for Web
これですか?
0261デフォルトの名無しさん2014/10/31(金) 21:56:31.25ID:DZaV0AiJ
dequeってvectorよりlistに近い?
0262デフォルトの名無しさん2014/10/31(金) 22:01:12.06ID:DZaV0AiJ
んなわけないですね
なんでreserveがないでしょうか?
0263デフォルトの名無しさん2014/10/31(金) 22:04:04.93ID:aPk8p0sK
dequeのどの領域をreserveする気だ
0264デフォルトの名無しさん2014/10/31(金) 22:07:20.53ID:DZaV0AiJ
リングバッファのサイズ
0265デフォルトの名無しさん2014/10/31(金) 22:15:35.68ID:aPk8p0sK
リングバッファで実装されているとは限らないし
先頭末尾への追加は定数時間なんだから内部のサイズを気にする必要はないだろ
0266デフォルトの名無しさん2014/10/31(金) 22:20:43.67ID:DZaV0AiJ
バッファサイズを増やすときにコストがかかるのはvectorと違わないと思ったんだけど、違うの?
0267デフォルトの名無しさん2014/10/31(金) 22:25:06.47ID:aPk8p0sK
vectorみたいに領域拡張時のコピーのコストはかからないよ
0268デフォルトの名無しさん2014/10/31(金) 22:27:18.29ID:DZaV0AiJ
それは何故?
0269デフォルトの名無しさん2014/10/31(金) 22:34:12.21ID:aPk8p0sK
std::list<std::vector<int>> list;
list.emplace_back();
とするのに元から持ってる領域のコピーなんて起きないだろ?
0270デフォルトの名無しさん2014/10/31(金) 22:39:37.24ID:DZaV0AiJ
そういう実装なら確かに
0271デフォルトの名無しさん2014/10/31(金) 23:11:06.70ID:1hv4dreP
dequeはvectorと違ってはメモリ領域の連続性の保障いらないし
0272デフォルトの名無しさん2014/10/31(金) 23:32:52.05ID:nkl0tAlX
最初と最後が管理できれば中身も途中もどうでもいいデクの棒
0273デフォルトの名無しさん2014/11/01(土) 00:12:16.03ID:6A68v5BH
dequeはリングバッファでの実装が多いのか?
俺が昔実装したときはvectorのリストでやったな
リングバッファだとリアロケーションが必要になったとき時間食うだろ
0274デフォルトの名無しさん2014/11/01(土) 05:02:10.51ID:9q09lipk
常に倍のサイズに拡張していけば平均時間は定数だな
0275デフォルトの名無しさん2014/11/01(土) 09:09:51.03ID:N73zy/Fb
頭良いな
0276デフォルトの名無しさん2014/11/01(土) 09:15:58.85ID:oG951rSt
C言語で文字を扱うのって普通やらないんですか?
0277デフォルトの名無しさん2014/11/01(土) 09:31:36.25ID:+aIx/l6K
C言語は文字列を扱うために造られた言語だよ
0278デフォルトの名無しさん2014/11/01(土) 09:40:26.49ID:6Mb2wx73
動的配列の面倒くささの一例として文字列が出たからと言って、文字列をやらないって理由にはならないよ
0279デフォルトの名無しさん2014/11/01(土) 13:56:35.43ID:BAlmKsTx
めんどうですよね文字だけ
0280デフォルトの名無しさん2014/11/01(土) 14:02:13.63ID:hS36Mqce
そら、40年前に当時のコンピュータを前提に設計された言語なんだから、
色々面倒なのは仕方ない。
0281デフォルトの名無しさん2014/11/01(土) 19:03:23.79ID:NaXltOS/
プラモデルみたいに楽しいとこでもあるかと。
リンクリストや文字列の切り貼りなんかは1回作っちゃえば
使いまわすだけだし、そんなに気にならないかな。
0282デフォルトの名無しさん2014/11/01(土) 19:05:52.28ID:bVrmggLn
>>279
string使えば便利やん。
0283デフォルトの名無しさん2014/11/01(土) 20:09:45.57ID:T4d0WzbM
文字セット周辺が嫌
0284デフォルトの名無しさん2014/11/01(土) 21:43:00.03ID:uX1Ymwvo
文字集合
の意味を理解しない人がひとり
0285デフォルトの名無しさん2014/11/02(日) 08:23:14.96ID:eOU6dP5q
String *str1="1234565";
String *str2="ちゃんえ";
String *str3="2ちゃん";
String *str4="掲示板";

って文字を連結するにはどうしてます?
0286デフォルトの名無しさん2014/11/02(日) 08:30:57.52ID:wiF4o1zx
>>285
Stringの定義は?
0287デフォルトの名無しさん2014/11/02(日) 08:38:20.63ID: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;
0288デフォルトの名無しさん2014/11/02(日) 08:53:48.00ID:Lqm+QUe+
>>287
型推論知ってる俺ってすげーw
0289デフォルトの名無しさん2014/11/02(日) 11:44:43.30ID:++xaUzh4
>>287
C++
でなくてCの場合です
0290デフォルトの名無しさん2014/11/02(日) 12:13:06.00ID: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);
0291デフォルトの名無しさん2014/11/02(日) 12:23:33.73ID:vxEoPS2x
>>290
おいおい、その str は十分な広さをもった領域を指していることを断っとかないかんでしょ?
0292デフォルトの名無しさん2014/11/02(日) 12:29:06.65ID:xEMkpyWh
str[0] = '\0';
char *strs[4] = {str1, str2, str3, str4};

for (int i = 0; i < 4; i++) {
strcat(str, strs[i]);
}
0293デフォルトの名無しさん2014/11/02(日) 12:31:04.69ID:CjBmvnJw
>>291
それは常識だからな

おまいはいちいち「トイレでうんこしたら手あらえよ」って言ってもらうのか?
0294デフォルトの名無しさん2014/11/02(日) 12:35:18.66ID:pqNT6JBN
>>290
文字覚えるの面倒だから全部*strでやりたいんですが
できなくないんですね
0295デフォルトの名無しさん2014/11/02(日) 12:38:15.66ID:UL8V4M8/
機械に文字覚えさせるのはへたくそなのにね
0296デフォルトの名無しさん2014/11/02(日) 12:38:16.79ID:CjBmvnJw
>>294
おまいは質問する前に日本語覚えろ?
0297デフォルトの名無しさん2014/11/02(日) 12:48:24.63ID:vxEoPS2x
>>293
常識‥常識ってなんだ?誰が決めたんだ?
あとその喩えは極端だね‥あ、俺、ときどき手ぇ洗わんな‥
0298デフォルトの名無しさん2014/11/02(日) 12:52:53.30ID:Lqm+QUe+
>>293
strncpyを使ってケツを拭いたつもりになってる奴はよく見かける。
0299デフォルトの名無しさん2014/11/02(日) 15:01:40.29ID:xEMkpyWh
初心者には常識になるまでの学習がまだ足りないだろ
0300デフォルトの名無しさん2014/11/02(日) 16:40:22.16ID:nVDzouXs
>>298
くぁしく
0301デフォルトの名無しさん2014/11/02(日) 16:48:00.05ID:dpih5k6a
>>300
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/strcpy.3.html
ここの「注意」んところに書いてある事を言ってるんだと思う
コピー文字数 n に、コピー元文字列の長さより小さい数を指定すると
コピー後の文字列がNUL終端されないから
その後の操作をしくじるとバッファオーバーランとかやらかす可能性がある
0302デフォルトの名無しさん2014/11/02(日) 17:08:20.98ID:02WOdBRy
strncpy(str, src, n);
str[n-1] = '\0';
常にこう書けば安心
0303デフォルトの名無しさん2014/11/02(日) 17:17:14.55ID:IOKONguf
strncpy(str, src, n-1);
0304デフォルトの名無しさん2014/11/02(日) 17:26:40.22ID:ncE4y5cR
strncpy_s 使えばええやん
0305デフォルトの名無しさん2014/11/02(日) 17:30:09.68ID:02WOdBRy
wchar_tでさらに混乱するんですね判ります
0306デフォルトの名無しさん2014/11/02(日) 17:33:05.70ID:ncE4y5cR
wcsncpy_s 使えばええやん
0307デフォルトの名無しさん2014/11/02(日) 18:02:44.51ID:OTX65kKG
>>303
それでバッファー初期化してなくて何となく動いてる(たまにアクセスエラー吐く)コードは見たことあるな。
0308デフォルトの名無しさん2014/11/02(日) 18:04:47.40ID:IOKONguf
>>307
*cpyじゃなくて*catじゃねえ?
0309デフォルトの名無しさん2014/11/02(日) 18:07:39.12ID:02WOdBRy
一度でも str[n-1] の位置に \0 以外のデータが入ったら終わり
0310デフォルトの名無しさん2014/11/02(日) 18:10:30.47ID:OTX65kKG
>>308
マジで言ってるなら今まで自分の書いたコード見直した方がいいぞ
0311デフォルトの名無しさん2014/11/02(日) 18:46:18.61ID:IOKONguf
上書きするのに初期化とかアホじゃねーの
0312デフォルトの名無しさん2014/11/02(日) 18:47:04.33ID:ncE4y5cR
strcpyなんか使わずに
string + string で連結して
c_str()
すればええやん。
0313デフォルトの名無しさん2014/11/02(日) 18:51:57.37ID:OTX65kKG
>>311
>>303 のコードでいつstr[n-1]が上書きされるんだよ
0314デフォルトの名無しさん2014/11/02(日) 19:34:46.65ID:3JcJaSAl
FAQ
debugモードのときだけ正常に動きます
0315デフォルトの名無しさん2014/11/02(日) 19:36:03.97ID:3JcJaSAl
>>312

>>289
0316デフォルトの名無しさん2014/11/02(日) 20:07:54.18ID:ncE4y5cR
>>315
ちょっと便利なC++のstringの機能をCから使っても
ええんちゃあうん?
なんでそないC限定にする必要あるん?
0317デフォルトの名無しさん2014/11/02(日) 20:43:34.23ID:FncLEk0A
Cオンリーの世界で動いてるモノもあるんやで
0318デフォルトの名無しさん2014/11/02(日) 20:51:38.03ID:ncE4y5cR
どないな世界やねん
0319デフォルトの名無しさん2014/11/02(日) 20:53:37.50ID:o/WdZ5W1
linux も windows もそうだね
0320デフォルトの名無しさん2014/11/02(日) 20:58:54.31ID:ncE4y5cR
g++もvc++も有るがな。.cを.cpp
に変えてビルドするだけやがな。
0321デフォルトの名無しさん2014/11/02(日) 21:13:47.58ID:PKN5AcrL
>>289
len = scprintf("%s%s%s%s", str1, str2, str3, str4);
len+\0の分で動的確保
0322デフォルトの名無しさん2014/11/02(日) 21:20:46.80ID:KDVIc7Px
それだと出力されね?
普通に>>242じゃだめなの
0323デフォルトの名無しさん2014/11/02(日) 21:23:09.43ID:OTX65kKG
カーネルって言いたいんだろ。OSがカーネルだけで出来てるなんて思ってもないだろうにな。
0324デフォルトの名無しさん2014/11/02(日) 21:30:19.20ID:o1wy83SR
カーネルおじさん
0325デフォルトの名無しさん2014/11/02(日) 21:32:53.94ID:9ZcuQJuu
>>324
が、どうしたんだい?
0326デフォルトの名無しさん2014/11/02(日) 21:36:27.68ID:PKN5AcrL
>>322
出力されなかったよ
VC++2010 EE コンソール
0327デフォルトの名無しさん2014/11/02(日) 21:36:41.36ID:o1wy83SR
道頓堀に投げ出された
0328デフォルトの名無しさん2014/11/02(日) 21:45:33.99ID:o1wy83SR
ワンワン
0329デフォルトの名無しさん2014/11/02(日) 21:48:28.80ID:o1wy83SR
にゃんにゃん
0330デフォルトの名無しさん2014/11/02(日) 21:51:40.16ID:TOrV8LyY
>>316
釣りじゃないなら、どうやって使うかを書けよ
0331 ◆iXuZYxKV0gTb 2014/11/02(日) 21:56:00.20ID:8weHS+cp
普通にstrlen、wcslenしろ
引数が文字定数ならコンパイル時に計算されて定数処理される
0332デフォルトの名無しさん2014/11/02(日) 21:58:29.29ID:o1wy83SR
(1)拡張子を.cから.cppに変える。
(2)#include <string>
(3)std::string型変数を宣言する。連結したい場合は+=や+を使う。
長さを知りたい場合は.size()を使う。
(4)関数で書き込む場合は引数にstd::string&を使い、関数で読み込む場合はconst std::string&を使う。
0333デフォルトの名無しさん2014/11/02(日) 22:07:48.16ID:o1wy83SR
(5)リファレンスを嫁
0334デフォルトの名無しさん2014/11/02(日) 22:10:12.70ID:TOrV8LyY
>>332
組み込みで C++ サポートしてないケースは想像できないと?
0335デフォルトの名無しさん2014/11/02(日) 22:15:11.47ID:EyycLmZD
むしろ組み込みでCやってる人が
文字列の結合程度が本気でわからないはずがない
0336デフォルトの名無しさん2014/11/02(日) 22:21:44.91ID: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]'型に直したいのですが、
どう改変すればいいでしょうか。

初心者なので専門用語等はあまりわかりませんが、教えてくださると幸いです。
0337デフォルトの名無しさん2014/11/02(日) 22:22:02.51ID:TOrV8LyY
>>335
わかってるから、>>316 がアホみたいって言ってるだけだが
0338デフォルトの名無しさん2014/11/02(日) 22:39:33.87ID:IyW8WEC0
>>336
「'person *'型となっているところ」がどこのことを言ってるのかよくわからんけど、
そもそも配列 new なんか使わずに std::vector<person> a(MAX); じゃダメなのか?
0339デフォルトの名無しさん2014/11/02(日) 22:42:34.26ID:FncLEk0A
ポインタと配列の関係が理解出来てないみたいだね
そこを調べて勉強してみよう
0340デフォルトの名無しさん2014/11/02(日) 23:24:00.04ID:5r/tMWaD
>>338
vectorは使うな、とのことでした……

>>339
ggってみますね。ありがとうございます。
0341デフォルトの名無しさん2014/11/02(日) 23:58:55.53ID:IyW8WEC0
>>340
習作か。じゃ、まあ、がんばれ。
0342デフォルトの名無しさん2014/11/03(月) 00:26:13.36ID:fxU30L/y
宣言のところをperson *a[MAX]じゃなくperson *aだけにして

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

じゃちがうのかな
0343デフォルトの名無しさん2014/11/03(月) 00:43:10.68ID:Yc5J/idl
まあそうだけど、C/C++使うなら配列とポインタの関係は知るべきだから調べなさい、と
わからなくなったらまた聞きに来ればよい
0344デフォルトの名無しさん2014/11/03(月) 00:50:17.68ID:qBxjH7bs
>>316
学生あたりが秋月の小規模マイコン(PICとか)とかを趣味・学校の実習で使うとかだとCでってなるだろ。
Win・Linuxの初心者定番プログラムの秋月キャラLCDに文字表示をPICでやろうってしているんじゃないか
0345デフォルトの名無しさん2014/11/03(月) 00:50:41.64ID:fxU30L/y
person *a, *tmp;
a=(person *)malloc(MAX*sizeof(person));

やっぱりmallocの方が本質は理解できると思う
0346デフォルトの名無しさん2014/11/03(月) 01:00:42.49ID:wj4A8VFW
vectorはダメなのにstringはいいのか
じゃあ代わりにdequeでもlistでもいいんじゃないの
0347デフォルトの名無しさん2014/11/03(月) 01:05:17.67ID:GHCh+c9h
>>345
その代わりC++は一ミリも理解してないって自分で証明しちゃってるしね
0348デフォルトの名無しさん2014/11/03(月) 01:07:26.10ID:I0t195PW
>>345
mallocじゃコンストラクタが呼ばれないから
危ないだろう
0349デフォルトの名無しさん2014/11/03(月) 01:14:59.31ID:GHCh+c9h
C++学ぶのに配列newとか不要だよな
0350デフォルトの名無しさん2014/11/03(月) 01:15:51.50ID:gzxZLKcA
俺はmallocーfreeが好きや。
メモリをガバッと確保してる感じが
伝わって来るのが快感。
0351デフォルトの名無しさん2014/11/03(月) 01:38:22.42ID:1QJRaIFf
C++使えるならSTL使った方が楽だよ
その環境でパフォーマンスが問題になるようなことなさそうだし
スマートポインタとコンテナでロジック以外の思考を外せるし
ただ、基礎学習ならきちっとCやってメモリ管理するのがええよ
後で他の言語やるときの品質が段違いになる
まあPCアプリもやる組み込みプログラマの一意見だけども、基礎がちゃんとしてないやつは品質もクソだよ
0352デフォルトの名無しさん2014/11/03(月) 02:14:02.65ID:C1Q+kNpr
今時STLとかどんな糞環境だよ
20世紀からタイムスリップでもしてきたか?
0353デフォルトの名無しさん2014/11/03(月) 02:26:04.38ID:GHCh+c9h
また沸いた。標準ライブラリに含まれてるのはSTLじゃねえよ厨
0354デフォルトの名無しさん2014/11/03(月) 02:38:09.75ID:wj4A8VFW
以下STLがあーだーこーだ言うレスが10は付きます
0355デフォルトの名無しさん2014/11/03(月) 02:42:16.69ID:f1DnjkKs
>>345
最近の数学では
× MAX * sizeof(person)
○ sizeof(person) * MAX
らしいな
0356デフォルトの名無しさん2014/11/03(月) 05:19:13.40ID:VWaLlR99
>>351
同意します
0357デフォルトの名無しさん2014/11/03(月) 05:38:31.91ID:gykicciK
>>353
誤りを指摘されても事実を受け入れられない人は
プログラミングに向いていない
0358デフォルトの名無しさん2014/11/03(月) 05:43:09.00ID:GHCh+c9h
>>357
http://en.m.wikipedia.org/wiki/Standard_Template_Library
0359デフォルトの名無しさん2014/11/03(月) 05:44:08.77ID:GHCh+c9h
>>357
こっちでやってくれ
0360デフォルトの名無しさん2014/11/03(月) 05:48:04.61ID:VWaLlR99
>>357
同意します
0361デフォルトの名無しさん2014/11/03(月) 05:54:09.09ID:MMft+ZKk
>>350
つ sbrk
0362デフォルトの名無しさん2014/11/03(月) 05:59:44.27ID:UGbZfCjU
>>357
世の中訂正しなければならない誤りだらけで大変ですね!
頑張って下さい!
0363デフォルトの名無しさん2014/11/03(月) 06:01:10.58ID:wfj2dgwM
>>358
嘘ソースの代名詞のWikipediaですら「STLは標準C++ライブラリに影響を与えた」と
まともなこと書いてるなw
こっちでやってくれといいつつ自滅ソースのレスを投下するマッチポンプ乙
0364デフォルトの名無しさん2014/11/03(月) 06:06:29.94ID:GHCh+c9h
>>363
実装の欄に書いてあるの見れないの?
0365デフォルトの名無しさん2014/11/03(月) 06:16:12.28ID:GHCh+c9h
>>363
そもそもWikipediaをソースとして出したんじゃねえよ。
そんなにそれが大事な事なら正しいソースを出典に明記して修正しろっていってんだよ。
0366デフォルトの名無しさん2014/11/03(月) 07:53:51.00ID:QwIS5woN
strstream とか sstream とかいつも
STLと標準C++テンプレートライブラリのどっちがどっちだっけになる
0367デフォルトの名無しさん2014/11/03(月) 07:59:27.90ID:i5YIlJSL
元凶はiostreamだな
混ぜるな危険
0368デフォルトの名無しさん2014/11/03(月) 08:57:12.20ID:gonBAC+u
Cでって言ってるのにC++使えは答えじゃない
0369デフォルトの名無しさん2014/11/03(月) 09:08:00.19ID:i5YIlJSL
インターフェースだけCにして内部はC++でも良いんじゃね
0370デフォルトの名無しさん2014/11/03(月) 10:23:04.08ID:Fo7mazF8
とりあえず貼っとくか。
〜姉妹スレより〜
・STLは標準化前の遺物派
 (ステパノフのアレ、もしくはSGIのアレ)
・コンテナ、イテレーター、アルゴ、ファンクタ
 のみSTL派(string含まず)
・stringもSTL派(iostream含まず)
・テンプレートは全てSTL派
・C++の標準ライブラリは全てSTL派
・なんとなくライブラリは全てSTL派

「化石のSTLは標準ライブラリのコンテナの基礎となった」
が正しい。
標準ライブラリには「ここはSTL」という説明はなく
また化石STLと標準ライブラリの類似部分とは完全に一致でもない
0371デフォルトの名無しさん2014/11/03(月) 10:42:57.49ID:KYPXUM4w
ここはCとC++が共存すれのはずだが
C++使いが我が物顔でC++の文法やライブラリを
これ見よがしに貼り付けるKUSOSURE
0372デフォルトの名無しさん2014/11/03(月) 10:50:30.70ID:Avy9gAi6
2ちゃんに何を求めるかは人それぞれ
0373デフォルトの名無しさん2014/11/03(月) 10:54:39.21ID:A+2eW2k6
複数の関数で使う再帰呼び出し回数監視クラス、みたいなのを作りたいんですが
template<class T>class Counter
{
static int _count;
public :
Counter(){_count++;}
~Counter(){_count--;}
int getCount()const{return _count;}
};
複数の関数で呼び出した場合_countを共有しないようにtemplateを使って何とか出来ないかと考えてますが
なにかよい方法ありませんかね?
0374デフォルトの名無しさん2014/11/03(月) 10:55:27.70ID:GHCh+c9h
C言語だけのスレあったはずだから、C言語を求めるならそっちに行けばいいんじゃね?
0375デフォルトの名無しさん2014/11/03(月) 11:07:26.39ID:LFWM4IX/
環境依存な話で、Cを外す理由がわからない
0376デフォルトの名無しさん2014/11/03(月) 11:14:19.86ID:wj4A8VFW
>>373
普通はそんなことせず回数を引数として渡す
0377デフォルトの名無しさん2014/11/03(月) 11:18:05.98ID: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();
}
0378デフォルトの名無しさん2014/11/03(月) 11:28:20.75ID:A+2eW2k6
>>376
そう言われればそうですね

>>377
thread_localを初めて知りました
ありがとうございます
0379デフォルトの名無しさん2014/11/04(火) 15:04:55.11ID:0eOV+naS
#include <string>
#include <iostream>
struct A {
std::string m;
};
int main(void) {
A a,b;
a = b;
std::cout << (void*)&a.m[0] << std::endl;
std::cout << (void*)&b.m[0] << std::endl;
}
0380デフォルトの名無しさん2014/11/04(火) 16:12:07.44ID:0eOV+naS
std::stringってtrivialだよな?
0381デフォルトの名無しさん2014/11/04(火) 16:38:03.85ID:P4mL6ldI
std::stringの内部構造は
C言語のNUL終端文字列とは互換性無いぞ
a.c_str()で変換して取得しなきゃダメ
0382デフォルトの名無しさん2014/11/04(火) 16:38:41.26ID:P4mL6ldI
・・・ごめん完全に見当違いのレスだ
見なかったことにしてほしい
0383デフォルトの名無しさん2014/11/04(火) 16:38:48.97ID:Oczj+lH9
>>380
trivial classでもtrivial copyable classでも無いと思うけど何のことを言ってる?
0384デフォルトの名無しさん2014/11/04(火) 16:44:06.72ID:0eOV+naS
間違えた。std::stringだけを含む構造体のデフォルトコンストラクタは、
trivial copy constructorだよね?
0385デフォルトの名無しさん2014/11/04(火) 16:47:31.68ID:0eOV+naS
あげ
0386デフォルトの名無しさん2014/11/04(火) 16:59:53.01ID:0eOV+naS
std::stringには仮想関数がないよね? だからstd::stringだけを含む構造体の
デフォルトコンストラクタは、trivial copy constructorだよね?
0387デフォルトの名無しさん2014/11/04(火) 17:08:12.36ID:Oczj+lH9
>>386
trivialでないコピーコンストラクタを持つstd::stringを持ってるからtrivially copyable classじゃない
0388デフォルトの名無しさん2014/11/04(火) 17:11:43.78ID:0eOV+naS
それは分かってる。std::stringだけを含む構造体の
デフォルトコピーコンストラクタは、trivial copy constructorだよね?
0389デフォルトの名無しさん2014/11/04(火) 17:14:27.19ID:Oczj+lH9
>>388
解ってないじゃん。違うって言ってる。
0390デフォルトの名無しさん2014/11/04(火) 17:23:15.66ID:Oczj+lH9
>>388
非trivialなコピーコンストラクタを持つstd::stringをメンバーに持っていて、それを持つクラスでコピーコンストラクタを定義しなくても(=defaultでも)std::stringのコピーコンストラクタが自動的に使われるので非trivialなコピーコンストラクタになる。

ここまで言えば良いかね
0391デフォルトの名無しさん2014/11/04(火) 17:29:35.70ID:0eOV+naS
承知しました。

次に、関数テンプレートのパラメーターパックで、オブジェクトの参照を渡す上手い方法はありますか?
0392デフォルトの名無しさん2014/11/04(火) 17:38:41.85ID:0eOV+naS
ポインタ以外でお願いします。
0393デフォルトの名無しさん2014/11/04(火) 17:42:01.12ID:Oczj+lH9
std::ref
0394デフォルトの名無しさん2014/11/04(火) 18:02:51.07ID:0eOV+naS
>>393
上手く行った。ありがとう。
0395デフォルトの名無しさん2014/11/04(火) 21:19:20.68ID:0eOV+naS
関数テンプレートの引数パックに非参照のオブジェクトを渡した場合、
それが原因で状態が異常になることはありますか?
0396デフォルトの名無しさん2014/11/04(火) 22:39:11.74ID:0tSXKDtf
お前のコード次第
0397デフォルトの名無しさん2014/11/05(水) 20:14:45.79ID:s8dHjiG+
初心者の初歩的な質問なのですが
srand関数は呼び出すのは1回でいいそうですが
みなさんどこで呼び出してますか?
グローバルでもいいのですかね
03983972014/11/05(水) 20:23:46.40ID:s8dHjiG+
すいません
そもそもグローバルでは宣言できませんでしたね
0399デフォルトの名無しさん2014/11/05(水) 20:39:28.14ID:CNahLZw/
普通は、main()でtime()の戻り値でも突っ込むんじゃね?
GUIの場合はウインドウと連動させた方がいいかも知れないけれど。
0400デフォルトの名無しさん2014/11/05(水) 20:56:06.84ID:+x9XCqU/
>>397
main() の頭で‥
0401デフォルトの名無しさん2014/11/05(水) 21:16:30.03ID:pitXglVp
やってる事は種による初期化なので、使う前ならどこでも
0402デフォルトの名無しさん2014/11/05(水) 21:23:54.35ID:s8dHjiG+
>>399-401
ありがとうございます
プロジェクトの初期化で宣言することにしました
0403デフォルトの名無しさん2014/11/05(水) 21:27:37.80ID:TObpxnP7
厳密には宣言ではない
0404デフォルトの名無しさん2014/11/05(水) 21:53:43.19ID:85jo8McV
main()の前のセットアップでやっといてくれたらよかったのに
0405デフォルトの名無しさん2014/11/05(水) 22:01:40.90ID:+x9XCqU/
>>404
シードを特定の固定値にしたいときもある
0406デフォルトの名無しさん2014/11/05(水) 22:02:53.38ID:5XZeyzta
自分がsrand(time(NULL))したいんだから
自分でmain開始後にするのが筋
0407デフォルトの名無しさん2014/11/05(水) 22:03:45.62ID:TObpxnP7
マルチスレッドの場合はスレッドごとにsrand
0408デフォルトの名無しさん2014/11/05(水) 22:06:32.96ID:+x9XCqU/
>>407
おいおい、rand() は static な内部状態を持っているのに、それでいいのか?
0409デフォルトの名無しさん2014/11/05(水) 22:41:24.43ID:0veuy/kl
微妙だな。
Visual C++は>>407の動作するみたいだけれど
ISO/IEC 9899:2011の7.22.2.2はそれを許していない気がする。
(Visual C++はC90基準なので仕方ないのだが)
clangとgccは>>408の動作だ
0410デフォルトの名無しさん2014/11/05(水) 22:47:53.61ID:snz2pLUR
>>404
そもそも、srand なんて使わないことの方が多いし
0411デフォルトの名無しさん2014/11/05(水) 23:35:34.90ID:pitXglVp
マルチスレッドならC++になっちゃうが、std::mt19937のインスタンス用意しとけばおk
0412デフォルトの名無しさん2014/11/06(木) 00:19:09.59ID:0hZ2pQ2e
次のC++の規格だとrand/srandは非推奨になるらしい
0413デフォルトの名無しさん2014/11/06(木) 01:25:47.59ID:k48fUyn/
非推奨以前に
スレッド機能が規格で規定された時点で
localtimeやrandのような内部状態を必要とする関数が
スレッドローカルになってないのは規格のミスじゃないの
0414デフォルトの名無しさん2014/11/06(木) 02:02:20.13ID:0PDhwcQO
つまり、機能追加の時に枯れたライブラリの破壊的変更をしろ、と?
0415デフォルトの名無しさん2014/11/06(木) 04:06:50.93ID:ETjlkHcn
呼び出し側でロック?かければいいじゃん
違うのけ?
0416デフォルトの名無しさん2014/11/06(木) 05:34:39.10ID:ZDjPTs8v
_s付き
0417デフォルトの名無しさん2014/11/06(木) 06:10:32.85ID:Ajiece/+
>>415
違うだろこのぽんこつめ
0418デフォルトの名無しさん2014/11/06(木) 21:56:01.17ID:PInZmfNX
c言語の負荷についての質問です。
以下のコードの場合

void hoge(){
int a;
a = 5;
printf("%d",a);
}

void main(){
while(true){
int a;
a = 5;
printf("%d",a);
hoge();
}
}

main内部の宣言aが何度も行われているのでメモリなどに良くなく、hoge内部の宣言aは宣言されては消えているので何ら問題はない
でいいのでしょうか?
またこのc言語の規格は秋付のH8マイコンに準じます(詳しい規格がわかりません)
0419デフォルトの名無しさん2014/11/06(木) 22:04:29.24ID:34F8J4w8
メモリ確保コスト的にはどっちも処理通る度にスタックに確保されて破棄されてるので同じ
0420デフォルトの名無しさん2014/11/06(木) 22:25:24.71ID:q6gazN8o
メモリリーク的にも問題なし
0421デフォルトの名無しさん2014/11/06(木) 22:59:37.18ID:PInZmfNX
>>419
>>420
回答ありがとうございます。
サンプルが
while(true){
int a;
for(;;){

}
}

となっていたのでループ内部の宣言はアウトなのかと思っていました。
0422デフォルトの名無しさん2014/11/06(木) 23:05:27.70ID:PsvQS0pQ
>>421
やったらわかるけど速度の問題
0423デフォルトの名無しさん2014/11/06(木) 23:15:03.21ID:9/FtxTPG
よほどしょっぱいコンパイラでなきゃ最適化で
> printf("%d", 5);
ってなると思うが...
0424デフォルトの名無しさん2014/11/06(木) 23:15:52.96ID:WrjLC9Py
最適化の結果、(ほぼ)同じコードになる可能性
0425デフォルトの名無しさん2014/11/06(木) 23:24:05.39ID:n2KANyZy
マイコンなめすぎ

static int a;
void main(){
while(true){
a = 5;
printf("%d",a);
hoge();
}
}

変数はすべてstaticが基本だろ?
0426デフォルトの名無しさん2014/11/06(木) 23:34:15.28ID:vSFIErAp
>>425
?つけるってマイコン使ったことないのか
仕事でC/C++野郎はマイコン命の奴だらけ
0427デフォルトの名無しさん2014/11/07(金) 00:29:01.09ID:mpkOYS3Z
そんなの気にするならアセンブリ見るか書け
0428デフォルトの名無しさん2014/11/07(金) 01:40:55.49ID:Otut3ooB
>>421
質問のポイントがはっきりしないけど、コードの品質が気になるならアセンブリ出力を見る習慣をつけよう。
0429デフォルトの名無しさん2014/11/07(金) 02:18:03.95ID:B36GWc3k
C99に構造体のflexible array memberがあるけど
これって構造体の最後のメンバ限定だよね?

最近、
struct {
  int x;
  int A[0];
  int y;
};
って構造体定義を見かけたんだけど、
これのAってメンバの意図を教えてください
0430デフォルトの名無しさん2014/11/07(金) 02:30:01.20ID:B36GWc3k
>>425
関数の内部変数をすべてファイルスコープにするの?
スタックの伸縮を気にするのなら
インライン関数使えば良いんじゃない?
0431デフォルトの名無しさん2014/11/07(金) 05:02:56.69ID:eTetUKDB
お前釣られてんだよ。
>>425は荒らし目的のキチガイhoge厨なんだから構うな。
0432デフォルトの名無しさん2014/11/07(金) 06:57:37.54ID:mpkOYS3Z
畳み掛けるように釣る
0433デフォルトの名無しさん2014/11/07(金) 07:29:54.93ID:ZCBWHjJw
釣ったと思ったら盛り上がりすぎておいてかれた感
0434デフォルトの名無しさん2014/11/07(金) 08:28:12.21ID:HXLLL8gC
>>429
gccだとAとyが同じアドレスになった
A以降の要素に対して、Aを媒介にして配列アクセスするためとか?
0435デフォルトの名無しさん2014/11/07(金) 09:06:38.55ID:kh0pD0TM
union使った方が良い
初心者には薦めない
0436デフォルトの名無しさん2014/11/07(金) 09:26:52.83ID:jQyGeXqU
>>429
Aがどのように使われているか調べろ。

でも、ファイル末の /* end */と同様に、これはうんこが書きましたという署名と考えた方が良い。
0437デフォルトの名無しさん2014/11/07(金) 10:43:48.33ID:CS+XpD/P
最早bad knowhowだよな。
offsetof使った方が未だましだ。
0438デフォルトの名無しさん2014/11/07(金) 11:29:26.34ID:jQyGeXqU
アドレスかアライメントをhogeりたかったのかな
どっちにしろうんこ
0439デフォルトの名無しさん2014/11/07(金) 11:50:09.99ID:HXLLL8gC
まあ結局は
>Aがどのように使われているか調べろ。
が確実だわね
もしどこからも使用されてなかったとしたら紛らわしいという意味でunk度が上がるけども
0440デフォルトの名無しさん2014/11/07(金) 20:12:12.37ID:rVf6x+4g
名前 年齢 性別が書かれたtxtファイルを呼び出して、
年齢順に並び替えた後に別のtxtファイルにコピーすることって可能ですか?

string使って一行一行を丸々コピーするのは可能だと思いますが、
その一行の中にある年齢の部分だけを評価することは可能ですかね?
0441デフォルトの名無しさん2014/11/07(金) 20:16:30.34ID:jQyGeXqU
可能だよ。
0442デフォルトの名無しさん2014/11/07(金) 20:22:48.79ID:NTsdDBOz
>>440
stringなのでC++が使えると理解したが

struct kuso {
string 名前; int 年齢; enum 性別 性別;
};
std::vector<kuso> data;
 :
std::sort(data.begin(), data.end(),
[](kuso &lhs, kuso &rhs){ return lhs.年齢 < rhs.年齢; });
0443片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/07(金) 20:23:09.34ID:GF0g7nAP
>>440
qsort
std::sort
0444デフォルトの名無しさん2014/11/07(金) 20:31:01.00ID:ucXGRKwS
qsortは糞ートと呼ばれてる。
0445デフォルトの名無しさん2014/11/07(金) 20:33:08.06ID:TpVib0zY
別に糞ではないがc++でqsort使う理由がない。
それにstringをqsortしたらまずいんじゃね
0446デフォルトの名無しさん2014/11/07(金) 20:41:06.81ID:ucXGRKwS
std::setに突っ込むのとどっちが速いかやってみて。
0447デフォルトの名無しさん2014/11/07(金) 20:43:47.40ID:f/Sul/kM
C言語独学しててポインタ完全制覇読んでるけど
後半難しくなりすぎて辛い
ポインタのポインタとかじっくり見ていかないと理解できないけど
慣れていけばソースぱっと見てわかるようになるものなのかな?
0448 ◆QZaw55cn4c 2014/11/07(金) 20:49:30.72ID:x65iNG5P
>>436
い,extern はいらない子ぉ
0449 ◆QZaw55cn4c 2014/11/07(金) 20:52:37.98ID:x65iNG5P
>>447
何事も慣れ,ポインタのポインタだが,たいがいその「一重ポインタ」が独立した概念になっていることが多い,そのポインタをとる,ということで割合簡単に納得できる.
慣れると char ***p, とかも使いたくなるときがある.
0450片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/07(金) 20:55:47.89ID:GF0g7nAP
>>447
配列のような連続データにアクセスするイメージ。
実データを長方形で、アドレスの指している場所を矢印で考えるとわかりやすいかな。
0451デフォルトの名無しさん2014/11/07(金) 21:11:21.25ID:ucXGRKwS
>>449
ならないんじゃない?
いつ使いたくなるの?
0452デフォルトの名無しさん2014/11/07(金) 21:19:34.39ID:DvlzUAf6
指定された要素数の二次元配列を確保して戻って来る時かなな
0453デフォルトの名無しさん2014/11/07(金) 21:19:51.03ID:SLgxRVRb
古い事言うなよ
0454デフォルトの名無しさん2014/11/07(金) 21:20:53.10ID:rVf6x+4g
>>440です。
皆さんありがとうございます。
教えていただいた中にもわからないことがたくさんありますが、一回自分で調べてみたいと思います。
わからない箇所が出てきたらまたきます。
0455デフォルトの名無しさん2014/11/07(金) 21:24:29.92ID:hmddJt9e
曲線、曲面近似とかの多次元行列計算でよく出てくる
0456デフォルトの名無しさん2014/11/07(金) 21:25:04.91ID:+QwkR1Kf
慣れもあるけど、ちゃんと仕組み理解してアドレス追えるようになっといた方がよい、
じゃないとデバッグの時に死ねる
0457デフォルトの名無しさん2014/11/07(金) 21:28:24.66ID:ucXGRKwS
指定された要素数の二次元配列と言っても、それってただの配列だよね?
何でポインタのポインタのポインタが使いたくなるの?
0458デフォルトの名無しさん2014/11/07(金) 21:41:31.71ID:qAAA5o7I
中身を書いてみれば判るさ
0459デフォルトの名無しさん2014/11/07(金) 21:47:27.74ID:ucXGRKwS
int* hoge(int x, int y)
{
  return new int[x * y];
}

わからんかった。
0460デフォルトの名無しさん2014/11/07(金) 21:51:53.96ID:DvlzUAf6
誰も一次元で返せとは言ってない
0461デフォルトの名無しさん2014/11/07(金) 21:52:27.42ID:sPY5lqdl
よくあるやつ
これがわかればおっけーかなと

void func(FILE **fp){
*fp=fopen("r","hoge.txt");
}
int main(void){
FILE *fp
func(&fp);
if(fp)
fclose(fp);
return 0;
}

コンパイル通してませんさせん
0462デフォルトの名無しさん2014/11/07(金) 21:53:30.68ID:ucXGRKwS
>>460
言ってることが良くわからないので、書いてみてくれる?
0463デフォルトの名無しさん2014/11/07(金) 22:01:27.87ID:toea6tGi
ポインター配列になりそうなのを戻りではなく引数の書き換えで か

1行の文字列(長さはまちまち) を 配列で記憶したい
テキストエディタとかだと こういう欲求はありそう
0464デフォルトの名無しさん2014/11/07(金) 22:04:21.07ID:ucXGRKwS
>>463
それ、ポインタのポインタでよくない?
0465デフォルトの名無しさん2014/11/07(金) 22:06:36.52ID:ucXGRKwS
二次元配列をポインタのポインタのポインタで返すというテクニックがわからん。
0466デフォルトの名無しさん2014/11/07(金) 22:10:50.19ID:toea6tGi
>>464
まぁね 取り扱いたい世界はポインタのポインタ -(A)

ただ、関数戻り値には他の状態値(おおよそ int) を当てたいので
引数の書き換えで ってなると (A)のポインタで受けるのかなー と
(C++なら参照渡しで済む話)
0467デフォルトの名無しさん2014/11/07(金) 22:15:38.53ID:ucXGRKwS
>>466
ポインタのポインタを書き換えるには、ポインタのポインタで良いでしょ。
なんで?
ねえなんで?
0468デフォルトの名無しさん2014/11/07(金) 22:16:57.60ID:ucXGRKwS
もしかして、*******pとかも必要だと思ってるってこと?
どうして?
なんでそうなったの?
0469デフォルトの名無しさん2014/11/07(金) 22:19:44.52ID:toea6tGi
int foo(char ***p)
{
 *p = new ichar*[ 適当 ];
 for ( i 回して)
  (*p)[i] = new 文字列
 return 行数
}

呼び出し側で
char **p = 0;
foo(&p);

こんなイメージ。 あくまで俺主観のこじつけだよ。
0470デフォルトの名無しさん2014/11/07(金) 22:25:01.41ID:ucXGRKwS
>>469
こじつけ以外の何物でもないよね。
必要ないものを必要と言い張って初学者を混乱させるのはもうやめにしない?
0471デフォルトの名無しさん2014/11/07(金) 22:29:57.22ID:toea6tGi
必要性に関してはなんともいえんな…
過去にかいたことあるコードだし… (スマートでないことは認める)

>>449,452,455 あたりが実例出してくれるのを期待してるんだが
0472デフォルトの名無しさん2014/11/07(金) 22:33:03.84ID:SLgxRVRb
>>470
>>469の[ 適当 ]が不定な場合とかあかんの?
0473デフォルトの名無しさん2014/11/07(金) 22:37:05.24ID:DvlzUAf6
フィルター処理とかで使っているよ
0474デフォルトの名無しさん2014/11/07(金) 22:37:57.78ID:ucXGRKwS
あかん。
あかんのやでえ。
0475デフォルトの名無しさん2014/11/07(金) 22:53:45.83ID:mpkOYS3Z
C言語のイディオムに毒されるとポインタが分からなくなるってのがよく分かるスレだ
0476デフォルトの名無しさん2014/11/07(金) 23:01:22.02ID:g+Nte/6C
ポインタのポインタは使いたいときはあるよ
char p[] = "abcde";
char a = GetChar(&p);
char b = GetChar(&p);
みたいな使い方するときとか
関数内でpを進めるとかなりすっきり読める
にしてもchar*** pとかはやりたくない
コード設計見直した方が楽になれる
0477デフォルトの名無しさん2014/11/07(金) 23:44:12.29ID:1usQ6QQt
void f(std::vector<std::vector<int>>& v)
これでええやん。

Cなら
typedef int_array {
int *data;
size_t size;
}int_array;
typedef struct td_int_array
{
int_array * rows;
size_t size;
} td_int_array ;

void f(td_int_array* a)
0478デフォルトの名無しさん2014/11/08(土) 00:17:11.56ID:VTYvswVR
テンプレートと配列で実行速度が同じならそれで良いんじゃね?
0479デフォルトの名無しさん2014/11/08(土) 00:26:19.90ID:1RxyvQ81
>>478
具体的にどんなふうに実行速度落ちるのか教えて
0480デフォルトの名無しさん2014/11/08(土) 00:36:09.08ID:SdfgCKME
>>447
全く心配ない。
ポインタのポインタのポインタでもすぐ慣れる。
0481デフォルトの名無しさん2014/11/08(土) 00:40:04.20ID:9PbWBn7f
>>480
ネタをネタと解らない初心者にそういうのやめろよ…
0482デフォルトの名無しさん2014/11/08(土) 00:41:17.91ID:SdfgCKME
3次元の電磁場のシミュレーションソフト書いた時に****p はよく使ったわ。
3次元だから***でそこに入れるデータの為に*で4つ。
0483デフォルトの名無しさん2014/11/08(土) 00:44:04.66ID:SdfgCKME
>>481
ポインタのポインタのポインタは何?
って聞かれたら、
それは
ポインタのポインタの、
ポインタでいいだろ。
0484デフォルトの名無しさん2014/11/08(土) 00:46:33.07ID:9PbWBn7f
>>482
ネタじゃなかったんか…
それこそ要素毎にサイズ変わるわけじゃないんだから一次元で確保すりゃ良い話
0485デフォルトの名無しさん2014/11/08(土) 00:50:12.20ID:SdfgCKME
>>484
mpiで並列化する時にメモリが1次元で確保されてるより***の方がやり易かったわ。
0486デフォルトの名無しさん2014/11/08(土) 01:04:11.19ID:UHdmp0aU
ポインタのポインタのポインタで二次元配列と聞いてやってきました。
詳しい説明をお願いします。
0487デフォルトの名無しさん2014/11/08(土) 03:41:00.25ID:D1mfqEl0
もうググってソース見つけてメイクした方が速いw
見てわからんなら説明してもどうかと
0488 ◆QZaw55cn4c 2014/11/08(土) 03:59:48.33ID:3fSv7BFT
>>451 >>470
http://peace.2ch.net/test/read.cgi/tech/1313183984/783
execv*() に渡す argv を下請け関数で malloc() するときに char *** が欲しくなりました。
0489デフォルトの名無しさん2014/11/08(土) 06:19:29.67ID:VTYvswVR
>>479
お母さんにキイテミロ
0490デフォルトの名無しさん2014/11/08(土) 06:25:31.27ID:9PbWBn7f
結論はC++なら全く使う必要ない。
Cなら使う場合もあるけどかなり限定的
0491デフォルトの名無しさん2014/11/08(土) 06:31:04.96ID:9PbWBn7f
でもCでもサイズも一緒に渡さなきゃならないから構造体に一緒に入れた方がいいよね
0492デフォルトの名無しさん2014/11/08(土) 10:06:33.29ID:gsFR/4t/
質問させてください。
申し訳ないのですが2つに続きます。

class A
{
pivate:
typedef struct tagParameter{
int* src_v;
} PARAM;

std::list<PARAM> param_list;

public:
void push(int num){
int a* = new int[num];
for( int i = 0; i < num; i++){
a[i] = i;
}
PARAM test_param{ a };
param_list.push_front(test_param);
}

void delete(){
std::list<PARAM>::iterator itr_param_list = param_list.begin();
while( itr_param_list != render_param.end() ){
delete []itr_param_list->src_v;
itr_param_list = render_param.erase(itr_param_list);
}
}
}
04934922014/11/08(土) 10:07:08.87ID:gsFR/4t/
main()
{
A cTest;
cTest.push(1);
cTest.push(2);
cTest.push(3);

cTest.delete();
}

この場合、 int a* = new int[5];の確保分はメモリリークを起こしますか?
デバッグしてみると起こしてるよと言われたんですがなぜだか分かりません。
最近学び始めたので至らぬ点が多いと思いますがよろしくお願いします。
0494デフォルトの名無しさん2014/11/08(土) 10:14:29.89ID:bKZpxDk5
itr_param_list = render_param.erase(itr_param_list);
これがrender_paramから左辺のitr_param_listを消した結果、末尾のイテレータを返してるんだけど、
なんで
itr_param_list++;
にしない?
0495デフォルトの名無しさん2014/11/08(土) 10:16:34.53ID:bKZpxDk5
なんか日本語が変だな
とにかくerase関数の仕様を確認してみ
0496デフォルトの名無しさん2014/11/08(土) 10:21:42.98ID:gsFR/4t/
eraseの戻り値は削除要素の次のイテレータではないのでしょうか?
これで末尾まで回せると思ってたのですが...
0497デフォルトの名無しさん2014/11/08(土) 10:24:04.85ID:gsFR/4t/
>>492
すいません
訂正です

render_paramは全てparam_listの事です
0498デフォルトの名無しさん2014/11/08(土) 10:33:51.53ID:RkXDkgJE
デストラクタでdelete呼んでないからリークする可能性はあるわな
0499デフォルトの名無しさん2014/11/08(土) 11:08:16.73ID:ORkqH1Br
>>429
少なくともA[0]が確実に存在することを保証するため。
初期値としては例えば"番兵"を入れておく。
0500KUSO KOTE ◆unko./w.Osri 2014/11/08(土) 11:23:44.82ID:wHqCkgVe
>>496
んー、例外が出なければ特に問題ないような
http://ideone.com/xga7LL

eraseの仕様は ISO/IEC 14882:2011の
23.3.5には23.2を満たすこととあって
23.2.3p12では
The iterator returned from a.erase(q) points to the element immediately following q prior to the element
being erased. If no such element exists, a.end() is returned.
0501デフォルトの名無しさん2014/11/08(土) 12:16:15.61ID:cySalImS
>>492,493
そのソースだけで本当にメモリリークを起こしてると言われる?
書き間違えしてることからそのソースそのものを実際にコンパイル・デバッグして確認した結果ではないでしょ
0502デフォルトの名無しさん2014/11/08(土) 12:36:16.04ID:EW+rnnAz
>>429
>Aってメンバの意図を教えてください

「ボクはCの文法も知らないばかです」
と言う意味では
0503デフォルトの名無しさん2014/11/08(土) 13:45:21.52ID:aL4EVk1B
>>492
コンパイラのエラーメッセージはなんと出てる?
あとコンパイラは何を使っている?

俺の予想だと、これはメモリリークを指摘したコンパイラエラーだと勘違いしていると思うんだ
0504デフォルトの名無しさん2014/11/08(土) 13:53:32.19ID:m7dez7IQ
>>503
俺の予想ではお前は超ド級ウルトラ初心者。
コンパイラがエラーメッセージが出してる(とお前は思ってる)のにデバッグできるのか?
0505デフォルトの名無しさん2014/11/08(土) 13:57:13.48ID:3SfgPf5M
>>504
このソース、コンパイルが通ると思う?
0506デフォルトの名無しさん2014/11/08(土) 14:05:59.44ID:UfN+T2xC
質問者:デバッグエラー
↓
質問者:このスレで質問(転記ミス多数)
↓
503:「コンパイルエラーの内容は?
↓
「デバッグと言ってるのにお前アホか
↓
503:ID変えて自演 ★今ココ
0507デフォルトの名無しさん2014/11/08(土) 15:28:46.28ID:gsFR/4t/
>>501
おっしゃる通りで、色々書いてるのですが
全部コピペしてると見づらくなるので端的に書いてみましたが
実際の問題箇所は別のところにありました。
本当に申し訳ないです...

原因はこれを更に上で持ってるクラスがあって
それがdelete関数を呼ぶ前に消えてしまっていたので
deleteされずに残ってるものがありました
実行毎にリーク数がバラバラだったので気づけました

お騒がせし申し訳ありませんでした。
今度から気をつけて質問したいと思います。
0508デフォルトの名無しさん2014/11/08(土) 18:04:07.32ID:RkXDkgJE
やっぱり手動deleteは悪だな
0509デフォルトの名無しさん2014/11/08(土) 19:14:26.09ID:dA5KkhaH
>>507
ちゃんとデストラクタを使おうぜ
0510デフォルトの名無しさん2014/11/08(土) 19:24:20.47ID:gsFR/4t/
現場は生ポ使わずスマポなんですかね?

>>509
そうですね...
無闇矢鱈にポインタってのも反省します。
0511デフォルトの名無しさん2014/11/08(土) 19:30:04.78ID:Y8q8lxOz
古いコードと言っても、それの改修の案件の方が多いから
知っておいて損は無いと思うんだがな
0512デフォルトの名無しさん2014/11/08(土) 19:40:56.45ID:dA5KkhaH
>>510
配列newじゃなくてvectorとかな
0513デフォルトの名無しさん2014/11/08(土) 23:17:13.15ID:J9UQ3B/M
>これを更に上で持ってるクラスがあって
>それがdelete関数を呼ぶ前に消えてしまって

手動deleteも問題だが、これは別の問題があるな
0514デフォルトの名無しさん2014/11/09(日) 00:14:33.31ID:r2VhSYuc
>>429
↓っぽい
ttp://stackoverflow.com/questions/11180378/what-is-the-cause-of-flexible-array-member-not-at-end-of-struct-error

struct {
  size_t sz;
  int A[];
  double D[];
};

は

struct {
  size_t sz;
  struct {
    int A;
    double D;
  } a__[];
};

のように使えるそうな
0515デフォルトの名無しさん2014/11/09(日) 01:09:43.58ID:0+q+L/i7
c++の勉強になる綺麗な設計のソースって何がありますか?
0516デフォルトの名無しさん2014/11/09(日) 07:53:36.47ID:5CcElDxt
Qt
0517デフォルトの名無しさん2014/11/09(日) 08:02:33.54ID:cg8/k+y/
C++ REST SDK
0518デフォルトの名無しさん2014/11/09(日) 08:56:35.02ID:QMG6pfcl
wxWidgets
0519デフォルトの名無しさん2014/11/09(日) 11:16:53.32ID:QMG6pfcl
Boost は綺麗かな
0520デフォルトの名無しさん2014/11/09(日) 15:59:00.14ID:iOEsToOb
C言語でint型の戻り値があるじゃないですか。
あれってどうなってるんですかね?
エスパーさん俺の望む回答をお願いします。
0521デフォルトの名無しさん2014/11/09(日) 16:07:35.61ID:cg8/k+y/
戻り値はeaxレジスタに書き込まれるので
呼び出し元はeaxレジスタを読めばどの数値が帰ってきたのかがわかる
0522デフォルトの名無しさん2014/11/09(日) 16:25:11.99ID:PDZuo1Am
>>520
スレ違い。↓こっちいけ。
http://peace.2ch.net/test/read.cgi/tech/1187922645/
0523デフォルトの名無しさん2014/11/09(日) 17:34:10.61ID:dgJkdaDV
>>429
↑を見た後↓を見たんだけど
>>438
"アライメントをhogeりたかったのかな"ってあったので別人ですが追加質問。
http://codepad.org/VYNlYCy6
上の例でdがint境界に整列するのは期待していい?
0524デフォルトの名無しさん2014/11/09(日) 17:45:35.10ID:Ncgt9DFn
>>523
そもそも規格としてサイズ0の配列を構造体の末尾以外に置けなかったはずなので
鼻から悪魔が出てくる気がする
0525デフォルトの名無しさん2014/11/09(日) 17:56:57.48ID:dwdWovit
>>524
というか、サイズ1の配列を構造体の末尾において可変長構造体とする手法は、いにしえからの秘伝だったはず
http://www.kouno.jp/home/c_faq/c2.html#6
リッチーには嫌悪されているようだが‥C99では許容されてしまったんだね‥
0526デフォルトの名無しさん2014/11/09(日) 18:00:21.17ID:fAYsHd+7
秘伝でも何でもない
0527デフォルトの名無しさん2014/11/09(日) 18:07:31.82ID:Ncgt9DFn
Cにメモリ境界チェックが無いことを利用した裏ワザみたいなもんよね
で、gccはその裏ワザを使いやすいように、構造体末尾のサイズ0配列を許容した
そしてそれが規格に取り込まれた

Unixのために作られたC言語が
Unixのデファクトスタンダードなコンパイラであるgccに引っ張られてしまうのは
仕方ないことなのだ・・・
0528デフォルトの名無しさん2014/11/09(日) 19:31:33.81ID:GOkz0EBt
>>523
そんなうんこ技つかわないで、無名union使った方が良い
0529デフォルトの名無しさん2014/11/09(日) 19:40:25.34ID:NRcwt21o
>>435
0530デフォルトの名無しさん2014/11/09(日) 19:58:52.74ID:GOkz0EBt
http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarg/flexible.htm
> ILE C/C++ は、標準 C および C++ を拡張して、柔軟な配列に関する制限を緩和し、以下を可能にしています。
> 柔軟な配列メンバーを、構造体の最後のメンバーとしてだけではなく、構造体のどの部分 でも宣言できます。
どうやって使うんだろう?
0531デフォルトの名無しさん2014/11/09(日) 20:41:05.26ID:QNknVBPX
struct kuso {
 int a[0];
 int b0, b1;
} u;

どうせ
 &u.a[0] == &u.b0
 &u.a[1] == &u.b1
なんだろ?(知らないけど)
0532デフォルトの名無しさん2014/11/09(日) 21:02:07.94ID:Ncgt9DFn
>柔軟な配列メンバーに続くすべてのメンバーの型は、柔軟な配列メンバーの型と互換性がある必要があります。
とも書いてあるから、>>531の使い方を想定してる気がする
0533デフォルトの名無しさん2014/11/09(日) 21:51:07.15ID:XPgdycDd
x=x+1と比較してx++を使うメリットって何?
最適化しないでコンパイルしても実行時間変わらなかったし
ソースコードが短くなるとか見やすくなるとか以外でお願い教えて
0534デフォルトの名無しさん2014/11/09(日) 21:56:07.97ID:HT8IGN4n
C++はオペレータが定義できるからそもそも意味が違ってくる
揚げ足取りかな
0535デフォルトの名無しさん2014/11/09(日) 22:06:18.03ID:M361BJ1e
>>534
++は初期Cのころからあるから、初期のCでそうしたメリットは何って聞いているんだろ
0536デフォルトの名無しさん2014/11/09(日) 22:11:39.32ID:wPGgU0yM
>>553
xの内容を1加算する という極めてありがちなコードを書くときに
xを2回もタイプする必要がない。
これはコードが短いのとは別のメリット。
なぜなら人間はたいてい
「xの値に1加算した結果をxに代入」でなく
「変数xの内容を1増やす」という思考をしているから。
0537デフォルトの名無しさん2014/11/09(日) 22:12:07.84ID:fYUcpEhO
>>533
++xじゃない?
x++じゃ機能的に異なる
0538デフォルトの名無しさん2014/11/09(日) 22:22:39.41ID:EnFInTod
CPUのインクリメント命令で高速に実行出来るからじゃない?
0539デフォルトの名無しさん2014/11/09(日) 22:23:43.58ID:fYUcpEhO
>>531
そういう使い方はしないのでは?
今までと同じでストリーム用でしょ
0540デフォルトの名無しさん2014/11/09(日) 22:34:47.28ID:XPgdycDd
>>536
じゃあx+=1と比較したときはどう?

>>537
実行したプログラムにはその一文しかないからどっちでもいいんじゃない

>>538
実行時間に差はなかったよ
0541デフォルトの名無しさん2014/11/09(日) 22:41:14.14ID:canSqdwN
>>540
>実行時間に差はなかったよ

プログラミング言語Cが作られた時代のコンピューターでの話をしているんだろ?
0542デフォルトの名無しさん2014/11/09(日) 22:44:12.45ID:HT8IGN4n
>>540
差はなかったってどの精度で言ってるの?
0543デフォルトの名無しさん2014/11/09(日) 22:47:51.46ID:qMMOH0c1
>>533
*x++ = *y++;
みたいな書き方したかっただけじゃね?
0544デフォルトの名無しさん2014/11/09(日) 22:49:47.93ID:XPgdycDd
一億回繰り返し加算するのをieunixs2のUNIXコマンドラインでtimeコマンド使って測ったんだけど…
0545片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/09(日) 22:53:09.64ID:XU91kGr5
コンパイラーが賢くなってるから、もはやx += 1;とx++;の違いはない。
0546デフォルトの名無しさん2014/11/09(日) 22:54:23.29ID:fYUcpEhO
>>537
文として完結してないじゃん。
式と文の違いが分かってないんじゃないの?
0547デフォルトの名無しさん2014/11/09(日) 22:59:02.40ID:M361BJ1e
>>538
Cを作った時の状況って俺は知らないけど、
アセンブリ言語でINC、DEC命令があり、それらをCで++、--にしたって感じだし。
Cって読みにくい・記述大変なアセンブリ言語はいやぽで作った言語って感じだし。
0548デフォルトの名無しさん2014/11/09(日) 22:59:04.71ID:GOkz0EBt
>>544
それは初心者の方法。アセンブラ出力して、マシンサイクルで比較するんだよ。

最近のコンパイラじゃ最適化オフにしてもx = x + 1はinc一命令になりそうだから
x = x + 1000とでも比較してみろ。
0549デフォルトの名無しさん2014/11/09(日) 23:43:32.04ID:uhcilT9j
func(++x);
ってするためじゃないのか
0550デフォルトの名無しさん2014/11/09(日) 23:59:15.95ID:IVLS3vrM
>>534
両方使える時に意味が違ってくるような実装しちゃいかんだろ
0551デフォルトの名無しさん2014/11/10(月) 00:28:01.45ID:pUAchLvi
>>548
x=x+2 相当の ++
x=x+3 相当の +++
....
x=x+1000 相当の +++++++....

なるものはそもそも存在しないので比較しようがない。
0552デフォルトの名無しさん2014/11/10(月) 00:39:09.02ID:ks3sjnzl
>>553
インクリメントか加算かの違い
ぶっちゃけ、どっちでもいいけど、インクリメントの方が若干早いはず
詳しく知りたければアセンブリについて調べてみるといい
0553デフォルトの名無しさん2014/11/10(月) 03:47:45.66ID:x8aX3rE8
インクリメントが特に早い理由は?内部で ALU を使っていたりすると同じになることもあるのでは?
0554デフォルトの名無しさん2014/11/10(月) 05:58:11.85ID:1rukL+lF
そこまでして差を絞り出さないといけないなら
もう普段は意味ないよね
0555デフォルトの名無しさん2014/11/10(月) 06:02:50.23ID:h8HoDMBS
>>550
揚げ足取りかなって予防線を張ってるのに
その予防線を突破してくるアスペっぷり見事っす
0556デフォルトの名無しさん2014/11/10(月) 07:28:49.35ID:k5u1ANsT
パイプライン通ってるから意味無いっていうのなら判る
0557デフォルトの名無しさん2014/11/10(月) 07:36:23.38ID:Oe+LZ9eI
>>553
add 命令は、オペランドを読まないといけないから
0558デフォルトの名無しさん2014/11/10(月) 07:37:32.98ID:k5u1ANsT
>>533
マジレスすると
下みたいなコードのとき混乱しないため ++ の方が初心者にはお薦め

#include <stdio.h>

int main(int ac, char **av)
{
int a;
char b;
int *pa = &a;
char *pb = &b;
printf("%p, %p\n", pa++, pb++);
printf("%p, %p\n", pa, pb);
pa += 1, pb += 1;
printf("%p, %p\n", pa, pb);
pa += 5, pb += 5;
printf("%p, %p\n", pa, pb);
return 0;
}
0559デフォルトの名無しさん2014/11/10(月) 07:37:40.26ID:Oe+LZ9eI
>>555
そもそも揚げ足とりにすらなってないから、スルーで正解と言うならわかる
0560デフォルトの名無しさん2014/11/10(月) 07:45:27.63ID:k5u1ANsT
>>557
++ がインクリメントでも常に inc REG に変換されるとは限らない
0561デフォルトの名無しさん2014/11/10(月) 07:54:54.03ID:oJxK98s8
Cは元々アセンブラの代用だからね。
40年前の計算機スペックベースで設計されているから、
当時としては高速なインクリメント命令に直接変換される ++ が必要だった
ということ。
0562デフォルトの名無しさん2014/11/10(月) 07:58:26.08ID:k5u1ANsT
+1 と書かれててもコンパイラが必要に応じてインクリメントに変換すりゃいいだけ
0563デフォルトの名無しさん2014/11/10(月) 09:23:43.15ID:FwpJc2RO
よく釣れてますね
0564デフォルトの名無しさん2014/11/10(月) 09:48:57.67ID:FwpJc2RO
http://d.hatena.ne.jp/satosystems/touch/20110306/1299429469
0565デフォルトの名無しさん2014/11/10(月) 11:44:39.18ID:GGFW6CYo
そっちの話じゃない
0566デフォルトの名無しさん2014/11/10(月) 23:15:50.56ID:EMIkNzOB
>>560
で、それがなにか?
0567デフォルトの名無しさん2014/11/11(火) 02:08:43.31ID:EYkakdSC
C++のライブラリを使用しているCインターフェースの関数を、
Cのスタティックリンクライブラリとして吐き出してCプロジェクトにリンクして使いたいんですが、
こういった事って出来ますか?
0568デフォルトの名無しさん2014/11/11(火) 04:15:57.98ID:wmaTj/ui
桶
0569デフォルトの名無しさん2014/11/11(火) 10:20:25.88ID:nxSiprkx
ちょー初心者の俺が質問しようと思ったんだけど
質問をごにょごにょ書いてたら
いつの間にか理解出来ていた
また今度よろぴく
0570デフォルトの名無しさん2014/11/11(火) 10:47:07.11ID:7vWNWhS8
質問をするために整理してるうちに解決することは良くあるある
0571デフォルトの名無しさん2014/11/11(火) 12:50:44.49ID:K9VcwXbN
>>569
その過程を初心者スレか雑談スレ辺りに投下してくれてもいいのよ。
0572デフォルトの名無しさん2014/11/11(火) 19:57:02.10ID:Ck5u9kVe
問題を問題として記述できたのなら解決は早い
わからない、というのはたいがい「なにがわからないかがわからない」のが常だからね‥ObjectOriented がわからない、とかね、困った、困った‥
05735672014/11/11(火) 22:24:25.32ID:JuUrGkDa
いけました
スタティックリンクではなく、ダイナミックリンクですがにしたらいけました
0574デフォルトの名無しさん2014/11/11(火) 22:44:32.19ID:FsUdFhtB
VCでの話なんですが、scprintfなんかでsprintf等の必要文字数取得できるので
取得した文字数分'\0'で埋めたstring作ってそのc_strからconst取り除いてsprintfに渡したら
いい感じにsprintfで出力した文字列をstringに入れられると思いかけたんですが
const_castってそうそう使うもんじゃないなと思ったので
下のようにc_strで取得したポインタからconst取り除くのがどれぐらい問題があるか教えてください。

std::string fmt2str(const char* format, ...){

va_list ap;
va_start(ap, format);

const int len = _vscprintf(format, ap);
std::string out(len, '\0');

_vsnprintf_s(const_cast<char*>(out.c_str()), len + 1, len, format, ap);

return out;
}
0575デフォルトの名無しさん2014/11/11(火) 22:46:53.83ID:fMu5Ad7d
>c_strで取得したポインタからconst取り除くのがどれぐらい問題があるか

そうだな。
夜道で刺されても「被告にも情状酌量の余地があり」
となるレベル。
0576デフォルトの名無しさん2014/11/11(火) 22:49:38.23ID:zKw/3Cvz
_vscprintfってフォーマットが文字列に直った時の長さだよな?だったらいいんじゃない?
0577デフォルトの名無しさん2014/11/11(火) 22:51:35.90ID:K9VcwXbN
>>574
そこまでして危ない橋を渡りたい理由が分からん。
lenは整形済み文字列長になるのかな。
だったらこんなんでいいだろ。
--
char * out = new char[len + 1];
_vsnprintf_s(out, len + 1, len, format, ap);
std::string foo = out;
delete[] out;
return foo;
--
0578デフォルトの名無しさん2014/11/11(火) 22:55:43.40ID:INRwCFLk
>>574
C言語の前に日本語の書き方を勉強するべき。
0579デフォルトの名無しさん2014/11/11(火) 23:47:48.31ID:FsUdFhtB
>>575-578
ありがとうございます。
未定義の動作を起こして鼻から悪魔が出ても文句は言えない系のアレと解釈しました。

危ない橋を渡る前のコードはほぼ>>577さんが提示したのと同じで、>>574で提示したのは使う予定はないです。
一瞬、一時バッファ確保するのを端折れるのではないかと思ったのでせっかくなのでみなさんに質問させてもらいました。
0580デフォルトの名無しさん2014/11/11(火) 23:55:09.19ID:Q0YP3r9c
素直にstd::string out = boost::format("",..);しろ
0581デフォルトの名無しさん2014/11/11(火) 23:59:37.42ID:FsUdFhtB
>>580
boostのformat使うのはより正しい選択だと思いますし
言わんとすることはわかりますがその書き方は正しくないのでは
0582デフォルトの名無しさん2014/11/12(水) 01:29:37.24ID:MpcbuGKw
プログラマあるある

バグがわからんので、同僚に相談してたら
いきなり あー! とか言って自分のデスクに戻って
数分して いやーわかったわかった ども と
同僚を煙に巻く奴

何もしてないのに感謝される同僚 ぽかーん
0583デフォルトの名無しさん2014/11/12(水) 02:29:47.55ID:LgpuQXWR
同僚と話してる流れで思いついたんだからお礼言いたくもなるわ
0584デフォルトの名無しさん2014/11/12(水) 07:29:30.27ID:KVAuCYtX
>>579
out の nullpo チェックも面倒だよな
0585デフォルトの名無しさん2014/11/12(水) 07:58:10.56ID:JtiZc+eB
プログラマあるあるなので同僚のプログラマはぽかーんとはならない
0586デフォルトの名無しさん2014/11/12(水) 07:59:53.03ID:KVAuCYtX
同僚がプログラマとは限らないだろ
0587デフォルトの名無しさん2014/11/12(水) 08:03:28.22ID:j3JQUEN8
同僚は駅で漫画拾ってるとか
0588デフォルトの名無しさん2014/11/12(水) 13:58:51.14ID:SgzYB1N4
>>586
そんなやつに相談するのかよ w
0589デフォルトの名無しさん2014/11/12(水) 14:11:48.68ID:MpcbuGKw
実は相談するのは誰でもいいという話もあるw
0590デフォルトの名無しさん2014/11/12(水) 14:22:28.62ID:wkOcL4q8
同僚は経理かも知れないし営業かも知れないだろ
0591デフォルトの名無しさん2014/11/12(水) 14:49:15.09ID:6K30nyMV
ブライアン・カーニハンも書籍 プログラミング作法 で
人間のスタッフに相談する前にテディベアのぬいぐるみに相談しろって言ってるしね
0592デフォルトの名無しさん2014/11/12(水) 15:25:18.61ID:0LkGEnGi
ナンシークラッツのWin95本には、モニターをバットぶん殴れ
但し、プラスチック製。というのがあったな
0593デフォルトの名無しさん2014/11/12(水) 17:39:31.85ID:T+u5xe5a
c++でthreadに関して勉強中なのですが、少し調べたらthreadに関連するものが
std::promise
std::thread
std::atomic
std::packaged_task
std::async
などと沢山あるのですが、なんでこんなに沢山あるのですか?
ややこしくて何からやれば良いのか分りません。どのあたりから
手を付ければよいでしょうか?
0594デフォルトの名無しさん2014/11/12(水) 17:53:45.14ID:zENzdlQl
とりあえずstd::threadだけでいいだろ
0595デフォルトの名無しさん2014/11/12(水) 18:20:47.94ID:pfty6qg4
>>593
今の規格では中途半端なpromise,asyncは忘れていい。
atomicはスレッド生成でなくスレッド間でデータを渡す際に使うもの
0596デフォルトの名無しさん2014/11/12(水) 19:35:56.08ID:T+u5xe5a
>>594,595
レスありがとうございました。参考になりました。
やりたいことはサブスレッドで実行して、戻り値をメインスレッドで
受け取りたいのですが、C#のBackgroundWorkerみたいな感じです。
まずはthreadから試してみます。
0597デフォルトの名無しさん2014/11/12(水) 19:45:47.47ID:RxkjZTWP
>>596
threadはjoinせずにスコープを抜けると落ちる糞仕様だから注意しておけよ
0598デフォルトの名無しさん2014/11/12(水) 19:56:55.86ID:wYiLy+NQ
>>590
バグがわかる経理とか営業スゲー w
0599デフォルトの名無しさん2014/11/12(水) 20:28:43.81ID:WWVTzwfB
>>598
>>598
0600デフォルトの名無しさん2014/11/12(水) 21:34:33.33ID:MpcbuGKw
>>591
さすが カーニハン先生w 存命かな。
0601デフォルトの名無しさん2014/11/12(水) 21:36:49.13ID:kW0ZSq/y
放り投げたいならdetachすればいい
0602デフォルトの名無しさん2014/11/13(木) 00:40:43.26ID:A3FNhulI
仕事で仕方なくC++のソース見てるがJavaと比べてあまりに糞すぎる
言語仕様に無駄が多すぎるせいで糞なソースはとことん糞で可読性糞
化石言語もいいとこだな。これじゃどうがんばっても流行らないし新規開発の需要もない罠
ヘッダーファイルとかインクルードの順番とかゴミすぎ
ポインタをif文の条件に使うなアホが
VisuaStudioもeclipseと比べたらこれまたゴミ糞すぎる
オープンソース以外でまともな言語と開発環境は見たことがない
0603デフォルトの名無しさん2014/11/13(木) 01:07:03.92ID:G+5vwsJZ
少なくとも、C++11で書くならJavaよりもっとスッキリ書けるぞ
0604デフォルトの名無しさん2014/11/13(木) 01:57:12.35ID:3Bps3ihq
純粋な言語仕様でJava()がC#に勝っている所など
微塵も無いと思うのだが
Java信者の思考はいつも
「Javaと異なる仕様=欠陥」だから仕方ない
0605デフォルトの名無しさん2014/11/13(木) 02:07:44.82ID:R28Io23e
私は C/C++ ならそこそこ出来るが Java は出来ない。
まじで出来ない。脳みそのどこかが拒否してる。
麻痺してるとも言えるかorz
でも
C++は最高傑作である by ハーバートシルト
ふーんだ
0606デフォルトの名無しさん2014/11/13(木) 02:23:06.82ID:yOQrY5EK
不正メモリアクセスによる不安定な挙動に
絶対に脅かされることがない安心感は何にも代え難いものがある。
C/C++とJavaは使いどころが違うのに どちらで書くかなんて言い出す奴はあほ
0607デフォルトの名無しさん2014/11/13(木) 04:51:27.63ID:G+5vwsJZ
C++にて、構造体の初期化時にフィールド名を指定する方法がいつの間にか対応されていて嬉しいんですが、
これって標準化されていて、使っても問題ないんでしょうか?
試したコンパイラはg++です

http://ideone.com/GvCB6A
0608デフォルトの名無しさん2014/11/13(木) 05:28:32.95ID:HFkxt2t8
>>607
C99のdesignated initializerかな
0609デフォルトの名無しさん2014/11/13(木) 07:15:04.13ID:8nnx8trq
>>607
いいえ、標準ではありません
0610デフォルトの名無しさん2014/11/13(木) 07:30:48.73ID:G+5vwsJZ
>>608
まさにそれでした、ちなみに、
Hoge hoge = {
x: 3,
y: 5,
};
とも書けるって事でした
0611デフォルトの名無しさん2014/11/13(木) 08:04:49.86ID:1iY71Yqc
全部に代入するときはそれほどメリット感じない
一部のメンバの初期化とかには便利
0612デフォルトの名無しさん2014/11/13(木) 15:25:28.04ID:X52VxF3b
わしゃ、なんと言おうと、C++が一番好きや。
0613デフォルトの名無しさん2014/11/13(木) 16:04:07.36ID:N/yfjgH2
質問した>>607はその後の二つのレスを見て
使い続けることにしたのだろうか
0614デフォルトの名無しさん2014/11/13(木) 16:18:30.31ID:Y2Hw988G
>>607
でもg++だと宣言の順番とおりじゃないとダメなんだよ。
使い道が全くない。
06156072014/11/13(木) 19:37:56.82ID:UjzPHB8z
個人的には、旧来のフィールド名指定無しで書いてもコンパイルが通る現状、
フィールド名を指定して、構造体側の順序入れ替え時にコンパイルエラーを期待するのは、実質使えないんじゃないかなと思います、
Warningなり、静的解析ツールがあれば別ですが。

今のところは、未初期化で宣言後に代入してるところを、代入コストと冗長性を取り除く程度が無難だと思ってます。
↓これを置き換え
Hoge hoge;
hoge.x = 3;
hoge.y = 5;
0616デフォルトの名無しさん2014/11/13(木) 20:19:18.10ID:E2cMfZHo
>>606
C++11以降は、Javaの出番がないような気がするけどね。
むしろ、何のためにJavaを使うの?
0617デフォルトの名無しさん2014/11/13(木) 20:54:25.92ID:VOhXK40g
クロスコンパイルが面倒だし無駄だから
0618デフォルトの名無しさん2014/11/13(木) 21:39:30.68ID:uOTGwQ1c
>>616
GCは強力だからね‥
0619デフォルトの名無しさん2014/11/13(木) 23:29:47.64ID:NqC+qBdm
>>616
趣味
Pascal-P5で遊ぶ感覚に同じ
0620デフォルトの名無しさん2014/11/14(金) 01:15:29.62ID:4lYvxokF
GCやりたきゃBoehm GCでいいやんとなる
0621デフォルトの名無しさん2014/11/14(金) 01:55:13.55ID:+vOKvhlv
shared_ptrで大体事足りる
0622デフォルトの名無しさん2014/11/14(金) 02:15:15.37ID:lsgOchF5
GCだとRAIIなコード書けないの・・・
0623デフォルトの名無しさん2014/11/14(金) 07:27:39.53ID:cGgQXSsi
初めての言語でC選んで
入門レベルのポインタ・構造体あたりまでマスターしたけど
この先どうするか迷う
仕事に使おうとか特に考えてる訳でもなくて
プログラミングっておもしろそうだなぁと思って始めた
今のところそれほど難しいとも思わないから
もう少しCを進めてみようかなとも思ってるんだけど
迷うなぁ〜
と書いたところで、
お前が何をしたいのかによるって言われて終わるんだろうな
なんか作りたいなと漠然と思ってる程度なんだけど
こう書くとたぶんお前らは
じゃVBやったら?とか言うんだろうな
じゃそうしようかな・・・

という具合で自問自答しながら、これならやっぱり書き込む必要ないかと思って
全文Deleteするんだけど、今日は書き込むボタンをぽちっとしてみるのであった
0624デフォルトの名無しさん2014/11/14(金) 07:39:16.43ID:wpiv66DF
C++コンパイラの実装を自分でやってみれば良い
0625デフォルトの名無しさん2014/11/14(金) 09:27:33.82ID:4lYvxokF
そういう人は最初からC/C++よりC#行けば
そこからC/C++行くならそれでいいし
0626デフォルトの名無しさん2014/11/14(金) 12:49:35.05ID:qPlOgKHi
>>623
文法を覚えたところで、それはプログラミングの前衛知識のひとつを得たにすぎない
日本語の文法覚えたことと、日本語で面白い本を書けることは別だよね
プログラミングの奥深さはその先にあるんだよ
まあ仕事でやってる人でも、特にドカタ的な人は理解してないことが多いけどね
0627デフォルトの名無しさん2014/11/14(金) 12:50:34.62ID:qPlOgKHi
s/前衛/前提/
0628デフォルトの名無しさん2014/11/14(金) 14:40:04.95ID:ej2P4o/8
前衛芸術的プログラミング
0629デフォルトの名無しさん2014/11/14(金) 16:14:27.73ID:+bh3MIM0
自問自答プログラムを作ればいいのよ。
0630デフォルトの名無しさん2014/11/14(金) 16:50:00.43ID:9h3dP9ft
>>623
welcome to http://peace.2ch.net/test/read.cgi/tech/1411227287/
0631デフォルトの名無しさん2014/11/14(金) 19:56:14.21ID:wTO3bI+f
>>623
GUIは?
win32api
0632デフォルトの名無しさん2014/11/15(土) 00:51:47.03ID:3fRE4a8L
>>626
日本語が出来てもプロとして仕事が出来るってことじゃないしね
俺、プログラム言語(C++とか)はすごく出来る。
そうか、じゃ車のエンジン制御のプログラム(プロとしての仕事)やってって言われても
車のエンジン制御のしかたさっぱり分からん><って良くあるしね
0633デフォルトの名無しさん2014/11/15(土) 01:49:46.43ID:ikAfBmR0
>>623
やりたいことが特に定まって無く、単純にプログラミングって面白そうだなあって考えてるなら、組み込みプログラミングをオススメする。
組み込みプログラミングは、アセンブリ言語というものでもできるけど、Cでも出来る。
おすすめする理由は、組み込みプログラミングを行うとC言語の真髄が見えてくるし、
自分がCで書いたプログラムを使ってCPUが何をしているのかの理解につながる。

まあそのためにはハードウェアの勉強も同時に行わないといけないんだけど、そこも含めて面白いと思うよ。
ポインタや構造体のあたりがそれほど難しいと思わなかったなら、そこまで大変ではないと思う。
06346232014/11/15(土) 04:49:08.10ID:CRZDSZv3
みなさんありがとー!
>>624
なにやら難しそうですね
>>625
C#というのは考えに入ってませんでした
ちょっと調べてみますね
>>626
今の知識では実用的なものは何も作れないので
前衛知識のもっと前の段階なのかも・・
>>630
ブックマークしておきます
>>631
ウィンドウを出したい!と思って適当にコピペしてメッセージボックスを出すプログラム
を作った事はあります。今の基本知識だとまだ早いのかなと思って
本格的にはやってないのですが、Cを続けるならその辺の本も買ってこようかなとおもてます
>>633
ハードウェア動かすのって面白そうだなぁ
個人の趣味的な範囲で何ができそうか調べてみますね
0635デフォルトの名無しさん2014/11/15(土) 08:03:56.01ID:zy2r9BUW
メッセージボックスは難しいな。
出すだけなら簡単だけど
アプリケーションを正しく動作させるためには深い理解が必要
0636デフォルトの名無しさん2014/11/15(土) 13:05:26.87ID:dr/dyrN2
>>635
どの辺りの知識が必要ですか?
0637デフォルトの名無しさん2014/11/15(土) 14:54:52.30ID:g+QiKrjA
これをCに訳してもらえませんか?
月名を入力すると数字の月を出力する
数字を入力すると月名を出力する
List<String> NAMES = Arrays.asList("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
Scanner sc = new Scanner(System.in);
while(true)
System.out.println(
sc.hasNextInt()?
NAMES.get(sc.nextInt()-1):
NAMES.indexOf(sc.next())+1
);
0638デフォルトの名無しさん2014/11/15(土) 14:58:13.16ID:GzDZx6pY
宿題はスレチ
0639デフォルトの名無しさん2014/11/15(土) 15:00:56.79ID:hIWmb4Rf
やりたいことは
>月名を入力すると数字の月を出力する
>数字を入力すると月名を出力する
で自分の口で説明できてるし
それに沿って実装すればいいと思う
0640デフォルトの名無しさん2014/11/15(土) 15:41:10.41ID:RzrSosLr
>>634
オブジェクト指向なら、
スッキリわかる Java入門 第2版、2014

PICマイコン、C言語で、LEDをチカチカさせたいなら、
基礎入門 ブレッドボードではじめるマイコンプログラミング
2010、青木直史

猫でもわかるC#
結局、.NETでフォームを作るのだから、VBの本でも同じ
0641デフォルトの名無しさん2014/11/15(土) 17:19:19.54ID:CRZDSZv3
>>640
ありがとうございます
全部買いたい衝動に駆られてしまって
ますます迷ってきた
特に一番上のはポチる衝動に駆られては
しかし今月はちょっと買いすぎなのではと
相反する気持ちに押しつぶされそうに・・・

そしてふと目に入った>>637に没頭
なんとか組み上がってよかった
もちろんこの板の人に見せたら怒られそうなプログラムなので見せないけど!
0642デフォルトの名無しさん2014/11/15(土) 17:27:50.80ID:YbHrBULy
文字列をエスケープシーケンスの文字列に直す定石ってありますか?
"abcd\nefg"を"abcd\\nefg"に
"\"Hello World\""を"\\\"Hello World\\\""みたいな
0643デフォルトの名無しさん2014/11/15(土) 17:45:36.75ID:roR/GD99
\の次の文字見ればいいじゃない
0644デフォルトの名無しさん2014/11/15(土) 18:54:25.87ID:B5DjQnZ7
vectorとかdequeみたいなコンテナに配列の実体を突っ込む方法ってあります?
0645デフォルトの名無しさん2014/11/15(土) 18:55:35.52ID:1QOYN7FT
vectorへvector
0646デフォルトの名無しさん2014/11/15(土) 19:05:46.79ID:OpYgM50z
insert
0647デフォルトの名無しさん2014/11/15(土) 21:38:04.57ID:B5DjQnZ7
>>645,646
あざす
調べてみます
0648デフォルトの名無しさん2014/11/16(日) 06:47:56.72ID:nIuEkFSj
最近学び始めた者です

ある情報の集合体があって、各々のクラスが所持してます
使用方法は、自クラスで値を変更・参照
他クラスに渡す時は、変更はせず値を参照するだけなのですが

この集合体は構造体かクラス、どちらの方がよろしいのでしょうか
クラスのprivateに置いてゲット関数を駆使して使うか
引数をconstにして構造体で渡すか、と悩む点はそこかなと思ってるのですが
よろしければ、より良い方法を教えていただけないでしょうか
0649デフォルトの名無しさん2014/11/16(日) 07:28:48.66ID:1qsvk//V
メンバ数が多いほど、クラスにするべき。
但し、常に全てのメンバにアクセスするような場合(座標値など)は構造体でも可。
0650デフォルトの名無しさん2014/11/16(日) 07:31:35.73ID:RFsNZWfo
その集合体というのが関連の無い変数の寄せ集めなのか
それ自体に明確な概念があって適切な名前を付けられるかによる。
>>649のように「参照するだけ」とか手段で決める設計は禄なものではない
06516482014/11/16(日) 07:45:38.91ID:nIuEkFSj
>>649
メンバ数は10個もないです
毎フレームアクセスします
頻繁にアクセスする、しないでの違いは何なのでしょうか

>>650
全て関連性があって名前も付けられます
どのような設計が理想なのでしょうか...
0652デフォルトの名無しさん2014/11/16(日) 08:02:51.02ID:us5izt0Q
各各のクラスが所持していますって書いてあるのになんでconstで渡すのか
そもそもそのデータを所持するベースクラスがあるのではないのか
0653デフォルトの名無しさん2014/11/16(日) 08:53:36.96ID:nIuEkFSj
>>652
他クラスの物の値を見たいから渡すんですが
ポインタか参照渡しで渡したかったのでconstは必須かなと
0654デフォルトの名無しさん2014/11/16(日) 09:13:04.70ID:ETwRgil2
>>648
変更させたくないならget一択

> 引数をconstにして構造体で渡すか、
何を言ってるのか、わからない
0655デフォルトの名無しさん2014/11/16(日) 09:35:11.58ID:luMgT/mi
コンソールアプリで、入力された文字を指定回数出力するプログラムを作ってるんだけど、文字と数字で入力の関数が違うのは知ってる。けどうまく使い方がわからない。誰か助けて
0656デフォルトの名無しさん2014/11/16(日) 09:40:05.18ID:xgxY7FoW
>>654
↓ こんなことじゃないの?

BがAを使用した処理をするとき
B::処理(const Aの情報 aInfo) {
 val1 = aInfo.Val1;
}
とするか
B::処理(A a) {
 val1 = a.getVal1();
}
0657デフォルトの名無しさん2014/11/16(日) 10:02:16.85ID:1qsvk//V
>>655
丸投げなら宿題スレに。
そうでないなら書けたところまででも晒して味噌。
0658デフォルトの名無しさん2014/11/16(日) 10:07:48.99ID:CXE/Z8t2
>晒して味噌

とてつもないカレー臭がした
0659デフォルトの名無しさん2014/11/16(日) 13:34:23.92ID:HF3ds5dG
>>648
structかclassかはその集合体の設計による。
一律に決めることは不可能。
各々のクラスからその集合体を取得する方法についても
一律に決めることは不可能。
ついでにC++に構造体というものは無い。
0660デフォルトの名無しさん2014/11/16(日) 15:00:46.52ID:HA7YiNAr
>>659
連続体とか流動体はないの?
0661デフォルトの名無しさん2014/11/16(日) 17:25:16.93ID:Wd4CRM47
Visual C++で
for each (auto & i : vec);
みたいな書き方を見たんだけど これってVC拡張構文?
0662デフォルトの名無しさん2014/11/16(日) 18:34:38.18ID:LKP1iDPW
>>661
「みたいな」ならその通り
0663デフォルトの名無しさん2014/11/16(日) 18:51:07.78ID:HjQlf/Sx
>>648
Baseを仮にread-writeクラスとして、
渡す時は継承したreadクラスを渡す
0664デフォルトの名無しさん2014/11/16(日) 18:55:31.97ID:+rfLdjIV
>>661
VC じゃなくて C++11
超便利
0665デフォルトの名無しさん2014/11/16(日) 19:00:42.32ID:lkRhIZkq
微妙に混ざってるけど
・for each (x in container ) { ... } はVC拡張
・for (x : container) はC++11
だったはず
0666デフォルトの名無しさん2014/11/16(日) 21:05:38.62ID:3K4iGnZz
C++って、「こういう場合はこうなる」っていうような、コンテキスト依存な振る舞いが多様すぎて
プログラミング言語としての一貫性に欠けているという印象をいつまで経っても払拭できない。
そういうコンテキスト依存な振る舞いが、C++のバージョン(98とか11とか14とか)によってすら多種多様だから
もはや誰にとって使える言語なのかすら怪しくなっている。
0667デフォルトの名無しさん2014/11/16(日) 21:08:22.97ID:myCTRLQ/
たとえば?
0668デフォルトの名無しさん2014/11/16(日) 21:09:13.42ID:lkRhIZkq
それって継承とオーバーロードがある言語や
いわゆる動的型付け言語の大半に当てはまらないか
0669デフォルトの名無しさん2014/11/16(日) 21:10:48.50ID:dxyXFI3O
いや、非常に挙動が分かりやすく
やろうと思えば細部まで指定できる
言語だろ。
0670デフォルトの名無しさん2014/11/16(日) 21:14:44.80ID:cY/Bodh6
>>666
> コンテキスト依存な振る舞いが多様すぎ

たとえば?
0671デフォルトの名無しさん2014/11/16(日) 22:30:58.84ID:oso6sJPD
>>670
俺は>>666ではないけど
文脈依存っていってるから↓こういうのじゃないの。
template<typename T>
class x {
 typedef typename T::type type;//typename必要
};
void f() {
 x<unko>::type i;//typename付けない
}
typenameの有無をよく間違えるんだけど、型が複雑になると
VCもgccも間違ってコンパイル通っちゃうことがあって後で困る
0672デフォルトの名無しさん2014/11/16(日) 22:33:35.62ID:dxyXFI3O
typeであるかが曖昧な場合かそうでないかという明確な基準があるだろう。
0673デフォルトの名無しさん2014/11/16(日) 22:43:48.15ID:CXE/Z8t2
>>672
コンパイラにとっての基準が明確かでなく
人間にとって複雑かどうかを議論していた筈だが。

テンプレートのT&&が左辺値参照になるとか
最初何言ってるか わからんかったわ
0674デフォルトの名無しさん2014/11/16(日) 22:53:56.88ID:3K4iGnZz
コンパイラのメカニズムを熟知すればC++の言語仕様が自然に理解できるというのはおそらくその通りなのだろう。
でも、そういう人ならわざわざC++なんて使うまでもないのでは?
0675デフォルトの名無しさん2014/11/16(日) 23:08:35.79ID:lkRhIZkq
「テンプレートの特殊化するな」とか
「継承でメンバ関数のオーバーロードするな」とか
そういう主張だと思ってた>文脈

何にせよ
>「こういう場合はこうなる」っていうような、コンテキスト依存な振る舞いが多様すぎて
の例がほしい
でないと行き違いから無駄な口論が起きる可能性が
0676デフォルトの名無しさん2014/11/16(日) 23:22:58.24ID:myCTRLQ/
コンパイラメカニズムじゃなくて言語の仕様を知ってるか知っていないかだろう
知ってる人は正しく使えるんだからC++を普通に使うだろう
0677デフォルトの名無しさん2014/11/16(日) 23:24:29.01ID:UMGldnne
言語仕様が明確かでなく
人間にとって複雑かどうかを議論していた筈だが。
0678デフォルトの名無しさん2014/11/16(日) 23:29:11.49ID:T1dR1Jiw
そりゃ間違いなく複雑だけど、パワフルさの引き換えなんだからしゃーなしじゃね
同等の機能をもっとシンプルに実装できるんならそれに越したことはないが
0679デフォルトの名無しさん2014/11/16(日) 23:30:11.42ID:myCTRLQ/
コンピューターは人間のように理解してくれないんだから
人間の方からコンピューターに近づく必要があるだろう
その過程で人間にとっては複雑だがコンピューターにとっては理解できる状況があり
その状況を許容できるかどうかなんじゃないか
0680デフォルトの名無しさん2014/11/16(日) 23:36:26.91ID:CXE/Z8t2
>>675
例えば、クラスがある条件を満たすとデストラクタがthrow()になる
なんて仕様があって2003と2011で異なるとか?
0681デフォルトの名無しさん2014/11/17(月) 08:32:36.71ID:gmExUzMV
clang以外の主要コンパイラの準拠度の低さを考えれば
仕様通りに作ることさえままならないほどに難しいことは明らか
0682デフォルトの名無しさん2014/11/17(月) 09:37:56.16ID:mUd/fe7P
>>666 じゃないけど
まさか

int hoge;
typedef int hoge;

とか

struct _tag {
int hage;
} hoge;
typedef struct _tag {
int hage;
} hoge;

とか

int *p = &fuga;
*p = fuga;

とかね

どうみても言語仕様です
0683デフォルトの名無しさん2014/11/17(月) 10:03:04.71ID:zVrhBdcJ
腐った仕様だとは思う
0684デフォルトの名無しさん2014/11/17(月) 10:04:42.76ID:19EKBw41
インテリセンスがあるからヘーキヘーキ
0685デフォルトの名無しさん2014/11/17(月) 10:06:13.28ID:UC4i9yVV
Cのしがらみを捨てればかなりマトモになるとは思うが
いまさら新しい言語作っても普及しなきゃな
0686デフォルトの名無しさん2014/11/17(月) 10:08:27.43ID:zVrhBdcJ
Dの人気の無さを見るとね
0687デフォルトの名無しさん2014/11/17(月) 10:20:30.29ID:UGS3JGAV
Dは良い言語だよ





良い言語だよ(震え声)
0688デフォルトの名無しさん2014/11/17(月) 11:00:39.33ID:zVrhBdcJ
悪いとはだれも言ってない
人気が無いのは事実
0689デフォルトの名無しさん2014/11/17(月) 12:01:26.61ID:YO3uKPa9
なんか宗教論争だな
原理主義はclang
妥協はvc++、ruby
学術、企業排斥がjava
計算がfortran

いちもつの形で優劣語り、民主主義と専制の優劣論と同じ
アリストテレスの時代より低レベルだよ
0690デフォルトの名無しさん2014/11/17(月) 17:40:40.50ID:9IlXlMUx
最近の学校で教えるC言語のfor文のint iはどこで宣言するのが普通ですか?
int i;
for (i = 0; i < 3; i++) {}
か
for (int i = 0; i < 3; ++i) {}
0691デフォルトの名無しさん2014/11/17(月) 17:41:54.53ID:4tgMBGll
C言語は先頭でないとエラー。
0692デフォルトの名無しさん2014/11/17(月) 17:43:17.84ID:W6zY66U4
>>691
いつの時代からタイムスリップしてきたんだおまいは
0693デフォルトの名無しさん2014/11/17(月) 17:46:43.14ID:4tgMBGll
今の時代でもそうだ。
C言語のソースコードを、コンパイラが標準ではC++とみなしてコンパイルするものがある。
オプションまたは拡張子によってC言語でコンパイルするとエラー。
0694デフォルトの名無しさん2014/11/17(月) 17:47:47.13ID:5RaFTbYR
http://ja.wikipedia.org/wiki/C99
C99ではどうやらその制限は撤廃されてるらしい
0695デフォルトの名無しさん2014/11/17(月) 18:43:10.92ID:kTSddzTm
そんな15年も前の話をされても
gccでもvcでも先頭以外で使えるでしょ
どんなKUSOコンパイラ使ってるのかと
0696デフォルトの名無しさん2014/11/17(月) 18:43:27.78ID:YO3uKPa9
>>690
その質問からして、for文の右が普通と理解しておくべし

ヒント:変数のライフタイム
0697デフォルトの名無しさん2014/11/17(月) 18:52:25.52ID:dcxHMyQi
組み込みはコンパイラ選べるほど無いけどね。
0698デフォルトの名無しさん2014/11/17(月) 18:57:21.65ID:5RaFTbYR
組み込みの話は一切出てきていませんが・・・
0699デフォルトの名無しさん2014/11/17(月) 19:19:04.77ID:JwoO3TSc
最近の学校で教えるC言語の関数の引数の型のint iはどこで宣言するのが普通ですか?
int main(argc, argv)
int argc;
char **argv;
{
return 0;
}
か
int main(int argc, char **argv)
{
return 0;
}
0700デフォルトの名無しさん2014/11/17(月) 19:21:43.32ID:2R07lXEB
後者
0701デフォルトの名無しさん2014/11/17(月) 19:30:18.07ID:UGS3JGAV
いきなり話題が20年以上前にタイムスリップしたなw
0702デフォルトの名無しさん2014/11/17(月) 20:30:48.55ID:BlRB4zD6
C++でプログラムを作ってる時に、たとえば標準出力にタイムスタンプつきで何らかの情報を出力したい、って場合
coutとsetwとsetfillとかの、C++の出力機構だけを使うのか、
伝統的なCのprintfを使うのか、どっちが「普通」なの?
0703デフォルトの名無しさん2014/11/17(月) 20:39:21.64ID:wDZI4MU9
回答する人にとって自分のやり方が「普通」になりがちなので
質問が意味をなさない
0704デフォルトの名無しさん2014/11/17(月) 20:46:11.35ID:oWS5dSpx
>>702
私の場合、ことがタイムスタンプ付きでプリミティブな型の変数を出力したい程度なら、
strftime()で加工してC++ストリームに出力するなぁ。
規模が大きなプロジェクトだと、Cストリームを使う設計にすることが多いからそれに倣うけど。
0705デフォルトの名無しさん2014/11/17(月) 20:54:59.75ID:BlRB4zD6
>>704
Cで済むものならCの範囲内の機能を使っても特に問題ないってことですね。
参考にします。ありがとうございます。
0706デフォルトの名無しさん2014/11/17(月) 21:03:50.15ID:oWS5dSpx
>>705
混ぜるな危険。

CストリームとC++ストリームが混ざるとお互いにバッファリングするから出力がぐだぐだになる。
std::coutとstderrで使い分けるといいかも。
0707デフォルトの名無しさん2014/11/17(月) 21:12:40.39ID:SaVb0FGb
えーマジiostream!?
iostreamが許されるのは小学生までたよね?
0708デフォルトの名無しさん2014/11/17(月) 21:20:58.49ID:V8HVQGu7
お尻は前から拭くのと後ろから拭くのとどちらが普通ですか?
0709デフォルトの名無しさん2014/11/17(月) 21:22:21.11ID:wGcJazVG
たこ焼きはソースとしょうゆ
どっちが正義ですか?
0710デフォルトの名無しさん2014/11/17(月) 21:25:31.36ID:r/WM0zDC
つ setvbuf()
0711デフォルトの名無しさん2014/11/17(月) 22:29:23.40ID:7csJSq0g
cstdioだけ使えばいいのに
どうして馬鹿は意地でもiostreamを使おうとするの?
0712デフォルトの名無しさん2014/11/17(月) 22:39:09.25ID:hTsgrynh
加齢臭がする
0713デフォルトの名無しさん2014/11/17(月) 22:40:22.63ID:SYXJMOnD
小細工仕込むためにprintfラップして使ってる
iostreamで似たような事やろうとするとめんどくさそうで敬遠してる
0714デフォルトの名無しさん2014/11/17(月) 23:07:36.14ID:gdFZqRGj
class A{
int x;
A():x(10){}
A(int x):x(x){}
void out(){ cout<< x <<endl;}
}

A a;
a.out(); //10が出力される
a=100;
a.out(); //100が出力される

このコードの 
a=100; みたいな書き方って前から出来ましたっけ
0715デフォルトの名無しさん2014/11/17(月) 23:35:30.92ID:3Sx5Cyxb
int取るコンストラクタがexplicitじゃなければできただろ
0716デフォルトの名無しさん2014/11/18(火) 00:34:50.11ID:WzDrd9gQ
>>715
出来たって、いまは(C++14では)出来なくなったのか
0717デフォルトの名無しさん2014/11/18(火) 00:39:38.49ID:c4Wts7yi
>>716は日本語が不自由な人
0718デフォルトの名無しさん2014/11/18(火) 20:24:39.51ID:sykrFrlo
指数部を符号なし整数としてオフセットを用いて表現する方法と、二の補数で表現する方法で、同じビット数のときのそれぞれのメリットとデメリットって何?
0719デフォルトの名無しさん2014/11/18(火) 22:25:12.43ID:56ogmGVy
C言語です。
複数のプロセスからひとつのファイルを編集するので排他処理をしたいです。
実際に使われている方法の例を教えてください。
ロックファイルの有無で書き込み可能か判断する方法はそのロックファイルも同時に開かれるのではないかと疑問です。
0720デフォルトの名無しさん2014/11/18(火) 22:40:23.76ID:OSrGz7tV
mutex
0721デフォルトの名無しさん2014/11/18(火) 22:52:59.72ID:SgXcxZ00
>>719
> ロックファイルの有無で書き込み可能か判断する方法はそのロックファイルも同時に開かれるのではないかと疑問です。

(まともなファイルシステムなら)ファイルの作成は排他制御されてて両方が成功することはない
0722デフォルトの名無しさん2014/11/18(火) 22:53:24.09ID:/aEHbgmj
C標準にこだわらずにAPIを使ってファイル操作するのが簡単
0723デフォルトの名無しさん2014/11/18(火) 23:12:34.11ID:e2sYYLsk
fopenだと既にファイルがあってもエラーが出ず同時に開くことができてしまいます。
実際に運用されてるものではどんな方法をとっているのでしょうか。
できるだけ環境依存でない方法でやりたいです。
0724デフォルトの名無しさん2014/11/18(火) 23:13:27.02ID:OSrGz7tV
言語では規定されていないので環境依存でない方法はありません
0725デフォルトの名無しさん2014/11/18(火) 23:22:00.07ID:y3qZQj9X
atomicなmkdirをファイルロックの代わりに使ってる
0726デフォルトの名無しさん2014/11/19(水) 00:01:37.87ID:AizLP6wx
C11だと標準化されてるのかな? あまりあてにならんけど
まあいよいよの時はオレオレライブラリの中に閉じ込めてしまえば済むと思う
0727デフォルトの名無しさん2014/11/19(水) 00:21:25.75ID:orlH/5gt
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/
0728デフォルトの名無しさん2014/11/19(水) 09:28:25.98ID:aYvM2PU2
>>719
ファイルは共有モードで開き、ミューテックスで排他状態を管理、判定

単一プロセスだけが書き込むように設計変更(ライタープロセス)
書き込み要求を9に入れて処理し完了したら通知を返す

複数プロセスが別々のファイルに書き込むように設計変更
読み出しを複数ファイルに行うような読み込みの冗長化

後ろ二つは、使える場面が少ない上で複雑になるから、大体は簡単なミューテックスを使う
ミューテックスがOSにないならアセンブラを降臨させる必要が出るかも(まあ組み込みOSでも普通は持っている)
0729デフォルトの名無しさん2014/11/19(水) 09:32:03.02ID:Uep2bTnS
環境依存はOKだが、どんな環境か書かないと話にならんわな
0730デフォルトの名無しさん2014/11/19(水) 09:37:13.71ID:TAm49o8Y
>>728は最初の2行でいいだろ
労害は無駄な妄想の駄文が続くからまさに害
0731デフォルトの名無しさん2014/11/19(水) 13:46:36.09ID:lnFQGeQL
>>730は無しでいいだろ
批判しかしないからまさに害
0732デフォルトの名無しさん2014/11/19(水) 13:58:20.60ID:XZRMe/Sn
世の中には無駄なものなんて何一つないのですよ
0733デフォルトの名無しさん2014/11/19(水) 14:48:44.23ID:AqLEOsVc
>>731は無しでいいだろ
批判しかないからまさに害
0734デフォルトの名無しさん2014/11/19(水) 15:02:18.08ID:JZ2oYyd9
>>732
生きる希望が湧いた
ありがとう
0735デフォルトの名無しさん2014/11/19(水) 15:20:48.91ID:aYvM2PU2
先に想定質問を検討して考えてのべる癖はつけた方がいいと思うよ
0736デフォルトの名無しさん2014/11/19(水) 15:51:07.43ID:o9La4VRd
>>728
けっきょく標準では無理そうですね。
ミューテックスは非対応でしたが調べてみてflockが使えそうなのでそれにします。
ありがとうございました。
0737デフォルトの名無しさん2014/11/19(水) 18:42:02.60ID:rTt0jg+8
>>736
役に立たない情報かもしれないけど一応書いとく。

SQLiteの初期の頃に、プロセス間の排他について検討したらしいんだけど、
この時色々調べるとファイルロックのメカニズムはほとんどのOS上の
ネットワークファイルシステムでバグを持っていたそうです。
それらのOSにはWindowsやほとんどのUNIXも含まれたそうです。

それでもSQLiteは排他にファイルロックを使っています。
0738デフォルトの名無しさん2014/11/19(水) 19:18:52.40ID:jPM8lQ7K
誰もネットワーク越しのロックの話なんてしてないのに
0739デフォルトの名無しさん2014/11/19(水) 19:33:57.83ID:lJVSEwou
なんでSQLiteの話になったんだ
0740デフォルトの名無しさん2014/11/19(水) 19:51:12.13ID:I9gi/U1m
知ったかを披露したかったんだろ
0741デフォルトの名無しさん2014/11/19(水) 19:55:01.82ID:0+0ozXC3
mkdirはflockより環境依存少ない
0742デフォルトの名無しさん2014/11/19(水) 21:09:22.71ID:HgpOn/aO
DBを使えってわけですかい
0743デフォルトの名無しさん2014/11/19(水) 22:41:48.17ID:6cylO/7k
>>690
俺は前者で習った
後者で書いて提出したら減点食らった
駅弁大じゃダメだねと思った瞬間
0744デフォルトの名無しさん2014/11/19(水) 23:13:16.99ID:lnFQGeQL
後者がループ内なら速度に影響が出る
0745デフォルトの名無しさん2014/11/19(水) 23:16:54.54ID:ZVUHk6wV
>>744
そんな糞コンパイラ捨てろ
0746デフォルトの名無しさん2014/11/19(水) 23:20:25.00ID:6cylO/7k
俺を教えた教員はgcc -std=C99が面倒だったんじゃないかななんて思ってる
0747デフォルトの名無しさん2014/11/19(水) 23:21:08.62ID:RhGiIiwr
使うときに宣言したほうがコンパイラが最適化しやすい
0748デフォルトの名無しさん2014/11/19(水) 23:26:00.46ID:ZVUHk6wV
>>747
ライフタイム解析くらいまともなコンパイラならするだろ
差が出るとしたら糞コンパイラ
0749デフォルトの名無しさん2014/11/19(水) 23:32:10.15ID:RhGiIiwr
するしないじゃなく、しやすいって言ってんだよ
07507282014/11/20(木) 00:00:18.90ID:FbfCAEzw
変数の有効期限(スコープ)が短い方が優先的にレジスタを与え易くなるしね。
0751デフォルトの名無しさん2014/11/20(木) 00:01:26.40ID:+/B6pK/o
>>749
しやすいと何が嬉しいの?
0752デフォルトの名無しさん2014/11/20(木) 00:04:38.11ID:lJVSEwou
コンパイラ作ってる人がうれしい
0753デフォルトの名無しさん2014/11/20(木) 00:08:52.85ID:3nar01e/
寿命計算が簡単になりコンパイル時のメモリ節約、速度アップ
0754デフォルトの名無しさん2014/11/20(木) 00:10:22.32ID:FbfCAEzw
コンパイラ利用者の願望を期待値レベルで上昇させる事が出来るって事。
この点には、結果論は通用しない。 結果がでないならば、努力に意味が存在しないという論法は通じない。

その願望を実現できない原因を作っているのは、言語を使って実装した技術者の配慮不足、技術不足、能力不足
要件を定めた人間の配慮、設計した人間の配慮に原因があるからね。

簡単に言えば、スコープ内で有効となる変数の多さが最適化不能の原因であるから。

つまり、実装者や設計者、要件定義者の期待に最大限応えるように実装できるから嬉しいって事だよ。

長文すまん
0755デフォルトの名無しさん2014/11/20(木) 00:17:08.20ID:+/B6pK/o
すまんがわからんから実例持ってきて
0756デフォルトの名無しさん2014/11/20(木) 00:23:23.59ID:FbfCAEzw
悪いが、これで分からないなら、君には才能が無いよ。
0757デフォルトの名無しさん2014/11/20(木) 00:27:48.12ID:iMtuPlC8
才能がないのう
コンパイラで困憊
0758デフォルトの名無しさん2014/11/20(木) 00:39:38.38ID:MP59TUjQ
バッサり切り捨てすぎで笑った
まとめの釣りか何かの思惑を持った釣りなんだから、もう少しと加減してやれよ(笑)

大人げなさすぎ
0759デフォルトの名無しさん2014/11/20(木) 00:40:31.86ID:+/B6pK/o
>>756
そうかな。スコープの狭さだけでレジスタに割り当てるべきかどうか決めていいという判断も才能ないよ
0760デフォルトの名無しさん2014/11/20(木) 01:00:30.07ID:IYQ0XwaG
オウム返しワロタ
0761デフォルトの名無しさん2014/11/20(木) 05:57:45.82ID:aPNBJfLJ
>>690
for文に書くとコンパイラによって変数のスコープが違うから気をつけろ
0762デフォルトの名無しさん2014/11/20(木) 06:32:05.36ID:Pm9nmJfN
>>761
んなこたあ、ありえない。
0763デフォルトの名無しさん2014/11/20(木) 07:07:10.01ID:aPNBJfLJ
>>762
HPだと違うよ
0764デフォルトの名無しさん2014/11/20(木) 07:10:37.55ID:aPNBJfLJ
最近のコンパイラはコンパイラの差を回避する為にこのスコープをどうするかオプションで指定できるようになってる
0765デフォルトの名無しさん2014/11/20(木) 07:16:27.97ID:TrsJQyqJ
>>762
VC++6は違った
まぁ、そんな規格違反の化石みたいなコンパイラを未だに使う特殊な所なんて考慮する必要無いと思うけど
0766デフォルトの名無しさん2014/11/20(木) 07:30:09.37ID:7GcQ+ika
VC6で#define for if(0);else forしなかった男の人って…
0767デフォルトの名無しさん2014/11/20(木) 07:40:37.65ID:Jys9W+Tp
>>758
説明できないだけだろ
長文のわりに中身ないし w

>>762
http://msdn.microsoft.com/ja-jp/library/84wcsx8x.aspx
0768デフォルトの名無しさん2014/11/20(木) 07:47:03.35ID:s9FNVDVg
規格が出来る前にリリースされた製品を規格違反と揶揄するのが
当時のGCC信者のストレスのはけ口でした
0769デフォルトの名無しさん2014/11/20(木) 08:12:06.27ID:MP59TUjQ
gccと言えば、あの髭の人がclangがgplじゃないから怒ったとか
やっぱり宗教と同じだったgnu
0770デフォルトの名無しさん2014/11/20(木) 11:29:21.42ID:LdyOscpn
MSは規格違反というのは良く言われるけど、だいたいMSの方が合理的なんだよ。
思い切って言えば、規格の方がおかしいと思うことが多い。

MSが拡張した製品を出す→規格に取り込む。

こういう流れで、規格に取り込むときに互換性を無くすんだろうけど、
余計なことをせずにそのまま取り込んだほうが合理的だと思う。

もともと製品として出せるレベルの合理性が確認されているわけだし、
その時点のユーザーの100%がMS式を使ってるわけだし。
わざわざ互換性を失わせる方式で、しかも互換性を失わせるためだけに
不合理な方法を選ぶ。
こういうのは、規格の方に文句言ったほうが良いよ。

とくにHTML。
0771デフォルトの名無しさん2014/11/20(木) 11:35:22.48ID:LdyOscpn
>>738-
逆のことが言いたかった。
ネットワークが関係なければ、ファイルロックはうまく機能するとSQLiteでは
判断されている。

>>740
まあそういう面もあるのかも、意識はしてないけど。
0772デフォルトの名無しさん2014/11/20(木) 11:53:30.91ID:0P/OJcH8
>>770
>もともと製品として出せるレベルの合理性が確認されているわけだし、
>その時点のユーザーの100%がMS式を使ってる

MSユーザーの100%がMS式を使ってるのは当たり前。
MSだけでものを考えないでほしい。
GCCの仕様をC99に取り込む→VC対応せず
VCのセキュリティ関数をC11に取り込む→GCC対応せず
特定製品の仕様を(自分の合理性を理由に)そのまま取り込むと
こうやって統一が崩れて、結果互いに不利益を被るんだよ。
0773デフォルトの名無しさん2014/11/20(木) 14:04:37.26ID:uBJa9BCk
UTF-8にBOMなんて非合理なものを持ち込むのが合理的だって?w
0774デフォルトの名無しさん2014/11/20(木) 15:37:43.36ID:SmJh4MHH
むしろBOMが無いとソワソワします
Unicode規格を読んでなくてencoding formとencoding schemeの
区別がついていない人ほどBOMの文句を言う

その前にBOMはMSが考えたものじゃないだろう
0775デフォルトの名無しさん2014/11/20(木) 16:05:46.92ID:uBJa9BCk
それがUTF-16ならね。
0776デフォルトの名無しさん2014/11/20(木) 17:06:18.44ID:vDq2Fi8g
入力された文字を指定した数だけ出力するプログラムを作っているんだけど、数指定ってどうすればいい?

コード

#include <iostream>
#include <string>

int main()
{
int n;

std::string text;
std::cin >> text;
std::cout << text << std::endl;

return 0;
}

で、intの数字を指定回数にしたいんだけど、どうしたらいいだろう
0777デフォルトの名無しさん2014/11/20(木) 17:08:35.31ID:7mTde6YP
setw
0778デフォルトの名無しさん2014/11/20(木) 17:22:41.60ID:NeVUFuiv
マルチバイトは考慮しなくていいのか
0779デフォルトの名無しさん2014/11/20(木) 19:16:30.04ID:SvNYG/Uj
>>768
MSというかVC++のUTF-8でBOMが必須とされてるってことが問題なんだよな
0780デフォルトの名無しさん2014/11/20(木) 19:17:49.80ID:SvNYG/Uj
アンカー間違えた
0781デフォルトの名無しさん2014/11/20(木) 22:44:25.64ID:bga69PqZ
const int i = 100;
const unsigned char* dest = new unsigned char[i];
memcpy_s((void*)dest, i, src, i);
という処理で、srcが100文字より短くて、例えば
unsigned char src[] = "適当な文字列";
でもmemcpy_s()はエラーしませんか?
0782デフォルトの名無しさん2014/11/20(木) 22:59:56.49ID:TrsJQyqJ
>>781
しませんが、
そもそもconst付けるべきではないし、自分の対応出来る範囲外でconstが付けられてるのであれば、やるべきではありません。
0783デフォルトの名無しさん2014/11/20(木) 23:11:04.53ID:bga69PqZ
>>782
レスありがとうございました。
>そもそもconst付けるべきではないし
const unsigned char* dest = new unsigned char[i];
の部分でしょうか?
もしそうなら、何故const を付けるべきではないのでしょうか?
良く分らないので、解説お願いいたします。
0784デフォルトの名無しさん2014/11/20(木) 23:14:33.58ID:YC7+DKYP
destの中身を書き換えるからconstつけちゃ…… ダメよダメダメ
0785デフォルトの名無しさん2014/11/20(木) 23:16:10.61ID:TrsJQyqJ
>>783
逆になぜ付けたのか?
それを考えないと進歩しないよ
0786デフォルトの名無しさん2014/11/20(木) 23:19:24.53ID:E8T6u/jH
reinterpret_castなキャストは悪よ、
許されるのはtemplateが使えない為にtemplate的な処理をしたいって時くらい、
mallocとか、qsortとか
0787デフォルトの名無しさん2014/11/20(木) 23:38:21.76ID:Qdw9eGqa
ローカルな業界標準らしいですからUTF-8でBOM付きは
0788デフォルトの名無しさん2014/11/20(木) 23:39:19.91ID:bga69PqZ
みなさんレスありがとうございます。
>>785
このconstはアドレスがconstで、中身はconstでないからmemcpy_sで書き換えても問題ないとおもったのですが。
ちがいますか?
それにvisual studio 2013のc++で問題なく実行できたので、この解釈で良いと思ったのですが。
0789デフォルトの名無しさん2014/11/20(木) 23:45:31.10ID:YC7+DKYP
(void*)dest

こうゆうキャストはバグの元だからやめた方がいい
0790デフォルトの名無しさん2014/11/20(木) 23:49:30.22ID:bga69PqZ
>>789
レスありがとうございます。
(void*)を取ると、
visual studio 2013のc++で
IntelliSense: 型 "const unsigned char *" の引数は型 "void *" のパラメーターと互換性がありません
というエラーが出たので、付けました。
0791デフォルトの名無しさん2014/11/20(木) 23:51:37.32ID:TrsJQyqJ
>>788
違う
const char*は(char const*も同じ)
const charのアドレス
つまりアドレスの先のデータが不変

アドレスだけ変更せずにデータは可変であればchar のアドレスを不変 、
char * const と書く
0792デフォルトの名無しさん2014/11/20(木) 23:52:18.46ID:YC7+DKYP
(void*)
を消して
const unsigned char *
を
unsigned char *
にしてみろ
0793デフォルトの名無しさん2014/11/20(木) 23:54:32.52ID:wb16m4+g
>destの中身を書き換えるからconstつけちゃ…… ダメよ

んなこたーない
非constにキャストするのがいけないのであって
中身を書き換えるものをconstにすることは何ら問題ない
0794デフォルトの名無しさん2014/11/21(金) 00:04:32.30ID:3E36WIhF
>>788
教科書みたいな間違えだなw
0795デフォルトの名無しさん2014/11/21(金) 00:07:17.75ID:ld0A0Iic
>>786
>reinterpret_castなキャストは悪よ、
許されるのはtemplateが使えない為にtemplate的な処理をしたいって時くらい、
>mallocとか、qsortとか

は?
mallocにreinterpret_castなど必要ないし
qsortの比較関数をreinterpret_castしたら未定義動作だぞ
0796デフォルトの名無しさん2014/11/21(金) 00:18:10.19ID:zGskniPq
>>791
解説ありがとうございました。
私が、勘違いしていました。
>>792
確かに、
unsigned char *
にしたら、
(void*)無くても行けました。

この数日、このあたりが良く分らなくて混乱していたのですが、ようやく理解できました。
みなさんありがとうございました。
ちなみに、
unsigned char *const dest = new unsigned char[i];
と書いてもいいんですよね?
0797デフォルトの名無しさん2014/11/21(金) 00:25:40.51ID:XqCFqcOo
>>796
いいよー
そう書いてもキャストせずにコンパイル通るでしょ。

明示的にキャストしなければコンパイルエラーになるような物に遭遇したらまず疑おう
0798デフォルトの名無しさん2014/11/21(金) 01:36:11.80ID:PVkCBhk2
>>781=796(だよな)
本来聞きたかった事がぶっとんだようだが
memcpy_s(dest, i, src, i);
はdest, srcの中身に関係なくiバイト分コピーするので
> という処理で、srcが100文字より短くて、例えば
> unsigned char src[] = "適当な文字列";
> でもmemcpy_s()はエラーしませんか?
みたいなときはmemcpy_sのエラーにはならないがsrcの範囲外アクセスで未定義動作になる
0799デフォルトの名無しさん2014/11/21(金) 01:49:01.16ID:zGskniPq
>>798
ああ、そうでした。
聞きたかったのはそっちです。
>srcの範囲外アクセスで未定義動作になる
srcのデータとその後ろに続いている何らかのデータが合計100文字コピーされるという保証は無いですか?
保証でなくても、実際はそう言う動作をするかどうか知りたいです。
0800デフォルトの名無しさん2014/11/21(金) 02:14:02.43ID:XqCFqcOo
>>799
そういう動作をするときもあるしメモリアクセスエラーでクラッシュすることもある。
0801デフォルトの名無しさん2014/11/21(金) 02:18:51.80ID:zGskniPq
>>800
メモリアクセスエラーが起きるのは
どんな時ですか?
src領域の後ろにアクセスできないメモリ領域が有るということですよね。
0802デフォルトの名無しさん2014/11/21(金) 02:24:39.48ID:99Z7byug
むしろメモリ領域がない場合は?
0803デフォルトの名無しさん2014/11/21(金) 03:08:14.12ID:zGskniPq
>>802
>むしろメモリ領域がない場合は?
それは、srcがメモリの末尾の0xFFFFFFFFあたりに
確保された場合でしょうか?

ところで32bitプログラムなら
0x00000000
から
0xFFFFFFFF
までの範囲であれば、どこでも読み出すことは可能なのでしょうか?
memcpyなどの関数で。
0804デフォルトの名無しさん2014/11/21(金) 03:35:15.74ID:XqCFqcOo
>>803
いいえ。

Access violation〜 read of address〜
ってエラー見たことないか?
簡単に発生させれるから試してみたらいい
for(uintptr_t p=0;;p++){std::cout<<*reinterpret_cast<int*>(p);}
って感じで。
0805デフォルトの名無しさん2014/11/21(金) 03:44:09.77ID:zGskniPq
>>804
レスありがとうございました。
確かにアクセスバイオレーション出ました。
質問なのですが、
0x00000000
から
0xFFFFFFFF
の範囲で、アクセスしても良い領域、出来ない領域が、
OSやコンパイラなどに応じて決まっているのでしょうか?
それとも、mallocやnewや変数宣言などでユーザーが確保
した領域のみアクセス可能なのでしょうか?
0806デフォルトの名無しさん2014/11/21(金) 03:48:55.16ID:5L3ce8w2
当たり前だろ
0807デフォルトの名無しさん2014/11/21(金) 03:51:02.70ID:zGskniPq
>>806
何故ですか?
書くんじゃなくて、読むだけならいいじゃないですか?
0808デフォルトの名無しさん2014/11/21(金) 03:55:58.16ID:XqCFqcOo
>>807
意味のない値を読んで嬉しいか?
0809デフォルトの名無しさん2014/11/21(金) 03:58:02.58ID:zGskniPq
>>808
いや別に嬉しい嬉しくないというような個人の感想の問題では無くて、
読みだして誰か困るんでしょうか?
読み出せないようになっている理由を知りたいです。
0810デフォルトの名無しさん2014/11/21(金) 03:59:49.20ID:+Z/9Kx3Z
未割り当て領域を読むなんて頓珍漢なプログラムはそのまま動かしたら何が起こるかわからないから読んだらエラーでる
0811デフォルトの名無しさん2014/11/21(金) 04:01:58.86ID:zGskniPq
>>810
なるほど。
それはOSがそういう機能を持っているということですか?
実行したアプリが未割当領域を呼び出した時点でそれを
検出して実行を停止させるというような機能を。
それなら納得できます。
0812デフォルトの名無しさん2014/11/21(金) 04:04:36.63ID:XqCFqcOo
>>811
MMUでググれ
0813デフォルトの名無しさん2014/11/21(金) 04:06:15.60ID:XqCFqcOo
どのアドレスを読んでもエラーにしないことは出来るけどそんな事しても誰も嬉しくないからやらないだけ。
0814デフォルトの名無しさん2014/11/21(金) 04:08:51.89ID:zGskniPq
>>812
MMUは、OSがメモリを管理する時に使われるようなしくみ
ということは、なんとなく知っていますが、
今は、アプリが自分自身のアドレス空間をアクセスしたいわけですから、
その場合もMMUが、未割当領域いか否かをチェックして、
管理しているんでしょうか?
0815デフォルトの名無しさん2014/11/21(金) 04:21:19.09ID:+Z/9Kx3Z
そこまで行くとCスレよりも別のところで聞いたほうが早くて正確な答えがもらえると思う
0816デフォルトの名無しさん2014/11/21(金) 05:14:58.64ID:kxkPWKPJ
>>811
通常は32bitプロセスの場合は0x7fffffffまで、LAAフラグがセットされていれば0xcfffffffまでアクセスできる
それぞれ2GB、3GBだ
64bitプロセスの場合はOSによって異なるけどずっと広い

OSが常駐する物理メモリ領域を空けておかないといちいち仮想記憶が働くとスラッシングがひどくて使い物に
ならなくなるからだ

メモリマップトI/O領域は同じ論理アドレスでも異なる物理アドレスを指しているから問題ない
0817デフォルトの名無しさん2014/11/21(金) 07:30:05.11ID:hRQqxbac
>>814
Windowsの場合、アドレスが4KiBごとに分割され
それぞれ物理メモリのどこかに対応づけられていたり
スワップ領域のどこかに対応付けられている。
これは使用する領域だけで大部分は対応先の無いアドレスになる。
なので未割り当てのアドレスにアクセスすると落ちる。
正確にはCPUが発生させるイベントをWindowsが拾ってプロセスを落とす。
管理はオペレーティングシステムが行う
0818デフォルトの名無しさん2014/11/21(金) 08:00:57.25ID:R5E6cwET
> 0xcfffffff
なんか違和感あるbit列だが
そういうもんなんだっけ?
0819デフォルトの名無しさん2014/11/21(金) 08:09:55.07ID:zGskniPq
>>817
mallocやnewや変数、定数などで確保した領域は実メモリに実体が確保されるということでしょうか。
私はてっきり
0x00000000〜0xFFFFFFFF
までのどのアドレスでも、読み出せば初期化されていない値が入っていると思ったのですが、
そうではないんですね。
なんとなく分ってきました。
0820デフォルトの名無しさん2014/11/21(金) 08:20:17.03ID:iFQePu0O
いやまぁ、分かってないと思うけど。
でも、まぁいいか。
0821デフォルトの名無しさん2014/11/21(金) 09:10:33.76ID:FWzVUasR
>>819
環境による

というか、仮想記憶まわりを習得してからくるといい
0822デフォルトの名無しさん2014/11/21(金) 12:43:57.53ID:S1MzF4aW
>>809
1. メモリー空間に I/O デバイスがあるようなマシンでは、勝手に読み出されるとデバイスの状態が変わってしまうものもあるので、読んではいけない
2. メモリーやデバイスがない空間にアクセスするとメモリー等からの応答がなくハングアップするため、タイムアウトでエラーにするマシンもある
3. 管理していない領域にアクセスするようなプログラムはどうせ間違っているので早めに知らせる親切機能

>>818
0xbfffffff のことと思うけど、色々おかしいからそのレスはスルーでいい
0823デフォルトの名無しさん2014/11/21(金) 20:07:28.62ID:zGskniPq
>>820
かなり分って来たつもりなんですが、819の内容で、
どのあたりが分っていないように見えますか?
>>821
仮想記憶まわりは、だいたい分っているつもりです。
>>822
>1. メモリー空間に I/O デバイスがあるようなマシンでは、勝手に読み出されるとデバイスの状態が変わってしまうものもあるので、読んではいけない
>2. メモリーやデバイスがない空間にアクセスするとメモリー等からの応答がなくハングアップするため、タイムアウトでエラーにするマシンもある
上の1,2は一般的には正しいと思うのですがWindows7ではそんな心配は無いですよね?
>3. 管理していない領域にアクセスするようなプログラムはどうせ間違っているので早めに知らせる親切機能
そういう機能がWindows7にあるということで良いでしょうか?
0824デフォルトの名無しさん2014/11/21(金) 21:16:18.12ID:S1MzF4aW
>>823
> 上の1,2は一般的には正しいと思うのですがWindows7ではそんな心配は無いですよね?

ユーザープログラムなら普通は心配しなくていい
デバイスドライバとか作る人だと気にする必要があるケースもある

> そういう機能がWindows7にあるということで良いでしょうか?

そう言うこと
仮想記憶をサポートする OS は大抵その機能を持っている
0825デフォルトの名無しさん2014/11/21(金) 21:24:56.12ID:mR7VdkCX
PCIパスの製品はカーネルメモリ空間内にマッピングされているけど、アプリケーション空間内にマッピングされている訳では無い。

なお、アプリケーション=win32サブシステムのアプリケーションな
0826デフォルトの名無しさん2014/11/22(土) 06:23:30.95ID:18N8Upow
>>823
>どのあたりが分っていないように見えますか?

newしたときに確保されるのは実メモリでなく仮想メモリだ。
仮想メモリにアクセスした際に実メモリへの割り当てが透過的に行われるけど
断じて「new=物理メモリ確保」ではない。
その証拠に搭載メモリより多くのメモリをnewする事が出来る
0827デフォルトの名無しさん2014/11/22(土) 07:49:03.54ID:tLc6zRT6
ここって Windows Only なの?
0828デフォルトの名無しさん2014/11/22(土) 11:10:14.61ID:rrzuQBQt
別に仮想記憶は窓に限った話ではない
ゆニックスもライナックスもリンゴも同じ

親切機能って表現に大きなお世話という意味合いを感じるが、
プロセッサのメモリプロテクション機能は、原因箇所特定に寄与する有難いものだ


ところで、自分のプロセスの仮想記憶じゃなく、他プロセスのメメントモリを読み書きしたいんじゃないの?
0829デフォルトの名無しさん2014/11/22(土) 20:38:43.75ID:lo0ztgzP
pingテストにはどんな関数がいいだろうか?
0830デフォルトの名無しさん2014/11/23(日) 02:16:01.41ID:MIt+PTOI
>>829
http://msdn.microsoft.com/ja-jp/library/ms229713%28v=vs.110%29.aspx
0831デフォルトの名無しさん2014/11/23(日) 04:51:47.94ID:wESAxUXt
IpHelper
0832デフォルトの名無しさん2014/11/23(日) 05:15:33.10ID:Da0DiwLc
Visual Studio2013のC++で自作のプログラムをデバッガーでデバッグしていると
スレッド 0xc54 はコード 0 (0x0) で終了しました。
スレッド 0x1efc はコード 0 (0x0) で終了しました。
スレッド 0x1c64 はコード 0 (0x0) で終了しました。
みたいなのが、勝手に出力ウインドウに出るんですが、私のプログラムでは
サブスレッドを実行していないのですが、何でこういうメッセージがでるのでしょうか?
0833デフォルトの名無しさん2014/11/23(日) 05:34:48.34ID:gLhfEvRo
APIが内部でスレッド立ててたり
0834デフォルトの名無しさん2014/11/23(日) 08:03:43.87ID:D8Ghfy88
今これで勉強してます

新・明解C言語 入門編 大型本 ? 2014/8/11
柴田 望洋 (著)
http://www.amazon.co.jp/dp/479737702X


演習問題の解答が書籍の中には書いてないので誰かつくって!
旧版のは誰かがサイト作ってくれたんだけど、新版のはない
まぁ大体わかるんだけど、お手本あると勉強になるな〜・・と
0835デフォルトの名無しさん2014/11/23(日) 08:19:25.97ID:5M0zvydY
>>834
初心者じゃない人がそんな新しい入門書なんて持ってるわけないじゃん
0836デフォルトの名無しさん2014/11/23(日) 08:38:26.65ID:D8Ghfy88
きっと初心者じゃない人はがっぽり稼いでるから
この程度のはした金、どぶに捨てるがごとく払えるはずだよ
むしろもうお金をはらっているという感覚がない程度
すごすぎ!
0837デフォルトの名無しさん2014/11/23(日) 09:15:34.52ID:fFcgGO6W
>>836
荒らしは失せろ クズ
0838デフォルトの名無しさん2014/11/23(日) 10:55:26.91ID:fVyePvWV
>>834
わかんないの宿題スレで質問してあんたがまとめれば
0839デフォルトの名無しさん2014/11/23(日) 10:59:51.23ID:K4bM7kRY
>>834
宿題スレに投げればいい
0840デフォルトの名無しさん2014/11/23(日) 13:23:18.15ID:1B0EBCFb
クソ初歩的で、調べれば出てきそうな質問で申し訳ないんだけど
右辺値参照と移動セマンティクスに関する質問です

Class class::makeInstance_A(){
  Class instance();
  return instance;
}

Class class::makeInstance_B(){
  Class instance();
  return std::move(instance);
}

Class rInstance = class::makeInstance_A/B();

というコードがあるとして、Aの場合、rInstanceにはinstanceをコピー、
つまり異なるメモリ領域が確保され、instanceの領域は破棄。
Bの場合、rInstanceにはinstanceがムーブ、
つまりメモリ領域は同一でポインタの所有権のみが移動する。
という認識で合っていますか?
0841KUSO KOTE ◆unko./w.Osri 2014/11/23(日) 13:34:56.32ID:tffEMZrq
>>840
やや違います。
ローカルの変数には特別なルールがあって移動になります。
Class g_unko;
Class class::makeInstance_A(){
  return g_unko;//コピー

  Class instance();
  return instance; //ムーヴ★12.8p32

  Class instance2();
  return std::move(instance2); //ムーヴ
}

ついでにさらに特別なルールがあって、二つ目と三つ目は
ムーブもコピーも省略されることがあります。(12.8p31)
0842KUSO KOTE ◆unko./w.Osri 2014/11/23(日) 13:53:15.49ID:tffEMZrq
微妙に回答になってないな。
[関数<ローカル>]→(copy/move)→<テンポラリ>→(copy/move)→<rInstance>
の流れに於いて、
AもBも>>841の通り
[関数<ローカル>]→(move)→<チンポラリ>→(move)→<rInstance>
となります。
オブジェクトは別なのでアドレスは変わりますが
内部で持っているであろう大きな実データは所有権の移動になります。

補足として、オブジェクトの生成自体を省略する機能があり
AやBは
[関数<ローカル>]→(move)→<rInstance>
とすることが1998および2003年規格でゆるされており
Aに限ってはさらに
[関数<rInstanceに直接構築>]→(何もなし)→<rInstance>
と省略することが2011年規格で許されています。
0843デフォルトの名無しさん2014/11/23(日) 14:06:19.03ID:YQdbMQXk
この嘘つきめ
NRVOはISO/IEC 14882:1998からだ
(12.8 Copying class objects段落15)
0844デフォルトの名無しさん2014/11/23(日) 14:24:20.89ID:Da0DiwLc
bool型ってtrueとfalseしか表現できませんが、
true/false/undefinedみたいな3つの値を保持できる型は
ないのでしょうか?enum使うしか無いですか?
0845デフォルトの名無しさん2014/11/23(日) 14:26:35.19ID:fTQ9KYul
enumを使え
C++ならenum class
0846デフォルトの名無しさん2014/11/23(日) 14:32:24.60ID:Da0DiwLc
>>845
レスありがとうございます。
ちなみに、どういう名前が良いでしょうか?
お勧めが有りましたら教えて下さい。
bool3 なんておかしいでしょうか?
0847デフォルトの名無しさん2014/11/23(日) 14:50:09.41ID:1Nfd05K/
>>846
triad だったかな
enumで、equal(0)、little(-1)、greater(1)を定義して昔使ってた
1のスペルが長いから使わなくなったけど
0848デフォルトの名無しさん2014/11/23(日) 14:59:59.02ID:1Nfd05K/
書いたあとに思い出した
条件分岐のifで三分岐が書けないから、使いづらいよ
毎回switch使うとdefaultを書くはめになるから面倒臭い。

それでも今改めて検討するなら、positive negative agreeかな
0849デフォルトの名無しさん2014/11/23(日) 15:04:52.26ID:gdfAswf6
enum nullable_bool一択だろ
0850デフォルトの名無しさん2014/11/23(日) 15:20:55.05ID:Da0DiwLc
>>848

>条件分岐のifで三分岐が書けないから、使いづらいよ
どういう意味ですか?

if(b==positive)
else if(b==negative)
else if(b==agree)
else
とすればいいのではないですか?
ところで、agreeってどういう意味ですか?



>>849
レスありがとうございます。
>enum nullable_bool一択だろ
うーん、せっかくのアドバイスにケチ付けて申し訳ないですが、
ちょっと名前が長いなあと思います。出来ればもう少し短めでお願いします。
0851デフォルトの名無しさん2014/11/23(日) 15:24:24.13ID:JoMNOld1
https://www.google.co.jp/search?q=Boost.Tribool
0852デフォルトの名無しさん2014/11/23(日) 15:37:48.05ID:Utfzjpb0
>>851でも良いし、optionalでも良い
変なテクニックはコードも変になりがち
0853デフォルトの名無しさん2014/11/23(日) 16:01:14.92ID:oZ3ksEmx
triboolなんてのは名前の設計ミスだな。
triなのにboolとか意味不明だし
欠損状態とtrue/falseは対等じゃない。
目的でなく実装で名前を付けてしまった悪い例
0854デフォルトの名無しさん2014/11/23(日) 16:11:48.33ID:Utfzjpb0
名前はまあ置いといて、undefinedは欲しい時ままあるからな、
未初期化部分とか、最小値取る時に初期値をint.Maxにしてお茶を濁してる部分とか
0855デフォルトの名無しさん2014/11/23(日) 16:45:33.95ID:65N6pjsH
大抵の IC/LSI メーカーのデータシートには、tristate って書いてあるから、こんなところで吠えてないで訂正させてこいよ w
0856デフォルトの名無しさん2014/11/23(日) 16:49:23.08ID:65N6pjsH
>>854
C# だと bool? が使えて結構便利
0857デフォルトの名無しさん2014/11/23(日) 17:11:44.48ID:5M0zvydY
>>855
triなboolがどこに出てくるん?
0858 ◆QZaw55cn4c 2014/11/23(日) 17:17:53.21ID:K4bM7kRY
>>854
んー、そういうときは int.max ではなくて、データの1番目をいれるものだろう?
0859デフォルトの名無しさん2014/11/23(日) 17:22:10.96ID:Da0DiwLc
>>858
それだとundefinedにならないですよね?
0860デフォルトの名無しさん2014/11/23(日) 17:24:10.93ID:5M0zvydY
データが空の時とかな
0861デフォルトの名無しさん2014/11/23(日) 17:41:09.44ID:wsMb6fv6
tristate に一票
0862デフォルトの名無しさん2014/11/23(日) 18:33:54.34ID:pl8PYAOz
>>857
http://en.m.wikipedia.org/wiki/Three-state_logic
0863デフォルトの名無しさん2014/11/23(日) 19:09:16.93ID:5M0zvydY
>>862
だからどこにboolが出てくるんだよ
日本語わからないの?
0864デフォルトの名無しさん2014/11/23(日) 19:12:35.00ID:Da0DiwLc
八百長だな。それでいい。
0865デフォルトの名無しさん2014/11/23(日) 19:52:42.16ID:pl8PYAOz
>>863
中身読んだか?
読んでまだそんなこと言ってるなら、君には多分技術者としての素養がないよ。
0866デフォルトの名無しさん2014/11/23(日) 19:55:34.90ID:fEdSPzxK
読んだけど全く関係なかったな
>>865は設計はおろか、人とのコミュニケーションも難しいことだろう
0867デフォルトの名無しさん2014/11/23(日) 20:26:23.70ID:pl8PYAOz
>>866
true = Logic 1, false = Logic 0, undefined = Z (High Impedance) の対応もつけられないアホ w
0868デフォルトの名無しさん2014/11/23(日) 20:31:54.35ID:5M0zvydY
>>867
triboolって命名がダメって言ってる所にそれにかすってすらいない例を持ってきて人をアホ呼ばわりするアホ
0869デフォルトの名無しさん2014/11/23(日) 20:41:42.10ID:pl8PYAOz
>>868
表面しか見れないアホは要らんよ w
0870デフォルトの名無しさん2014/11/23(日) 22:49:33.48ID:QHZ/jO6T
boolにtriと言う形容詞はそぐわないという、ただそれだけのことで何を言っているんだ?
0871デフォルトの名無しさん2014/11/23(日) 22:55:35.63ID:x3sx5vaM
まあそう喧嘩すんなよ
triboolでもなんでもいいけど、個人的には3値とるならenum使えと思うよ
解りづらいしな
一生メンテする気がないなら他人がぱっと見でわかるコードにしておくのが無難
0872デフォルトの名無しさん2014/11/23(日) 23:11:00.89ID:1B0EBCFb
>>841,842
遅レスすみません、ありがとうございます
コンパイラはかなり賢いんですね
0873デフォルトの名無しさん2014/11/24(月) 00:10:46.55ID:G/tZ4hCG
binaryならともかくboolに2値なんて意味ないよ
0874デフォルトの名無しさん2014/11/24(月) 00:16:40.01ID:I0DBtIu0
真か偽の2値をとる基本型だと思っているし、この界隈一般でもそういう認識だと思ってたわ
後学のために詳しく教えてほしい
0875デフォルトの名無しさん2014/11/24(月) 00:16:57.90ID:ALHBj7yp
boolさんこんにちわ
酸性、アルカリ性、中性、両性のメタファーとして4値の真偽なんていかがでしょう
0876デフォルトの名無しさん2014/11/24(月) 00:25:01.30ID:buByWekP
>>873
それなら、!演算子の結果に悩むなw
0877デフォルトの名無しさん2014/11/24(月) 00:31:06.24ID:y8DryCQN
元になったbool代数が2値論理だよな
0878デフォルトの名無しさん2014/11/24(月) 00:32:48.39ID:jBEYKG9y
なあに、intだって真偽は0以外と0なんだ何とかなる
0879デフォルトの名無しさん2014/11/24(月) 00:32:59.83ID:VgrvAE4c
例えば何らかの情報を保持する構造体の中のメンバの一つに
bool型が有ったとして、その構造体に完全にデータを代入するまでは
bool型メンバーの値も未定なので、そういう場合にundefinedみたいな
状態があればいいと思うんですが、皆さんそんなことないですか?
0880デフォルトの名無しさん2014/11/24(月) 00:43:52.75ID:G/tZ4hCG
>>877
いいや、ブール代数は多値だよ。実質2^n値だけど
0881デフォルトの名無しさん2014/11/24(月) 01:03:31.94ID:ALHBj7yp
>>879
>>844
0882デフォルトの名無しさん2014/11/24(月) 01:04:41.19ID:ALHBj7yp
>>881の下の安価は>>856へのミス
0883デフォルトの名無しさん2014/11/24(月) 01:23:16.88ID:VgrvAE4c
>>882
C#のbool?をC++で使うにはどうすればよいでしょうか?
0884デフォルトの名無しさん2014/11/24(月) 01:26:49.71ID:y8DryCQN
>>883
boost.optional
0885デフォルトの名無しさん2014/11/24(月) 01:26:59.45ID:t3vESlZp
boost::optionalを使う
0886デフォルトの名無しさん2014/11/24(月) 03:30:49.42ID:eOmEBZPc
>>853-854
H/L/Hi-Z
の
tristate
が
しっくりくる
0887デフォルトの名無しさん2014/11/24(月) 08:11:59.50ID:/Xnwup+Z
>>870
まだ言ってるのか、理解力がないってかわいそうだな w
0888デフォルトの名無しさん2014/11/24(月) 08:21:36.74ID:WTWvjjrT
>欠損状態とtrue/falseは対等じゃない。
>目的でなく実装で名前を付けてしまった悪い例
 ↓
>tristate
>が
>しっくりくる

そうか、ならしゃーない。
かわいそうに
0889デフォルトの名無しさん2014/11/24(月) 08:56:23.58ID:/Xnwup+Z
>>888
> >tristate
> >が
> >しっくりくる

誰もそんなこと書いてないけど?
悪い電波でも受信したかな w
0890デフォルトの名無しさん2014/11/24(月) 09:23:19.32ID:UcDfBJd5
boolというのは、イギリスの数学者
で二値論理を作ったGeorge Booleの
ことでしょう?
Booleがboolになるのはどうしてですか
0891デフォルトの名無しさん2014/11/24(月) 09:34:10.88ID:G/tZ4hCG
>>890
Booleが形容詞的になったのがbooleanで、その省略形がbool
integerからintみたいなもん
0892デフォルトの名無しさん2014/11/24(月) 10:02:00.54ID:O1Ntu5SU
グーグルを略すとgoolになりそうだ。いやghoolか
グーグルに頼り、考えない人間は魑魅魍魎、死霊と同じだね(はあと)
などとは思っていない

思い付いただけ
0893デフォルトの名無しさん2014/11/24(月) 10:04:34.46ID:gIu/y3Pi
ねんまつ
0894デフォルトの名無しさん2014/11/24(月) 14:38:53.74ID:/I9QN6kR
マランツ
0895デフォルトの名無しさん2014/11/24(月) 18:30:37.50ID:VgrvAE4c
class B;

class A{
public:
//   B b;     //(1) error C2079: 'A::b' が 未定義の class 'B' で使用しています。
     B *pb;   //(2) OK
};

class B{
public:
   A a;
};

void main(){
   B b;
}
典型的な循環参照だと思うのですが、(1)でビルドすることは絶対に不可能でしょうか?
VS2013C++です。
0896デフォルトの名無しさん2014/11/24(月) 18:47:29.38ID:eOmEBZPc
class A;
class B;

class A{
public:
B b;
B *pb;
};

class B{
public:
A a;
};

void main(){
B b;
}
0897デフォルトの名無しさん2014/11/24(月) 18:51:38.30ID:VgrvAE4c
>>896
レスありがとうございます。さっそく試したのですが、
VS2013C++では、
error C2079: 'A::b' が 未定義の class 'B' で使用しています。
となります。
0898デフォルトの名無しさん2014/11/24(月) 18:54:51.55ID:t3vESlZp
不可能です
ポインタで持ちなさい
0899デフォルトの名無しさん2014/11/24(月) 19:06:15.00ID:VgrvAE4c
>>898
そうですか。不可能の理由はサイズが決められないからですよね?
でも、たとえばClassBのサイズを100バイトくらいと仮定して
ClassAを作ってみて、それで余ればBのサイズを少し減らして
調整すれば、原理的にはA、Bを最適なサイズに確保できると思うんですが、
間違っていますか?
コンパイラはそんな事しないんでしょうか?
0900デフォルトの名無しさん2014/11/24(月) 19:10:38.87ID:t3vESlZp
ClassAの中にはClassBがあるんだぞ
分かってるのか?
0901デフォルトの名無しさん2014/11/24(月) 19:16:51.59ID:2ztRFgH6
B b;のbと
b.a.bは別のインスタンスになるぞ
本当にそんなことがしたいのか
0902デフォルトの名無しさん2014/11/24(月) 19:21:08.49ID:VgrvAE4c
>>900>>901
ああ、そういうことですか
長年の疑問が解消しました。ありがとうございました。
ポインタにします。
0903デフォルトの名無しさん2014/11/24(月) 19:33:30.62ID:NFvfX/bb
>>902
絶対お前c#やらjavaから入っただろ
0904デフォルトの名無しさん2014/11/24(月) 20:34:31.39ID:VgrvAE4c
>>903
Basicです。
もう一つ教えて下さい。
class A{
public:
  int i;
};
class B{
public:
  A *pa;
};

A funcA(){
  A a;
  a.i = 100;
  return a;
}

B funcB(){
  B b;
  b.pa = &funcA(); // これは問題ないですか?
  return b;
}

void main(){
  B b = funcB();
  printf("i=%d\n", b.pa->i);
}
VS2013C++で実行したら100と表示されるのですが、この
プログラムに何か問題ありますか?
特に &funcA()の部分が自分でも良く分りません。適当に&を付けたら
実行できたのですが、問題無いですか?
0905デフォルトの名無しさん2014/11/24(月) 20:41:15.67ID:rmxUU+lC
適当に&つけたじゃなくてちゃんと勉強しろよ
そのオブジェクトはfuncBを抜けた時点で消滅してるから問題あり
0906デフォルトの名無しさん2014/11/24(月) 20:42:02.01ID:t3vESlZp
ダメに決まってんだろ
0907デフォルトの名無しさん2014/11/24(月) 20:46:42.95ID:VgrvAE4c
>>905
>そのオブジェクトはfuncBを抜けた時点で消滅してるから問題あり
やっぱり、そうですねよ。
>>906
funcBの中でnew Aして、そこにfuncA()の中身を代入するべきですよね。
それ以外に、スマートな書き方ありますか?
0908デフォルトの名無しさん2014/11/24(月) 21:02:01.20ID:dftsfJT8
>>907
生ポを使うな。
素人はスマポを徹底しろ。
0909デフォルトの名無しさん2014/11/24(月) 21:07:59.02ID:VgrvAE4c
>>908
アドバイス有難うございます。
私は生ポのほうが好きで、スマポというのは使ったことが有りません。
素人では有りません。馬鹿にしないでください。
0910デフォルトの名無しさん2014/11/24(月) 21:10:25.81ID:2ztRFgH6
循環参照に嵌ってた時点で素人だろう
適当に&つけたら動いたとかアホなこと言ってる時点でもな
0911デフォルトの名無しさん2014/11/24(月) 21:13:09.93ID:eOmEBZPc
class A;
class B;
class A{
B &rb;
B *pb;
public:
A() : rb(){}
};
class B{
A &a;
public:
B() : a(){}
};
int main(int ac, char **av)
{
B b;
return 0;
}
0912デフォルトの名無しさん2014/11/24(月) 21:20:34.82ID:TkA4SUlH
>>904
テスト
0913デフォルトの名無しさん2014/11/24(月) 21:21:32.17ID:t3vESlZp
>>911
参照に参照先が設定されてないからコンパイルエラーになります
0914デフォルトの名無しさん2014/11/24(月) 21:21:41.92ID:VgrvAE4c
>>910
素人ではありません。ちょっとした勘違いです。
>>911
サンプルありがとうございました。VS2013C++では、
IntelliSense: 参照の既定の初期化は使用できません
IntelliSense: 参照の既定の初期化は使用できません
error C2440: '初期化中' : 'int' から 'B &' に変換できません。
error C2440: '初期化中' : 'int' から 'A &' に変換できません。
error C2439: 'B::a' : 指定されたメンバーは初期化できません。
error C2439: 'A::rb' : 指定されたメンバーは初期化できません。
残念ながらビルド出来ませんでした。
0915デフォルトの名無しさん2014/11/24(月) 21:22:42.60ID:eOmEBZPc
>>913
class A;
class B;
class A{
B &rb;
B *pb;
public:
A(B &b) : rb(b){}
};
class B{
A &ra;
public:
B(A &a) : ra(a){}
};
int main(int ac, char **av)
{
A a(b);
B b(a);
return 0;
}
0916デフォルトの名無しさん2014/11/24(月) 21:24:54.95ID:t3vESlZp
>>915
>A a(b);
bはどのインスタンスだよ
0917デフォルトの名無しさん2014/11/24(月) 21:28:15.50ID:ALHBj7yp
素人ではありません、使ったことすらないのです
バカではありません、マヌケです
0918デフォルトの名無しさん2014/11/24(月) 21:31:27.67ID:VgrvAE4c
>>915
サンプルありがとうございました。
残念ながら、
error C2065: 'b' : 定義されていない識別子です。
となり、ビルドできません。
0919デフォルトの名無しさん2014/11/24(月) 21:36:57.08ID:7nGMfz2S
素人じゃ無いなら余計に質が悪いな。
今の理解だとスマポ使っても所有者以外にナマポで渡して、そちらでもスマポ作ってとか
ヤバイことしそう。
オブジェクト指向の概念を十分に理解した上で、unique_ptr,shared_ptr,weak_ptrの仕様と用法をなぜそうなっているのか理解できるまで、クラス設計は後回しにした方が身のため。
0920デフォルトの名無しさん2014/11/24(月) 21:37:58.70ID:ALHBj7yp
それfuncBの引数にBのインスタンス入れれば済むことだったりしないよな

>>915
LLかなにか?
0921デフォルトの名無しさん2014/11/24(月) 21:53:02.13ID:VEx2A02b
素人ならよかったのに……
0922デフォルトの名無しさん2014/11/24(月) 22:01:44.63ID:eiqZfCRw
>>917
久々にこの板で有意義なレスみたわw
0923デフォルトの名無しさん2014/11/24(月) 22:55:54.03ID:gw5zpG2I
いとかぐわしき事この上無し
0924デフォルトの名無しさん2014/11/24(月) 23:30:24.37ID:y8DryCQN
救いようがないな
0925デフォルトの名無しさん2014/11/24(月) 23:49:50.50ID:ik0PDj3i
>>915
救いようのない馬鹿が生ポ好きなのはわかったから
まずここから始めろ
http://ideone.com/P21Tmb

weak_ptrとか100年早い
0926デフォルトの名無しさん2014/11/25(火) 00:49:38.08ID:uMipTR6D
>>919
これぞ本当のナマポの不正受給ってやつだな
0927デフォルトの名無しさん2014/11/25(火) 08:19:31.66ID:3Ci+Pzd7
>>926
誰が上手い事を家といいましたか?
0928デフォルトの名無しさん2014/11/25(火) 08:28:03.33ID:UdE9jlSP
>>903
C#でも循環参照したらGCの対象にならないからちょっと違う
0929デフォルトの名無しさん2014/11/25(火) 08:32:59.22ID:UdE9jlSP
weak_ptrって、要はshared_ptrに対する参照だからな、
まずはインスタンスを保持するポインタがどれかを理解してからじゃないと
0930デフォルトの名無しさん2014/11/25(火) 08:43:19.72ID:HvA4xOWn
C#は循環参照してても、他からの参照が切れたらGC対象になるぞ
0931デフォルトの名無しさん2014/11/25(火) 08:48:17.73ID:CLbrlRsg
C#って知らんけど、他って何をもって他なの?
0932デフォルトの名無しさん2014/11/25(火) 08:52:36.35ID:HvA4xOWn
循環参照し合っているインスタンス以外ってこと

C#はルートオブジェクトから参照を辿れなくなったオブジェクトをGC対象にする仕組みだから
0933デフォルトの名無しさん2014/11/25(火) 08:53:43.04ID:UdE9jlSP
そうなのか、すまん、無知だった
0934デフォルトの名無しさん2014/11/25(火) 12:27:21.60ID:/9fLtCNp
抜け忍死すべし
0935デフォルトの名無しさん2014/11/25(火) 19:38:31.70ID:ljgVcsVa
>>932
>ルートオブジェクトから参照を辿れなくなったオブジェクトをGC対象

初耳です。
そのルートオブジェクトとは何なのか
詳しく教えてください。
0936やしきかがしん2014/11/25(火) 20:32:31.73ID:LEZt+yYG
やっぱ、すっきやねん(C++が)〜♪
やっぱ、すっきやねん(C++が)〜♪
0937デフォルトの名無しさん2014/11/25(火) 20:52:38.91ID:3Ci+Pzd7
C#は詳しくないが
たしか、スタティックや、ローカルに宣言したオプジェクトをルートオプジェクトと呼び、
そこから始まる参照をルート参照と呼ぶじゃなかったかな

取り敢えず、GC信者の福音って訳じゃない
0938デフォルトの名無しさん2014/11/25(火) 20:56:51.30ID:CLbrlRsg
なるほど、C++で実装するなら非newオブジェクトとnewオブジェクトでわけて
非newオブジェクトに辿りつけないnewオブジェクトが自殺する感じか
0939デフォルトの名無しさん2014/11/25(火) 21:21:47.41ID:FGvDDOcS
一般的にガベージコレクションはある瞬間に於いて
・どのクラスの静的変数からも辿ることができない
・どのスレッドの実行中関数のローカル変数からも辿ることができない
の二つの成立で回収される。

ここで、自身を静的変数につなぎ止め直す処理のデストラクター
を持つかどうかは考慮されない
0940デフォルトの名無しさん2014/11/25(火) 21:33:36.00ID:rPvMoqx2
生ポを自分で管理するほうが分り易くないですか?
0941デフォルトの名無しさん2014/11/25(火) 21:36:37.46ID:QlEjMTFr
私はクズ整理屋が嫌いでなぁ。
0942デフォルトの名無しさん2014/11/25(火) 21:55:12.18ID:fynCX/kt
>>939
mark and sweep方式な。

>>940
途中return、例外送出などでdelete書くの非常に煩わしいと思うんだけど
0943デフォルトの名無しさん2014/11/25(火) 22:19:06.72ID:Raj0M4wH
>>940
ものによるだろ。例えば業務システム開発で
・1日24時間365日フル稼働で1年間止まってはならない
・もし止まったら940は家族が一人殺される
・ソースコード規模は10万行
・ただしプログラム書くのは>>940じゃなくて>>940の部下
この条件でGC無しで行こうとする奴は勇気がある
0944デフォルトの名無しさん2014/11/25(火) 22:27:07.70ID:ZF5zgvJU
std::vector<Class> GlobalObject;

function(Class* pointer)
{
GlobalObject.push_back();
}

push_back()を実行すると クラスポインターの示してる値が変わるんだけど原因は何でしょうか?
0945デフォルトの名無しさん2014/11/25(火) 22:30:55.79ID:9d8G7Mns
>>944がお疲れのため
0946デフォルトの名無しさん2014/11/25(火) 22:40:23.25ID:ZF5zgvJU
>>945
確かに疲れているかもです

見間違いでした。

変更されるのは、クラスポインタの値ではなく

クラスポインタが示すオブジェクトのメンバ変数の値が変わっていました。

-175256356.... みたいなあり得ない値に変更されていました。
0947デフォルトの名無しさん2014/11/25(火) 22:46:23.68ID:9d8G7Mns
>>944
http://ideone.com/q0Pvyn
こういうことだな。

もしこれと違うならメモリ破壊を疑った方がいい
0948デフォルトの名無しさん2014/11/25(火) 23:35:10.06ID:HvA4xOWn
>>940
出したものは"必ず"片付ける。例外無し!
誰しもそれが当たり前で、確実に出来るんだったらいいけどさ。

GCというのは、使い終わったのをポイッと手放すだけで、
掃除機がいつの間にか片付けてくれるんだよ。
0949デフォルトの名無しさん2014/11/26(水) 03:31:06.56ID:WCMEKjWn
shared_ptrはあんま使わんな
共有するclassはそれ毎に独自GC管理class作ってるわ
一元管理してるから再利用しやすい
0950デフォルトの名無しさん2014/11/26(水) 03:55:47.24ID:l/cGeknv
つBoost.Pool
0951デフォルトの名無しさん2014/11/26(水) 04:36:03.25ID:WCMEKjWn
再利用するためにおなじもの見つけたり再利用のために解放数分遅らせたり独自のほうが使いやすい
つかそれがマイテンプレートライブラリでコード使い回し
0952デフォルトの名無しさん2014/11/26(水) 08:25:44.93ID:7CQDlMk8
>>943
なにその条件、極論だろとは思えず、至極普通な最低条件だから困る
0953デフォルトの名無しさん2014/11/26(水) 08:33:40.65ID:L6p97yKn
普通に家族が一人殺されるのか(驚愕)
0954デフォルトの名無しさん2014/11/26(水) 09:41:59.46ID:Y5jv1E1S
一番困るのは、GCあるからメモリリークは無いです(断言)
と心から信じていて、循環参照だかグローバル参照だかで
リークさせてるバカ
0955デフォルトの名無しさん2014/11/26(水) 10:03:58.78ID:dntXOEXZ
>>953
自分自身を家族のひとりとしてカウントするならなんだかんだありそうな気がする
0956デフォルトの名無しさん2014/11/26(水) 12:38:39.38ID:DgWOX6ki
>>943
この条件でノー天気に CG 信じられる奴が羨ましいわ w
0957デフォルトの名無しさん2014/11/26(水) 12:39:36.09ID:DgWOX6ki
たいぽった CG → GC
0958デフォルトの名無しさん2014/11/26(水) 12:51:11.92ID:vRGIjOgX
GC使ってもリークさせるようなやつがナマポをまともに管理出来るとは思えないが、逆はあるかもしれないと言う意味でGCある方が安全だろ。
0959デフォルトの名無しさん2014/11/26(水) 12:53:51.47ID:vRGIjOgX
つーかそれぬきでもナマポはありえん。
ナマポ使うやつ途中で例外出てもリークしないようになってるか?
0960デフォルトの名無しさん2014/11/26(水) 13:47:51.53ID:GB07jGa2
例外出るとプロセス毎再起動しますが?
0961デフォルトの名無しさん2014/11/26(水) 14:26:54.83ID:l/cGeknv
そういう仕組み作れば
0962デフォルトの名無しさん2014/11/26(水) 17:07:51.26ID:PbLBjk0R
>>944です。
http://ideone.com/ylIKrs
不十分なソースでしたので汚いソースですが書いてみました。

関数funで push_back()後のvalの値がなぜ0になるのか教えていただけないでしょうか。
0963デフォルトの名無しさん2014/11/26(水) 17:14:10.02ID:B90JxfI9
まあ個人でやる小規模なプログラムなら生ポでも自力で管理できるかもしれないけどさ
複数人で開発したり、個人でもある程度の規模になったらGC使わないと厳しいだろ
0964デフォルトの名無しさん2014/11/26(水) 17:34:36.85ID:dntXOEXZ
>>963
GCじゃなくスマートポインタでもいいんじゃないかな。
0965デフォルトの名無しさん2014/11/26(水) 17:41:29.74ID:4+IZANOn
>>962
push_back()でメモリの再確保が行なわれたため
それ以前のvectorの要素へのポインタは無効になる
0966デフォルトの名無しさん2014/11/27(木) 08:48:59.26ID:2R7FVY88
>>963
大規模開発は、ダイナミックなメモリアロケーションを禁止するだろ。
それが出来ないからJAVAは嫌われる。
有限のリソースを使いきるまで使うより、上限を定めて稼働させてしきいに達したら警告、上限で落っことした方が運用しやすく、調整しやすく、復旧しやすい。

無制限のリソースを利用したがるプログラムとは、要件設計者の怠惰だと思うよ
0967デフォルトの名無しさん2014/11/27(木) 09:12:38.34ID:wnS1kX6P
何その大規模開発
そういう要件があるのは否定しないけどさ、それが唯一みたいな言い方すんのどうなん?
0968デフォルトの名無しさん2014/11/27(木) 09:25:15.07ID:4bCHH5yg
サーバサイドでC++開発にかかわった事あるが、プロセスの使用メモリをウォッチして、
使用量が減らなかったり、緩やかに、それこそ日単位でゆっくり増え続けてたりしたらメールでメンバに飛ばすようにしておいて、
bad_alloc予想日付計算して、その日までに稼働率の低い時にバグフィックス版に置き換え、みたいな事やってたな。
0969デフォルトの名無しさん2014/11/27(木) 09:33:58.13ID:6VTT5nov
マジ?すげえw
0970デフォルトの名無しさん2014/11/27(木) 09:45:07.39ID:vRuUOYe5
>有限のリソースを使いきるまで使うより、上限を定めて稼働させてしきいに達したら警告、上限で落っことした方が運用しやすく、調整しやすく、復旧しやすい。

firefox さんのこともっとdisってあげてくだしあ
0971デフォルトの名無しさん2014/11/27(木) 09:47:58.84ID:vRuUOYe5
>>968
毎日 Apache 再起動するのが一番安直かつ確実な対策だったというオチまで付いたわ
0972デフォルトの名無しさん2014/11/27(木) 09:56:19.51ID:5OfvJX0B
>>971
OSは何?
0973デフォルトの名無しさん2014/11/27(木) 10:19:27.99ID:4bCHH5yg
>>971
確かに原因見つけるまではそんな感じだったなw
0974デフォルトの名無しさん2014/11/27(木) 12:30:46.57ID:cuJ5rv8l
>>967
一般的にと言うことだろ
まあ、上限に達したら落とすとか普通は許されないけどな w
0975デフォルトの名無しさん2014/11/27(木) 12:45:27.01ID:cuJ5rv8l
>>972
Windows じゃね?
非 Windows で MaxRequestsPerChild 知らんとか終わってると思うし。
0976デフォルトの名無しさん2014/11/27(木) 14:18:10.96ID:QnPNQERt
Firefoxのメモリリークはほんと酷い
一日三回くらい再起動してる
0977デフォルトの名無しさん2014/11/27(木) 19:04:52.00ID:2R7FVY88
>>974
まあね
落ちたら内部からも袋叩き。
2ちゃんでまた障害と言われる訳だね
いい加減、オラクルは自動でトランザクションをリランしろと
リナックスのオラクルはバグ大杉
0978デフォルトの名無しさん2014/11/27(木) 23:10:24.54ID:YHce4I76
> 毎日再起動
昔はWindows自体そんな扱いだったような…

>>975
共有メモリとか、稼働中のモジュールを0にすることに意味があるんだとしたらそれではダメな場合もあるんじゃね?
>>976
Chromeはリークリーク言われてるけど、レンダリングプロセスを定期的に全滅させれば相当持つんだよなぁ…
>>977
高い金払ってるんだろうからそこはオラクルに直させようぜ
0979デフォルトの名無しさん2014/11/27(木) 23:41:43.48ID:7MU1hacI
まwindowsには49日deathなんてのもあったからなぁ
0980デフォルトの名無しさん2014/11/28(金) 02:25:25.60ID:8rikF3wo
>>979
今でもアプリケーションレベルではたまにあるよ。符号付きで見てて25日で問題出す奴もいる。

IE8でJavaScriptのsetTimeoutの予定時刻が起動から49日以上だと0秒扱いになる環境もあったな。
(逆に即タイムアウトする秒数を調べて、該当環境の連続稼働時間を見積もれる場合がある)
0981デフォルトの名無しさん2014/11/28(金) 04:56:00.89ID:BzFzdO6B
>>978
>Chromeはリークリーク言われてるけど、レンダリングプロセスを定期的に全滅させれば相当持つんだよなぁ…

Chromeはタブ毎にプロセスが分かれてるのが大きい

firefoxはシングルプロセスシングルスレッドで親亀こけたら皆こけるから糞
0982デフォルトの名無しさん2014/11/28(金) 11:00:19.70ID:leaE7DCy
あ
0983デフォルトの名無しさん2014/11/28(金) 12:56:39.33ID:Kneo5h4m
スレチ
0984デフォルトの名無しさん2014/11/28(金) 18:32:11.79ID:B+LAgn9V
次スレはよ
0985デフォルトの名無しさん2014/11/28(金) 21:56:02.95ID:QcGoPiaz
次スレ
http://peace.2ch.net/test/read.cgi/tech/1417179292/
0986デフォルトの名無しさん2014/11/28(金) 22:31:29.58ID:pEhfczy3
うめ
0987デフォルトの名無しさん2014/11/28(金) 23:10:58.60ID:E/QvI1Jv
低脳がC・C++を使うとメモリリーク等の色々問題起こすよな
でも世の中の大多数は低脳だしね
0988デフォルトの名無しさん2014/11/28(金) 23:42:17.83ID:8rikF3wo
C/C++に限らんと思う
0989デフォルトの名無しさん2014/11/29(土) 00:59:39.55ID:tqE5jCC5
低脳が玄翁使うと指叩いたり等の色々問題起こすよな
0990デフォルトの名無しさん2014/11/29(土) 02:27:08.95ID:qtzzkgpz
GC程度では低脳は救えんよな。
0991デフォルトの名無しさん2014/11/29(土) 08:16:56.77ID:VBQ2wmG1
うめ
0992デフォルトの名無しさん2014/11/29(土) 09:08:43.14ID:TOiOa/Ze
だ
0993デフォルトの名無しさん2014/11/29(土) 11:22:38.86ID:IKUaO2mT
常駐プロセスやドライバでもない限りメモリリークが問題に
なるのは余程の無能(低能ですらない)でない限り無理だろ?
0994デフォルトの名無しさん2014/11/29(土) 11:24:54.93ID:r+/3cWk0
日本語でおk
0995デフォルトの名無しさん2014/11/29(土) 12:11:48.25ID:v9PxAgfu
通訳しますと
ブラウザがメモリリークしても、ブラウザだけ再起動すればすむ話ではないでしょうか?
と言いたいのだと思います。

だが、スマフォだとメモリが少ないからリークが酷いとソシャゲプレイ中にブラウザを何度も再起動するはめになるから、ヤダーと彼らは訴えたいのだと思います。


アイマスがブラゲかプゲラかは知らないけれど、カード引いてライトが回っている時に落ちるといやなんだろう


てか業務時間中にカンコレやんなカスドも
0996デフォルトの名無しさん2014/11/29(土) 12:14:27.90ID:TOiOa/Ze
だってビルド中暇ですし
0997デフォルトの名無しさん2014/11/29(土) 19:40:17.30ID:H7nG43zB
>>991
次スレ立ってねぇのに埋めんなボケ
0998デフォルトの名無しさん2014/11/29(土) 19:43:17.67ID:H7nG43zB
次

【初心者歓迎】C/C++室 Ver.94【環境依存OK】(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1417257762/
0999デフォルトの名無しさん2014/11/29(土) 19:51:30.59ID:8ToAVulJ
うめ
1000デフォルトの名無しさん2014/11/29(土) 19:52:57.62ID:8ToAVulJ
千
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。