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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 22:58:02.60 ID:dU5z27As.net]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

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

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1469177649/

488 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:15:37.70 ID:JF3nU8GT.net]
生成出来ないクラスってやつね。

489 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:50:10.15 ID:33+Wu0JT.net]
>>479
friend なクラスからしか生成しないようにするとかはあるね

490 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:52:15.77 ID:JF3nU8GT.net]
はい そゆ事。

491 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:53:15.53 ID:0FbQfq3V.net]
staticメソッドで生成するって形の時に使うことが多い
singletonとか

492 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 22:20:39.38 ID:v0zRNZ3l.net]
ctorはpri.でメンバーはpub.って
どういうことなんだ?

493 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 22:26:42.14 ID:I6Uc1mEc.net]
一つ前のレスも読めない文盲

494 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 22:44:21.27 ID:SD8t1ALL.net]
質問
C/C++でランタイムで現在のメモリの状態
とくにプロセスが使える余っているメモリの量って調べ方はありますか?

495 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 08:45:12.70 ID:SswDvM4l.net]
環境すら書かないと言うことは
(実質)環境非依存での方法を聞いてるんだろうな?

496 名前:デフォルトの名無しさん [2017/02/24(金) 08:54:02.15 ID:See/JzpM.net]
そんなもん無いけどな



497 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 09:53:13.79 ID:0sr6h+Re.net]
失敗するまでmallocやnewを繰り返せばええんや

498 名前:デフォルトの名無しさん [2017/02/24(金) 10:43:32.63 ID:See/JzpM.net]
>>488
Linuxじゃ失敗しないよ

499 名前:デフォルトの名無しさん [2017/02/24(金) 10:53:37.11 ID:See/JzpM.net]
もたろん割り当てるアドレス空間自体が足りなくなったとか、予め上限を設定しておいたとかいうケースは覗いてな

500 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:09:14.16 ID:9xRtAprE.net]
16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。

それはわかる。

逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?

501 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:41:21.86 ID:KhjrQy0g.net]
基本的にでっかくメモリ確保というプログラムは作った事がないな。
今はSTLでほげほげ追加してくイメージ。

502 名前:デフォルトの名無しさん [2017/02/24(金) 11:47:17.85 ID:See/JzpM.net]
>>491
>16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。
そうとは限らない。一般的なLnuxの環境依存ではmallocを搭載メモリ以上行っても失敗しない
swap含めて1GBしか積んでいない環境で2GB分malloc可能。確保した領域に書き込んだタイミングで記憶する領域が足りなくなったら色々なプロセスが殺される。oom killerと言われてるもの。
>
逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?
実装による。現代的なコンピューターではページ単位(4KB)とかでカーネルからプロセスへすきなアドレスへメモリを割り当てられるから物理的なアドレスが連続している必要はない。
プロセス内に連続したアドレス空間が残っていない場合は失敗する

503 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:52:16.13 ID:NAh96dM2.net]
仮想メモリというしくみで色々やってくれるようになって
キャパの限界付近ではややこしくなった印象

504 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 12:48:55.46 ID:KhjrQy0g.net]
家鯖は6G積んでるけどそれぐらいは行けるね。
てかkvmやってると、9Gコミットされてるもん。

505 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 15:10:06.50 ID:CcmE3pWB.net]
>>488
それスワップエリアのサイズ計ってるだけ

506 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 15:25:25.94 ID:nwaeFCKh.net]
winならGetProcessMemoryInfoなど



507 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 17:26:32.84 ID:9xRtAprE.net]
>>493
> 物理的なアドレスが連続している必要はない
なるほど、長年の疑問が解消した。
493の読解力に感謝。

508 名前:デフォルトの名無しさん [2017/02/24(金) 18:02:34.91 ID:See/JzpM.net]
>>498
望む答えだったみたいで良かったわ
熱があって若干朦朧とした頭で読み返さずに書き込んだから今読み返すと誤字とか予測変換で要らない単語入ってたり(一般的なLinux環境)とか、カッコの位置が違う(4KBとかの部分)とかあったけど。

509 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 18:52:48.08 ID:dfRROZm/.net]
環境依存ならPostMessageのエラーコードかな
俺はあんま理解してないけど

510 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 19:06:57.61 ID:+aOqx8nq.net]
Win32なら信頼のPostMessageだな

511 名前: ◆QZaw55cn4c mailto:sage [2017/02/24(金) 22:16:12.34 ID:4ewDjGBZ.net]
またその話題ですか‥

512 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 23:03:49.77 ID:TLhS+9k8.net]
はよ10年前のソース出せよ

513 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 23:06:00.45 ID:nwaeFCKh.net]
i.imgur.com/OwlfgGw.jpg

514 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 07:21:27.70 ID:98TUEskp.net]
なんで2分ちょいで出てくるかね。

515 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 08:14:13.74 ID:QoR/O5Qa.net]
自演

516 名前:504 mailto:sage [2017/02/25(土) 08:21:08.89 ID:Jm21gNIW.net]
>>503>>504 だ。すまんなw



517 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 18:42:59.30 ID:stmjd5mD.net]
味噌県のクセにコーミソース以外のソースを使う非国民は去れ

518 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 07:57:48.79 ID:NqblWJNK.net]
#define ChannelBlend_SoftLight(A,B) ((uint8)((B < 128)?(2*((A>>1)+64))*((float)B/255):(255-(2*(255-((A>>1)+64))*(float)(255-B)/255))))
このマクロの
(2*((A>>1)+64))
この部分なんですが
なんで(A+128)じゃないんですかね?

519 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 08:21:33.22 ID:1XvIZqGa.net]
最初の人がコピペで作ったんでしょ。+128に定義し直してるのもあるよ

520 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 08:30:32.82 ID:cJfBjMIV.net]
Aが奇数のときの動作が違うね

521 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 10:33:08.69 ID:NqblWJNK.net]
A、Bにはuint8を想定してますから、一瞬オーバーフローの関係かなとも思いましたが
そんなことはなく、特に深い意味はなさそうですね
ありがとうございます

522 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 00:19:03.26 ID:ZWBqluXH.net]
仮想関数をオーバーライドするときはどう書くのがいい作法?
void vf()
virtual void vf()
virtual void vf() override
void vf() override

523 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 06:06:33.92 ID:IkDDkkqX.net]
ハゲ先生によると最後の void vf() override が良いみたい。
『プログラミング言語C++ 第4版』p.592

加えてoverride指定の不整合をチェックするコンパイラオプションだね。
GCCのVersion 5から使える -Wsuggest-override とか。
他のコンパイラについては知らん。

524 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 10:43:38.74 ID:Kr7xjXLG.net]
デストラクターに付けてる人はあんま見たこと無いな
class Derived : Base {
public:
 ~Derived() override {}
};

525 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/13(月) 20:30:08.38 ID:VNPYsRzK.net]
Bcc55でtypeofを実現するのは不可能なのかな?

526 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/13(月) 20:57:04.03 ID:VNPYsRzK.net]
古いコンパイラを使ってる人居る?
コンパイラの名前教えて下さい。



527 名前:デフォルトの名無しさん mailto:sage [2017/03/14(火) 23:30:09.48 ID:wzywZVIy.net]
老人がカセットテープデッキ求めたり
熟女モノのエロ本()を求めるような感じ?

528 名前:デフォルトの名無しさん mailto:sage [2017/03/15(水) 01:04:07.22 ID:R2Ueow1p.net]
古いコンパイラと自覚しつつも使ってるような人はこのスレには来ないだろ
時代遅れの遺物の話じゃ通じないし

529 名前:デフォルトの名無しさん mailto:sage [2017/03/17(金) 11:46:00.03 ID:pwo5j4El.net]
何でA、Bを()しないんだ?

530 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 21:37:15.77 ID:IRaGixDk.net]
いまだに関数マクロ使ってるようでは
()したところで五十歩百歩

531 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 22:37:56.47 ID:9zWIhzFx.net]
>>460
>>465
宣言とかいろいろ確認してやっぱソースはおかしくないよねってことで
サポートに調べてもらったら理由はわからないけど正しく動作する修正方法がわかったって連絡があって
最終的には詳細は書けないけどコンパイラのバグだった

532 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 08:58:38.45 ID:4rESVRzB.net]
ここはお前の日記を垂れる場所じゃない
「サポートによるとコンパイラのバグだった」で済むのに
アレやってコレやってを書くな低能

533 名前:デフォルトの名無しさん mailto:sage [2017/03/27(月) 10:03:34.57 ID:wSWIgauQ.net]
事後報告あると参考になっていいんだけどな
今回は本人以外に状況がわからないから事後報告されてもw

534 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 03:06:01.35 ID:6sTQLdA2.net]
codepad.org/KMQH3TsZ

ポインタをメンバに持たせた場合のget/setの書き方が分かりません
getの方は、ポインタを返すときに返した先で値を変えられないようにconstを付けたのですが、
sizePlus10のような関数を呼びたい場合に、const_castを付けて呼ぶことになってしまいました
値の変更をするのでsetを通してやるのが良いと思うのですが、何か良い書き方ありますか?

また、setの方は、一括で設定させることはできるのですが、
data->id、data->sizeの値を個別に設定したい場合、何か良い書き方はありますか?
コメントの部分のようにsetメンバ関数を何個も書く方法しか思いつきません

535 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 07:50:43.79 ID:GtG5BmiK.net]
getDataの結果を修正したいのだから
杓子定規にgetDataの戻りにconst付けるのを止めればいいのではないか

そう言えばC++17(ドラフト)もstring::dataの戻りが非constに修正されたような

536 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 08:08:59.00 ID:KJlpKUaR.net]
memcpy w



537 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 10:48:22.67 ID:JHpE2Dpf.net]
>>525
一般論として形でただ覚えるのではなくて意味を理解しよう
理解があやしいから設計の一貫性がなく混乱してるようにみえる
・Dataをポインタで所有するのはなぜ
・ゲッター/セッターを使ってアクセスするのはなぜ
・ゲッターで返す値にconstをつけるのはなぜ
・sizePlus10がData*を受けとるのはなぜ

MyClassの設計方針にあわせるならsizePlus10をDataではなくMyClassを受けとるようにして
void sizePlus10(MyClass & mc)
{
Data newdata = { mc.getData()->id, mc.getData()->size + 10 };
mc.setData(newdata);
}
あるいは別の関数を作って
void MyClassSizePlus10(MyClass & mc)
{
Data newdata = *mc.getData();
sizePLus10(&newdata);
mc.setData(newdata);
}

これが変だとか非効率だとか思うなら
MyClassの設計が要求にあってないのでそっちを変更する

538 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 20:11:34.52 ID:irpIFLVN.net]
>>528
おまえは質問の意図を理解しよう

>>525
そのsetgetでいいんじゃない?ただそのgetは俺だったらreferにするな
ついでにsetget両方使えるようにdata* operator->()みたいなの実装かな。というかむしろそっちでアクセスする方向にするな
あとはattachdetach作っておいてm_dataを置換できるにようにしちゃうな
その手のスマートポインタは至るとこで使われてるからこんなとこで聞かずにどっかのライブラリの参考にしたら?

メンバのコピーはpragma pack1でstructしておいてmemcpy

539 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 23:27:09.74 ID:O3+3nsIM.net]
>>529
>メンバのコピーはpragma pack1でstructしておいてmemcpy

それをすると何がいいことあるのか?

540 名前:デフォルトの名無しさん [2017/03/30(木) 23:45:25.72 ID:s+CP+YQd.net]
こういえクソみたいな方法を自慢気に語り出す奴が居るところかC++の最もクソな所だよね

541 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/30(木) 23:51:55.55 ID:2hi+y029.net]
デフォルトコピーコンストラクターとか構造体代入とか知らないんだろう。

542 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 00:14:17.76 ID:5j4NF4+Z.net]
>>532
>構造体代入とか知らないんだろう
ほうほう、それは何ですか?

543 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 01:59:49.12 ID:OFYzpq31.net]
やべえなおい糞コードの臭いがプンプンしやがるぜ

544 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 02:09:29.70 ID:DQgqVTGo.net]
>>526-529
ありがとうございます

今まではとりあえずget/setを書いてgetにはconstを付けとけば良いみたいな認識でしたが、
想定されるクラスの使われ方に合わせて適宜変更するべきでした

MyClassのようなget/setの分け方をすると、
sizePlus10のような関数やsetで不便になってしまうので、
constを付けないget/set共用のものにしてそれを通してアクセスさせるのが適切でした
( getData()でアクセスする場合、Data * const getData() const { /**/ } みたいな )
とても参考になりました

545 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 11:52:48.85 ID:xItn/dk+.net]
>>531
くそじゃない方法をおしえて

546 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 12:09:56.69 ID:c13jjk6+.net]
C#じゃないからないでしょ



547 名前:デフォルトの名無しさん [2017/03/31(金) 13:26:56.75 ID:CbPadW0u.net]
>>536
コピーは=使え
というだけの話

548 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 13:38:11.94 ID:2wgHKgmk.net]
>>529
> メンバのコピーはpragma pack1でstructしておいてmemcpy
これ俺も理由知りたい

549 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 17:24:06.64 ID:tvggMnLQ.net]
typedef struct MY_STRUCT
{
int ch;
} MY_STRUCT;

MY_STRUCT a,b;
a.ch = 0;
b = a; //代入できる

550 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 19:17:35.19 ID:Xv9Etv1i.net]
>>529
> おまえは質問の意図を理解しよう

なんか無駄に上から目線だなぁ
って思ったら

> メンバのコピーはpragma pack1でstructしておいてmemcpy

単なる老害だったでござる

551 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 19:19:25.80 ID:tvggMnLQ.net]
構造体の代入ができなかったのは大昔のことだ。

552 名前: ◆QZaw55cn4c mailto:sage [2017/03/31(金) 19:35:02.95 ID:BClOXWeK.net]
>>540
それ,K&R1 から堕落したよね

553 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 19:40:25.86 ID:tvggMnLQ.net]
構造体定義を#include <pshpack1.h>と#include <poppack.h>で囲むのは、スピードよりもメモリー効率を優先するときにする。

554 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 19:44:56.93 ID:tvggMnLQ.net]
あるいは構造体のレイアウトを分かりやすくするときにパッキングを指定する。

555 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 19:46:22.60 ID:tvggMnLQ.net]
>>543
堕落ではない。進歩だ。

556 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 19:49:13.63 ID:RKtYGe+y.net]
> スピードよりもメモリー効率を優先するときにする
20年くらい前まではそういう老人もいたね
今はメモリレイアウトを固定したい時にしか使わないけど



557 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 19:58:28.84 ID:tvggMnLQ.net]
#pragma 直接指定は礼儀が悪い、昔のやり方だ。

558 名前:デフォルトの名無しさん [2017/04/01(土) 02:25:44.35 ID:m99QLuku.net]
メモリ効率だけの問題なら大抵の場合は順番入れ替えるだけで問題ないしな

559 名前: ◆QZaw55cn4c mailto:sage [2017/04/01(土) 07:47:47.79 ID:1ZzXEpHO.net]
>>546
サイズが無限にのびるかもしれないものをコピーするなんてだめだよ
昔はね,構造体はポインタを介してしかつかえなかったんだよ

560 名前:デフォルトの名無しさん mailto:sage [2017/04/01(土) 08:31:33.23 ID:AOt54aKT.net]
そうそう
スタックに自動変数とかも言語道断
全部staticじゃなきゃね

561 名前: ◆QZaw55cn4c mailto:sage [2017/04/01(土) 13:26:49.84 ID:1ZzXEpHO.net]
>>551
スタックに自動変数はあたりまえだよ‥static おじさん,じゃないつもりなんだが‥
構造体はポインタで扱うべきもので,実体をコピーするのはなるたけ避けたいね
C++ では void f(const C &arg) って,可能ならば const と参照の縛りをできるだけいれるよね,余計なコンストラクタを走らせないために

K&R1 は教育的な配慮に優れた実装だと思うんだ‥

562 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 14:13:23.32 ID:SQNmFUeK.net]
SOCKADDRが一言

563 名前: ◆QZaw55cn4c mailto:sage [2017/04/02(日) 17:06:04.34 ID:XkKG9LQx.net]
>>553
手元のソースをみると
clientSocket = accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen);
とか
if (connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof(destSockAddr)) == SOCKET_ERROR) {
とか,構造体のポインタを渡しているね
由緒正しき Berkeley socket では,構造体をコピーするなんて教育的ではない書き方は許していないよ

564 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 17:31:42.61 ID:QFdfGGyb.net]
つまり>>553はK&Rおじさんにも劣る存在

565 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 18:21:59.15 ID:XkKG9LQx.net]
K&R1 おじさん,と
K&R2 おじさん
は区別したまえ,若造

566 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 19:26:19.28 ID:QFdfGGyb.net]
どっちも時代遅れの老人でしょ
K&Rなんて昔存在したという噂でしか知らない
万葉集とか古事記みたいなもの?



567 名前:デフォルトの名無しさん [2017/04/02(日) 20:22:15.39 ID:II71H9Zi.net]
func1(a, b)
  int a;
  long b;
{
}

568 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 22:22:37.63 ID:JMz4l+Qd.net]
> &destSockAddr,
> sizeof(destSockAddr)

由緒正しきBerkeley Socketも昔はこういう書き方したな
コイツは進歩が20年前で止まってるのか
今この書き方する奴は死刑でいい

569 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 23:11:21.74 ID:zmcqSa2a.net]
便乗で申し訳ないが、値渡し、参照渡し、ポインタ渡し、の話で
ポインタ渡しといっても、C++の場合はナマポは嫌われて、スマポを使いましょう
ってことになっていると思うんだけど、これはどう渡すのが普通?
スマポを値渡しするのか、参照渡しするのか
はたまたスマポを剥いで、ナマポで渡すのか
個人的に統一しきれないっつーか
所有権やら生存期間やらリソース管理やらが関係してくるなら
スマポで渡すI/Fじゃないとまずいだろうし
逆にそういうのが関係ないなら、スタック上の自動変数を渡したいとかも考えると
ナマポで渡すI/Fのほうが都合が良かったり、どーなんだろ
一度ナマポに戻すと二度とshared_ptrに変換できないって制限がね
言語側でなんとかせずに、ライブラリで解決しようとした弊害かな
ちょうどよいバカよけなんかも知らんが

570 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 23:13:25.39 ID:6tq4Ne3Z.net]
参照一択

571 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 23:24:57.32 ID:xNqaI0VS.net]
>スマポを値渡しするのか、参照渡しするのか
>はたまたスマポを剥いで、ナマポで渡すのか
スマポの値渡しと生保は使い分けが必要だが、スマポの参照渡しだけはアホの所業。
とスコットメイヤーが言っていたような

572 名前:デフォルトの名無しさん [2017/04/02(日) 23:43:46.05 ID:yhAnz0vw.net]
>>560
shared_ptrはその名の通り所有権を共有する場合のみ使うもの
で、そういう場合は値渡しでもいいよ。中でmoveすれば
所有権を共有しないなら、nullptrを許容するならナマポそうじゃないなら参照
あんまり無いけど所有権を渡した先に移動させるならunique_ptr

573 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 23:58:32.77 ID:TsXu0WT4.net]
所有権渡したくないならunique_ptrで持っている呼び出し元がgetでナマポを渡すかdereferenceして参照渡すかだな

574 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 00:00:55.90 ID:Jbp2gIKE.net]
ナマポで渡してもshared_ptrを再取得する方法はあるだろ
まあ前提がいるが

575 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 00:34:15.74 ID:qQvnlfYK.net]
うむむ、なるほど
ポインタらしき物にこれだけ多くの種類があってI/Fで縛ってしまうのは
一見面倒そうで、最近の流行というか静的型言語的には
型安全と見るべきなんだろうかしら
安易なGC言語より良いかもしれん、単純に情報量は多い
また一つC++が好きになった
うっかり循環参照したら怖いとか
コンパイラのバージョン違いでSTLやmallocの実装に
差異が有ることを前提に組まなきゃならないとか、玉にキズもあるけれど

576 名前: ◆QZaw55cn4c mailto:sage [2017/04/03(月) 06:55:53.48 ID:VwtRd/3a.net]
>>559
C/C++ で生書きするなら今もおなじだよ



577 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 07:40:50.83 ID:dyU+EMvQ.net]
型に対してじゃないのに括弧つけるの?

578 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 08:48:24.23 ID:WaUkCV9r.net]
そこはインデントや{}の位置が人によって違ったりするアレだろ

579 名前: ◆QZaw55cn4c mailto:sage [2017/04/03(月) 19:32:41.84 ID:VwtRd/3a.net]
>>557
K&R2 は C89 準拠だよ‥C89 が時代遅れだというけれども,いろんなことは C89 のときからやってきていて,C99 で追認された,というだけだよ

580 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 20:29:22.04 ID:5hra1L5C.net]
>>570
あいわかった
お前は今後「K&R1おじさん」(略して「K&Rおじさん」)な
どうせ定数defineや関数マクロまみれなんでそ

581 名前: ◆QZaw55cn4c mailto:sage [2017/04/03(月) 21:53:46.44 ID:VwtRd/3a.net]
>>571
略しないほうがいいよ‥
K&R2 おじさん=C89 はまっとうなCer, K&R1 おじさんは時代遅れ,この二つは全然違うよ

582 名前:571 mailto:sage [2017/04/03(月) 22:02:42.26 ID:ldINtwle.net]
>>572
つまりお主(K&R1おじさん)は
K&R2おじさんが自分と一緒くたにされることを
申し訳ないと感じてるのだな!?

(>543)
> それ,K&R1 から堕落したよね

(>550)
> サイズが無限にのびるかもしれないものをコピーするなんてだめだよ

(>552)
> K&R1 は教育的な配慮に優れた実装だと思うんだ‥

583 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 22:14:40.64 ID:Vb9tETQW.net]
voidを返す関数には感心したな

生成されるコードは大して変わらないかも知れんけど

584 名前:デフォルトの名無しさん mailto:sage [2017/04/04(火) 01:00:11.73 ID:jC2xfRDP.net]
関数プロトタイプを除けば、K&R1で十分かもしれないな
voidを返す関数? int でいいんだよ

585 名前:デフォルトの名無しさん mailto:sage [2017/04/04(火) 15:11:19.04 ID:AeH3x9f/.net]
戻り値をどうするかはcallerの勝手だからな

586 名前: ◆QZaw55cn4c mailto:sage [2017/04/04(火) 19:47:09.26 ID:xNF4clmU.net]
"); //]]>-->
587 名前:rer" target="_blank">>>575
確かに関数プロトタイプは有用だね,これがないと結構ミスるかもしれないね
void を返す関数?int でいいんだよ
[]
[ここ壊れてます]

588 名前:デフォルトの名無しさん mailto:sage [2017/04/04(火) 20:27:50.00 ID:/PIYb7TP.net]
int funca01(...);
int funca02(...);
int funca03(...);

589 名前:デフォルトの名無しさん mailto:sage [2017/04/04(火) 23:08:17.42 ID:YUY8Mb54.net]
老人は意味とか概念を理解しようとしないから嫌
「bool? intでいいだろ」
「forループ?本質はgotoと同じ」
「enumなんてintでいいだろ」
ホントもう存在が害悪

590 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 00:33:27.19 ID:DVg/5L4N.net]
>>550
何が「昔はね」だよw
Qちゃんその当事Cなんて触ってなかったろ?
アンタ最近(たかだか数年?)プログラミングで遊び出しただけの人でしょ

591 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 02:38:54.31 ID:ZJf7oEgw.net]
>>579
「static const intなんてenumでいいだろ」
こうですね

592 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 04:30:52.52 ID:ni2ET+sb.net]
奴らは#defineだ

593 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 08:14:48.69 ID:Bh5NPBNH.net]
マジックナンバー直書きでしょ

594 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 08:19:06.54 ID:qVk1sCwA.net]
K&Rだと〜
c89だと〜
過去の異物がまだ現役だと信じて話してけるのがうざい

595 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 09:06:55.68 ID:ncDYJBnp.net]
それ言うならC自体が。
いまさらC++と互換性のないCを選ぶ理由がない。

596 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 10:35:04.67 ID:k0RY104y.net]
>>585
C++と互換性のないCってどんなの?



597 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 19:40:11.14 ID:IM5122PI.net]
ベターC的な所全般だな
範囲forとか2進リテラルとかスレッドライブラリとか参照とか
Cにはnullptrすら無いし細かいところでは条件演算子が右辺値とか
ようするに別言語
オーバーロードに対するtgmathとかもう糞の臭いしかしない

598 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 19:44:22.68 ID:bDXscs5n.net]
>>585
たしかに,C99 の数々の改悪は C++ との互換性を考慮していない悪手の連発,ほとほと困ってしまう

>>584
C++ とほどほどの交換性のある C89 が最良だよ

599 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 19:46:32.21 ID:bDXscs5n.net]
>>580
「K&R1 は構造体は基本的にポインタでしか扱えない」制限なんて,使ってもいなかったらわからないだろう?

600 名前:580 mailto:sage [2017/04/05(水) 20:02:06.85 ID:DVg/5L4N.net]
え?Qちゃんてサンデープログラマじゃないの?
職業プログラマでもないし
プログラミング暦せいぜい10年未満だと思ってた

601 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 20:07:28.87 ID:bDXscs5n.net]
>>579
>「forループ?本質はgotoと同じ」
そんなことはいわないとおもうよ,K&R1 の時代から for はあるしね
きがつくと for(;;) { } と break だけで書いてたりするのはあるかもね,while 使いにくいとか,do while なんかマクロの中でしかつかわない,とかさ

enum?
#define でいいとおもうよ‥

602 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 20:08:45.69 ID:bDXscs5n.net]
>>590
サンデーだよ
でも長いサンデーなんだ‥

603 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 21:26:45.75 ID:Kw8eDt7v.net]
ニートじゃ分からんことも多いのでは

604 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 22:05:58.72 ID:bDXscs5n.net]
たしかにそのとおりだが,K&R2 = C89 こそ必要十分,ということはわかるよ

605 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 22:10:26.67 ID:mGFW5fgT.net]
そういうこと言ってるとそのうち技術についていけなくなるよ

606 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 22:22:23.34 ID:ncDYJBnp.net]
C99やC11って、新しい技術とかそういうんじゃないじゃん。



607 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 22:40:44.77 ID:mGFW5fgT.net]
規格

608 名前:デフォルトの名無しさん mailto:sage [2017/04/06(木) 10:47:58.81 ID:jz0x7tjm.net]
企画ものは好きじゃないからな

609 名前:デフォルトの名無しさん mailto:sage [2017/04/06(木) 16:35:26.64 ID:w+UX2Wix.net]
ころころ変わるんだから最新もクソも無いわけだが

pakomamaはガチらしいな

610 名前: ◆QZaw55cn4c mailto:sage [2017/04/06(木) 20:02:44.92 ID:Uar4T1Gl.net]
>>595
別についていけなくてもいいよ,その殆どは自分には要らないものだから
それはそうと,これは!とおもう新しい技術って最近はどんなものがあるの?

611 名前:デフォルトの名無しさん mailto:sage [2017/04/06(木) 20:16:13.94 ID:kFToYptL.net]
まず、C#のasyncだのawaitだのはC++にも欲しいところ
というか、取り入れる方向で議論していたような
どのみちQZには使いこなせない機能だから知らなくてもよいけど
知れば発狂することだろう

612 名前: ◆QZaw55cn4c mailto:sage [2017/04/06(木) 20:21:15.74 ID:Uar4T1Gl.net]
まずC#をやらないとね‥でも Java に走ってしまった‥Java に同じようなのはないの?

613 名前:デフォルトの名無しさん [2017/04/06(木) 22:33:11.66 ID:Ao1zg6OQ.net]
>>601
coroutineの事なら根本的な所が違うから勘違いしないようにな

614 名前:デフォルトの名無しさん mailto:sage [2017/04/07(金) 20:08:34.35 ID:cdWiLUH2.net]
馬鹿の特長:目的/機能の違いと実現するための実装の違いの区別がつかない

615 名前:デフォルトの名無しさん mailto:sage [2017/04/08(土) 12:56:12.29 ID:TFmwEDa6.net]
C#のawaitはGUIのスレッドを意識出来るので有用だが
C++のawaitはただ裏で走らせるだけの機能的には劣化版な気がしてならない

616 名前:デフォルトの名無しさん mailto:sage [2017/04/08(土) 13:14:20.88 ID:bfo0YVHI.net]
>>605
c++で標準的なgui使うとすると何になるの?



617 名前:デフォルトの名無しさん mailto:sage [2017/04/08(土) 13:49:52.49 ID:xnWSKOe7.net]
>>605
そりゃ C++ と C# のポリシーの違いだろ

618 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 22:32:13.26 ID:nTEmq1X3.net]
C使ってる人で変数宣言を途中に書く人いる?
やめた方がいい?

619 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 23:00:21.55 ID:gthRNL4S.net]
むしろそうして欲しいかな
勿論ブロックスコープは意識してる前提で

620 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 09:11:56.63 ID:ezi5K97R.net]
初期のCはブロック先頭しかコンパイルが通らない
コンストラクタも型推論もないのに途中に置くメリットが少ない
初期化漏れというモンスターの隠れ家になりやすい

621 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 10:33:55.73 ID:L6e5ZQwW.net]
一応Cで書くときは関数ブロック直後に書いてるけど、それはそれでforで使うiとかを使い回す事になるから、C++みたくプログラマの良識を信じて(ブロックを意識して変数宣言すると信じて)、好きな場所で宣言出来た方が正解なんだろうな。

622 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 10:35:17.63 ID:L6e5ZQwW.net]
出来た方がと言うか、今は出来るんだから、した方が正解に訂正。

623 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 12:59:25.70 ID:Hdztr2ik.net]
出来ることと乱用していいことはイコールでない
一瞬だけの一時変数を直前で宣言するのならありだけど
関数全体で使うなら頭で宣言すべきだし、そもそも中間で宣言するような長い関数は
短くなるよう見直すべき

624 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 13:04:43.28 ID:xSRtCFhF.net]
魔法の言葉
ケースバイケース

625 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:32:18.15 ID:UiWlchtO.net]
スコープは可能な限り狭く

おじいちゃんの遺言

626 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:38:55.23 ID:PNQsiXg9.net]
初期化漏れはブロック先頭でしかかけない方が起こしやすいだろう

長い範囲で使う変数でも、変数ははじめて使うところで宣言した方が分かりやすいしバグも減る。



627 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:04:35.98 ID:Z/bjVn5R.net]
初期化忘れ防止はどこで宣言したってあんま関係ないというか
大差ないだろうな実際
必要になった時点で宣言するってことでよいと思う
さもないと上手くいかない場合もあるし
いちいち使いもしない「ダミーの値」で初期化するのは馬鹿らしいし
余計にバグりそう

628 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:13:31.25 ID:Z/bjVn5R.net]
auto result = func();
まぁこういう風にしたいわな

int result = 0;
・・・
result = func();
↑その「0」って初期化値は何なんですか、何を意味した「0」なんですか
では0の代わりに1で初期化したらどうなるんですか
この初期化値の意味は一体何なんですか
ってことになるしな
結局「0」とか「1」とかの初期化値はダミーでありプログラム上なんの意味もなかったりするし
逆に初期化値に意味がある場合もあるから余計にややこしくなる
bool flag = false;
if( func() )
{
  flag = true;
}
これらを区別したいから必要になった個所で宣言に一票

629 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 21:45:43.28 ID:spQE74XB.net]
老人の「昔は良かった」を見て顔真っ赤にして論破しようとマジレス
みっともない

630 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 23:47:26.34 ID:9eRQSDOY.net]
必要なものを必要なときに宣言する
それだけの話

631 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:16:54.52 ID:RtikNDCG.net]
>>618
>この初期化値の意味は一体何なんですかってことになるしな

勝手に無駄な初期化しておいてどれだけ頭が悪いんだぜ
ぜんぜややこしくない
お前が馬鹿なだけ

632 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:26:22.77 ID:Af1/s0zG.net]
もともとが
初期化忘れを防ぐためには関数の先頭で宣言〜
への反論だったからだぜ

633 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:41:32.48 ID:RtikNDCG.net]
>622
日本語もわからないチンパンは無理して
コンピュータ使わなくても
祖国でオナニーしてればいいんだぜ

634 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:50:31.14 ID:Af1/s0zG.net]
君の疑問がどこにあるのか本当にわからないからどうでもよい

635 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:02:51.76 ID:Af1/s0zG.net]
それでもヒントとして>>610への反論だったということだけは言っておこうか
「途中で宣言すると初期化もれしやすい」という風なことが書いてあるが
逆に>>610は何故、先頭で宣言したら初期化漏れしにくい、と考えたか
どういったコードを想定しているかってことだな
要するに>>610はブロックや関数の先頭だけ見れば初期化漏れしていることが直ぐわかると便利だね
って言いたいんだろうけど、それはどういうコーディングルールの元に言えることか
ということだな

636 名前: ◆QZaw55cn4c mailto:sage [2017/04/16(日) 17:51:30.33 ID:3PeEvH/A.net]
for(int i = ...; ; ) が書けるようになったのは素直にありがたいな,と感じている



637 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 23:52:45.18 ID:IUq/7GPJ.net]
>>626
脳の進化が20年前で止まったチンパンはc89でも使ってろ

638 名前:デフォルトの名無しさん mailto:sage [2017/04/24(月) 20:45:20.10 ID:et30sNFg.net]
うきー

639 名前: mailto:sage [2017/04/25(火) 04:20:41.84 ID:Vqnsayjn.net]
>>627
C99 or later で便利になったことなんて,そんなにないんだよね‥

640 名前:デフォルトの名無しさん mailto:sage [2017/04/25(火) 06:08:12.88 ID:X14wy5zc.net]
数値計算とか特殊用途なライブラリ追加ってイメージ。
そりゃ、手間の割に汎用性がなかったら対応コンパイラも出てこないわ。

641 名前:デフォルトの名無しさん mailto:sage [2017/04/25(火) 22:55:58.60 ID:EbISA0IE.net]
インライン関数も行コメントもboolもrestrict も無しで
どうやってプログラム書いてんのか想像もつかない
snprintf無しとか無理ゲーだろ

642 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 02:18:40.34 ID:Kw1ZNGm3.net]
restrict無しが想像つかないってどういうことだろ

643 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 09:07:13.88 ID:bRGeq+mw.net]
restrict使ったことないなあ
大きく最適化されるの?

644 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 09:13:52.17 ID:rDz6/6sg.net]
最適化はあんま気にしてなくて意味的なものかな
memcpyとmemmoveみたいな

645 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 09:20:57.15 ID:A4NmaPdj.net]
そう言う機能はメーカー独自実装でC99決まるずっと前からスタンダードだったから、C99って実感が無い。。。

646 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 11:36:23.97 ID:O9yeoh6Z.net]
>>631
いやいやそれはさすがに想像力足りなくね?

snprintf無しは無理ゲーなのは同意するが



647 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 00:51:04.53 ID:evlI6rq7.net]
void func(hoge)
int hoge;
{}
こんな書き方があったん?

648 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 01:30:10.63 ID:PzvORh1V.net]
>>637
詳しくは k&r style とかでググればいいけど今時知る必要はほぼないと思う

649 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 15:05:47.25 ID:9iyukdGg.net]
K&R1 だね、引数の型チェックができないから不便かつミスを誘発しやすい

650 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 00:55:58.17 ID:uDdo3knt.net]
使われなくなった過去の異物に優劣語り出すとか
老人やべーな

651 名前:片山博文MZ mailto:sage [2017/05/07(日) 00:58:01.39 ID:gTai4K61.net]
×異物
○遺物

652 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 01:41:21.28 ID:zkvqzaCu.net]
誰も優を語ってない訳だが

653 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 15:54:40.58 ID:s2OM55fz.net]
ストラウストラップの本って読む価値ありますか?

654 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 22:28:38.36 ID:fUCVOwEA.net]
著書全般の基本的な傾向としては万人向けの価値はない
物事の意味や本質を学び考え悩み理解しようとする人向けの本であって
うわべだけの丸暗記やコピペで即結論や結果を求める人向けの本ではないから

655 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 22:36:06.44 ID:f9jMnLHr.net]
読む価値はあるが嘘が多いので騙されない注意が必要

656 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 23:30:36.93 ID:s2OM55fz.net]
>>644
>>645
上級者向けの本みたいなので
買うのは先に延ばしたいと思います...
一冊高いのもありますが
サンクスです



657 名前:デフォルトの名無しさん mailto:sage [2017/05/19(金) 15:26:03.09 ID:49hF9eg/.net]
はぁ〜〜〜〜
安易にC++に手を出すんじゃなかった

658 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 12:15:32.26 ID:Niypv3FQ.net]
変人や御用達の言語だからな
馬鹿のくせにプライド高い老害しか使ってないイメージ

659 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 12:51:51.67 ID:Nls5mnQ9.net]
>>648
その手の人らの声が大きいだけだよ。特にこんなところでは。

660 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:23:23.08 ID:PYbACk+S.net]
みんな黙ってC++だよ

661 名前:デフォルトの名無しさん mailto:sage [2017/05 ]
[ここ壊れてます]

662 名前:/23(火) 00:42:13.85 ID:9/IkIyOw.net mailto: ちょっとした確認なんだけどさ、
デストラクタが空っぽ (デフォルトデストラクタ) でもオブジェクトを後始末するための何らかの処理はするよね?

よくあるスライシングの問題で、

・クラス A をクラス B が継承している
・クラス A のデストラクタは virtual が付いていない
・クラス B のデストラクタはデフォルトデストラクタ
・クラス B はメンバ変数を持っていない
・B* を A* にキャストしたものを delete

という状況だと見かけ上はクラス B のオブジェクトには後始末すべきものは何もないように見えるけど、
デストラクタが呼ばれないのはやっぱあかんよな?
[]
[ここ壊れてます]

663 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 04:48:39.03 ID:pt6Ia/HA.net]
うん

664 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 09:20:18.86 ID:J4YcG+3k.net]
>>651
はい
規格上もデストラクタがvirtualでないBのオブジェクトをA*に入れてdeleteした場合未定義動作だよ

665 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 10:48:08.30 ID:Ip/q9ayQ.net]
未定義動作多すぎだなこの言語。
よくここまで生き残れたな。

666 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 11:01:35.25 ID:3W0XlzKr.net]
未定義部分を各社が好きに定義してたからね。
VC++だとこう動くけど、g++だとこう動く、みたいな。



667 名前:デフォルトの名無しさん [2017/05/23(火) 12:45:18.14 ID:hcbwXZ+h.net]
>>653
横からだけど、それまじ?
出来れば、規格で書かれてる場所教えて欲しい。

不安に思いながらも、一個作っちゃったんだよな…
動作確認済みだから、直ちに問題があるわけではないんだけど、未定義と聞くと将来的には修正しておきたい…

668 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 13:25:39.67 ID:I6yYOIGb.net]
>規格で書かれてる場所教えて欲しい

delete式の説明の最初のページに書かれていることが探せないというのは
場所を教えられたところでそもそも規格を保有していないのではないか

669 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 13:25:57.75 ID:YY4qnA2y.net]
>>656
意図して作ったの?バグじゃなくて?

670 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 15:16:19.75 ID:0tdmeFKn.net]
htmlとその解釈に悩まされるよりはマシ

671 名前:653 mailto:sage [2017/05/23(火) 15:21:53.55 ID:Ek6JChT/.net]
>>656
俺もworking draftしかないけどn3690の5.3.5の3段落目

In the first alternative (delete object), if the static type of the object to be deleted is different from its
dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the
static type shall have a virtual destructor or the behavior is undefined.

672 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 17:00:54.34 ID:EZJXMIkJ.net]
C++があまりに不安な要素をたくさん抱えているお陰で未だに新生言語が多数出てくると
思えばいいじゃん?

673 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:47:58.75 ID:rsJqfxq0.net]
継承すんなよ

674 名前:デフォルトの名無しさん [2017/05/24(水) 00:55:48.61 ID:WEdzXALv.net]
>>658
意図して作った。
悪しき方法とは思いつつも、stringクラスにsprintf 的な機能のメンバ関数作ったった。
その時、stringクラスの全機能を実装するのがめんどくさかったんで public 継承で。
メモリレイアウトは一切変わらない事を見切った上でだが、未定義だとすると…ヤベ。

675 名前:デフォルトの名無しさん [2017/05/24(水) 00:56:49.58 ID:WEdzXALv.net]
ん、まあ、deleteは使わないからセーフか?

676 名前:デフォルトの名無しさん [2017/05/24(水) 01:00:58.95 ID:WEdzXALv.net]
>>657
ドラフトしか持ってない…
delete 使う事は頭になかったから気付かなかった。
ありがとう。

>>660
おぉ、ピンポイント情報あざす。早速確認してみる。



677 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 12:01:47.91 ID:/RGvDc8r.net]
メモリレイアウトが変わらない範囲で既存のクラスを再オープンして機能を追加する方法の提案だけは出てたような気がする。

678 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 12:06:31.74 ID:/RGvDc8r.net]
>>663
例外関連のなんたらかんたらの処理 (stack unwinding) がかかわってくるんじゃなかったっけ。
正常系では普通に動いているように見えても何がどうなってるかわからんぞ

679 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 13:51:37.65 ID:OqDgfclu.net]
>>658の話の場合、別に”string *のポインタで”継承したやつをdeleteしない限り大丈夫でしょ
>>651で言うところの
・B* を A* にキャストしたものを delete
これが問題になるんであって

B*からdeleteして中身もBなら問題にならないと思うけど

680 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 14:15:44.36 ID:ttKQmf2U.net]
>>668
std::vector<std::string>に入れたら死ぬってことだよね??

681 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 14:47:39.17 ID:/RGvDc8r.net]
>>669
ポインタを std::string* に入れてなおかつそれを std::string* のままで delete したらあかんという話。
値を std::string にキャストする分にはなにも問題はない。

682 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 15:58:36.11 ID:ttKQmf2U.net]
>>670
だからstd::vector<std::string>にいれらんないよね?

683 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 17:02:32.05 ID:/RGvDc8r.net]
>>671
何を言いたいのかよくわからんが……。
std::string を継承した型は、レイアウトが変わらないようにしたからと言って (キャストなしで) std::string には入らないよ。
言いたいことを具体的にコードで示してくれんか

684 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 20:46:07.15 ID:/cDPk3Lb.net]
>>672
ideone.com/akrJQA

685 名前:デフォルトの名無しさん [2017/06/04(日) 05:01:25.52 ID:a4MXR2y0.net]
テンプレート構造体を作りその配列をクラスのメンバに含めたいのですが上手くいきません。

作りたいクラスはスタックとして使えるもので、
主な作りたいメンバは、二つの型のメンバ変数を持つ上記のテンプレート構造体の配列。
引数としてテンプレート構造体を持ち、上記の配列に順次プッシュしていく関数。
最後にプッシュされた構造体をポップする関数、という3つです。

どのようにすればテンプレート構造体をクラスのメンバにすることが出来るのでしょうか?
もしくは、このような機能を持つクラスを実装するためにはどうすればいいのでしょうか?
よろしくお願いします。

686 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 08:23:07.29 ID:7To+hzFq.net]
まず
using テンプレート構造体の型 = 構造体テンプレート<型パラメーター>;
をします



687 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 11:02:02.70 ID:4s9JqZC9.net]
>>674
ideon.com/EmULAG

688 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 11:02:24.41 ID:4s9JqZC9.net]
ideone.com/EmULAG

689 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 21:12:43.78 ID:0J0aNZ4Z.net]
質問への回答はいいとして
たった100行のコードによくもここまでUNKOを詰め込めるものだと感心

690 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 21:24:21.29 ID:4s9JqZC9.net]
>>678
どこ?教えて

691 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 22:06:48.73 ID:0J0aNZ4Z.net]
>>679
細かくは見てないがぱっと見て気になったのは、
殆どが「= default」で済むものを自前で定義する所とか
K,Vの左辺値が渡せないunkoコンストラクターとか
左辺値が渡せないpush関数とか
key_value_pair_stackの外で定義されたdefault_max_sizeとか
禁断の「value_type pop()」とか
ムーブ代入だけ何故か無いとか
例外安全を考慮しないswapとか
constexprの付いていない関数が多数とか
constが付いていないsize関数とか
質問者が「テンプレート構造体」と「クラス」の言葉を使い分けているのにわざわざクラステンプレートにする所とか
「value_type::value_type」の二つのvalue_typeの意味が違うとか
スワップする気皆無の「swap(key_value_pair&& other)」とか

あと
何故付いているのかわからない「const auto」のconstとか
キーバリューペアをシーケンシャルコンテナーに詰める例も地味にUNKO

692 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 22:21:08.74 ID:4s9JqZC9.net]
>>680
ありがとう
見直してみる

693 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 23:59:40.42 ID:4s9JqZC9.net]
>>680の指摘を受けて修正したやつ
https://ideone.com/4PDU5a

694 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 07:13:59.57 ID:dSqD3vhj.net]
>>682
20秒ほど眺めたがとりあえず3つほどなおした方がいい
・key_のメンバー宣言に{}が付いていないと、修正前と同じ動作にならない
・popの戻りはvoidにした方が無難
・clear()しても要素のデストラクターが呼ばれないのでstatic_assert(std::is_trivial_destructible<element_type>::value,"未対応")しとくのが礼儀

695 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 08:02:20.82 ID:SbeuyTlX.net]
>>683
一つ目だけ意味がわからない…28行目のこと??なんで?

696 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 08:16:13.98 ID:dSqD3vhj.net]
>>684
その通り28行目
struct X {
 some_type m1 /* {} */;
 X() = default;
};
ここでsome_typeの初期化{}が無いとm1は未初期化になるし、
some_typeにデフォルトコンストラクターが無ければX()の「=default」が「=delete」扱いになる



697 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 08:25:22.25 ID:CMNJImQI.net]
>>685
なるほど…これってデフォルトコンストラクタ自前で書いてメンバイニシャライザに書いても同じだよね?
valueも同様にイニシャライズしなきゃだめだよね?

698 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 12:04:31.71 ID:dSqD3vhj.net]
>>686
1:Yes, 2:Yes

struct X {string m; X()=default;};
struct X {int m{}; X()=default;};
struct X {int m; X() : m() {}};
はmが初期化される
struct X {int m; X()=default;};
が初期化されない

699 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 12:34:51.89 ID:CMNJImQI.net]
>>687
ありがとう

700 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 21:07:12.97 ID:YRHwBsQU.net]
空のvectorをpop_backした時の仕様がクソ過ぎるC++

701 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 23:54:31.67 ID:vnQWBbWO.net]
亀レスで申し訳ありません、>>674です
とりあえずレベルが足りないことが分かったので、もう少し勉強してからいただいたコード解読してみます。
答えてくださった方ありがとうございました。

702 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 07:02:51.57 ID:ueF+TYcD.net]
気にすんな
簡単なことすんのにもこの難易度な言語がおかしい

703 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 17:35:50.84 ID:zF6NOqag.net]
というかほとんどがムーブとかconst版とかconstexprとか、とことん丁寧にやろうとした場合の作法まで
含めた突っ込みだから、初心者が気にするような話ではないなw

そもそも、最近右辺値参照使ったコードを「書かないといけない」と誤解してる人が多い気がするんだが
あんなもん「ポインタのすげ替えで済む場合」にそれを出来るようにするための仕組みで、
まず左辺値版を書いた上で、右辺値版も書けば速くなるよ、ってだけだよね?

上記に該当しようがしまいがまず左辺値版は必須だし(左辺値を弾きたいならともかく)
該当する場合に高速化したければ右辺値版も書けばいいというだけで
これまた初心者が気にするような話ではないw

704 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 18:16:24.12 ID:uCSRK7Ay.net]
>>692
>右辺値版も書けば速くなるよ、ってだけだよね?
お前の中ではそうなんだろうな

705 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 18:58:32.67 ID:zF6NOqag.net]
違うというなら例ぐらい挙げてくれよ

706 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 19:28:29.10 ID:+mNKSnZM.net]
そういうのはスルーでok



707 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 22:23:00.44 ID:uCSRK7Ay.net]
>>694
こういうのはワンポイントTipじゃなくて概念の理解だからね
『ムーブセマンティクスのため』と答えを言ったところで
君は理解できないんだろう?

708 名前:デフォルトの名無しさん mailto:sage [2017/06/06(火) 23:19:35.94 ID:zF6NOqag.net]
>>696
ドヤ顔で用語を挙げろなどとは一言も言っていないのだがw

709 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 00:10:56.23 ID:xZGjq0dG.net]
>>697
『ムーブセマンティクス』が君の求めた
例そのものなんだよ
でも君の頭脳では概念を理解できないから
説明する気もないし
わからなくても心配しなくていいよ

710 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 00:22:15.23 ID:2ipgwMGH.net]
教える側界隈の高度なやり取りだけで終始しないでほしいんですけど、、

711 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 00:27:13.62 ID:gn2mDiBA.net]
>>699
ヒント:unique_ptrのムーブは性能目的ではない

712 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 00:54:38.14 ID:CXRZvrBM.net]
>>698
こっちは疑問形で書いてんだから普通に指摘してくれりゃいいんじゃねーの?
なんかコンプでも抱えてんのかね

unique_ptrみたいな所有権の移動の実現(を楽に実装する)は確かに気付いてなかったが
初心者が気にするような話ではない&いつも書かなければならないものではない、に対する反論になってないよな
ちょっとした指摘をそこまで煽って書ける神経が理解できん

713 名前:700 mailto:sage [2017/06/07(水) 06:42:56.76 ID:gn2mDiBA.net]
ちなみに俺は>>698ではない
そうぞうで書いた

714 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 08:16:07.46 ID:PxDlVTZD.net]
>>701
君は概念を理解できないだろうけど
コピーされては困るから「ムーブ」「セマンティクス」
なんだよ
性能に余裕があってもね
右辺値参照がなかったらスマポをvectorに入れることすらままならないよ

715 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 18:47:00.97 ID:CXRZvrBM.net]
>>702
いや自分も軽く調べてすぐ見つかった例がunique_ptrだったからそれだろうと思った

>>703
偉そうに言う割に自分もいい加減なこと言ってるな
C++03以前を知らない学生か何かだろうけど、お前みたいに偉そうにドヤ顔する癖のあるやつで
使い物になるコード書くやつを俺は見たことない
恥ずかしいからその辺にしとけ

716 名前:デフォルトの名無しさん mailto:sage [2017/06/10(土) 17:42:01.48 ID:SxYi4azU.net]
>>683
>・popの戻りはvoidにした方が無難
なぜなんだ?pop の戻りがナルなら空であることを示せてべんりだろう?



717 名前:デフォルトの名無しさん mailto:sage [2017/06/10(土) 20:12:18.00 ID:JqmNS/A3.net]
>>705
topとpop作れってことが言いたいんだろう多分

718 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 22:14:52.88 ID:iu5DR0Hy.net]
「なぜなんだ?pop の戻りがナルなら空であることを示せてべんりだろう?」
 ↓
「topとpop作れ」

これがアスペというやつか

719 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 22:35:45.30 ID:q49UmmFG.net]
お前アスペ言いたいだけだろ w

720 名前:はつみつ餃子 ◆8X2XSCHEME mailto:sage [2017/06/12(月) 01:27:35.05 ID:M0cidITY.net]
std::queue では pop と front に分けられてるからその習慣に合わせた方がいいってことじゃない?
ただ、 queue のデザインが出来たときはムーブがなかったから先頭要素にアクセスするために
(参照でなく) 値を返すと同時にコンテナから削除するのはコピーが発生して非効率ってこともあってこうなってると思う。
今ならもっと別の選択肢はあっていいと思う。

まあ、古いデザインを引き摺っている部分はあるとは言っても標準ライブラリはすごくよく考えられてるから、
どうしてそうなっているのかを考察したり真似したりするのは良いと思う。

721 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 01:48:34.70 ID:E1Ahh3IF.net]
はつみつ

722 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 17:36:41.84 ID:t42bNJ0A.net]
>>709は健常者
ただ理由は性能でなくて例外安全だろう

723 名前:デフォルトの名無しさん mailto:sage [2017/06/17(土) 07:59:16.34 ID:bupTq8cx.net]
クラスの演算子オバーロードの
書き方全種類教えてください。
operator (*)やoperator ""や
operator ->()辺りが特に解説が少なくて
理解するのに困ってます。

よろしくお願いします。

724 名前:はちゃめちゃ餃子 ◆8X2XSCHEME mailto:sage [2017/06/17(土) 09:10:34.91 ID:a/4tSU3I.net]
>>712
ユーザー定義リテラルについてはこのあたりが詳しいと思う。

https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#over.literal
https://cpprefjp.github.io/lang/cpp11/user_defined_literals.html

名前空間名で修飾することができないので、
namespace 内で定義されたものについては using してからでないと使えないという規則が微妙に気持ち悪い。
あまりお勧めしない。
標準ライブラリが提供している complex 型のリテラルや時間のリテラルもそんなに頻繁には使わなさそうだし、
よく使うのは string 型のリテラルくらいかなぁ。

725 名前:デフォルトの名無しさん mailto:sage [2017/06/17(土) 11:23:50.84 ID:cPfPWWru.net]
まずウェブブラウザーで
www.open-std.org/JTC1/SC22/WG21/docs/papers/2017/
をアクセスします。
次に「N4660」のPDFをダウンロードします。
右下に336と書かれたページ(16.5 Overloaded operators)を開きます。
そこから5ページほどスクロールしながら、英文を見ずにコードだけ眺めます。

726 名前:デフォルトの名無しさん mailto:sage [2017/06/17(土) 11:24:51.65 ID:cPfPWWru.net]
oops...
× N4660
○ N4659



727 名前: ◆QZaw55cn4c mailto:sage [2017/06/17(土) 12:02:12.82 ID:ir1eTLN6.net]
>>712
ユーザー定義リテラルについては書かれていないが、それでも演算子オーバーロードについては
stlalv.la.coocan.jp/
が詳しいのではないか?はちみつさんがこれに触れないのは不思議‥

728 名前:デフォルトの名無しさん mailto:sage [2017/06/17(土) 12:24:13.05 ID:qM ]
[ここ壊れてます]

729 名前:kdrUOQ.net mailto: あ、うんでもなんか、
http://stlalv.la.coocan.jp/HungarianNotation.html
↑のページ読んだだけでもうダメなんじゃないかって
文章もなんか危ないというか危ういし

とおもったらQZか
な〜んだ納得
[]
[ここ壊れてます]

730 名前:デフォルトの名無しさん mailto:sage [2017/06/17(土) 13:21:59.00 ID:ir1eTLN6.net]
>>717
ハンガリアンは意見がわかれるからね‥
私はハンガリアンはやらないよ

731 名前:はちみつ行者 ◆8X2XSCHEME mailto:sage [2017/06/17(土) 14:21:54.44 ID:a/4tSU3I.net]
>>716
自分が見ないページだから意識の外だった。
そのページはわかりやすく説明できているとは思うけど、
基本的な書き方で今更調べることはあんまりないよ。

732 名前:デフォルトの名無しさん mailto:sage [2017/06/17(土) 14:31:32.36 ID:bupTq8cx.net]
712です。
短いコードを打ちこんで動作を確認しました。
皆さん有り難うございました。

(ちょっと気になったのは
void operator [](std::initializer_list <int > list);
これがvsc2015では動作しなかったことぐらいです。
)

733 名前:653 mailto:sage [2017/06/17(土) 16:42:18.70 ID:YXyzn6OG.net]
それ戻り値がvoidだからじゃ

vs2015で試したら添字演算子の結果を使わなければvoidのままでも動いたし
戻り値返すようにしたら普通の使い方もできたよ

734 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/06/17(土) 18:56:32.74 ID:a/4tSU3I.net]
話がそれるけど operator[] に initializer_list を渡したいときってどんなとき?
次元が動的に決まるようなコンテナとか?

735 名前:デフォルトの名無しさん mailto:sage [2017/06/18(日) 00:16:25.00 ID:sDQUBcQX.net]
xyの二つの値を渡したかったんだろ
言わせんな恥ずかしい

736 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/06/18(日) 00:50:52.82 ID:fX2BYeVR.net]
void って C++ の予約語の中ではカッコイイ言葉ナンバーワンだよな!



737 名前: ◆QZaw55cn4c mailto:sage [2017/06/18(日) 09:48:40.36 ID:BCfBDJC6.net]
auto に席をゆずったらしい‥

738 名前:デフォルトの名無しさん mailto:sage [2017/06/19(月) 13:14:46.01 ID:dXkNDY8/.net]
pascal とか fortran の方が良くね?

739 名前:デフォルトの名無しさん mailto:sage [2017/06/19(月) 13:45:34.22 ID:LlSBVcNV.net]
後藤

740 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/06/19(月) 14:29:30.47 ID:MatPzd+v.net]
>>726
良かろうが悪かろうがこのスレに来てるのはそれでも C/C++ を使うってやつらなんだからその問いかけは無意味

741 名前:デフォルトの名無しさん mailto:sage [2017/06/19(月) 15:29:57.68 ID:dXkNDY8/.net]
予約語として他言語から呼べる万能感があるのに :-P
C89では削除されたのだっけ

742 名前: ◆QZaw55cn4c mailto:sage [2017/06/19(月) 19:14:53.97 ID:zNrORK8z.net]
>>727
setjmp/longjmp のインパクト!を考えると、いまいちだと思いますぅ

743 名前:デフォルトの名無しさん mailto:sage [2017/06/20(火) 00:48:54.33 ID:tAZ0INkH.net]
longjmpは無理やり過ぎだよな
Cならではとも思うが

744 名前:デフォルトの名無しさん mailto:sage [2017/06/20(火) 00:52:30.35 ID:tAZ0INkH.net]
リターンアドレスレジスタみたいなの持ってる石だと
ちょいとだけ複雑になるのかすぃら?

745 名前:デフォルトの名無しさん mailto:sage [2017/06/20(火) 23:58:21.18 ID:f6m5FZzF.net]
>>172
>MISRA-C研究会が書いている、MISRA-C 2004(C90) の本をみっちり、勉強しろ!
>研究会のメンバーでさえ、規格に詳しい人がいないのだから

規格も理解できない奴らが集まって書いた27年前の規格の解説本って
やばすぎだろ

746 名前:デフォルトの名無しさん mailto:sage [2017/06/21(水) 00:16:32.09 ID:vvvagSt1.net]
5ヶ月以上前のレスに反応するって
やばすぎだろ



747 名前:デフォルトの名無しさん mailto:sage [2017/06/21(水) 04:19:48.48 ID:ZaPNA4YS.net]
コンパイラやライブラリが腐っていることなんて
良くある事。利用者は配慮してくれないと (AA略)

748 名前:デフォルトの名無しさん mailto:sage [2017/06/21(水) 11:49:15.08 ID:x++JJuQ3.net]
最終的にできたものが使用通りならそれでいい
規格準拠度なんてどうでもいいな

749 名前:デフォルトの名無しさん mailto:sage [2017/06/21(水) 13:05:32.11 ID:sg+bsLqU.net]
/* 仕様通り動いたコード */
int Z = 0; // これを消すと動かなくなる
int Z2 = 0; // 2010.1.4. vcバグ回避の追加
char *s, *p;
if (s==p) return 2; //これ必要?

750 名前:デフォルトの名無しさん mailto:sage [2017/06/23(金) 22:17:07.01 ID:U/0DguFU.net]
A a = {};
これってコピーコンストラクタ呼ばれる可能性ある?

751 名前:デフォルトの名無しさん mailto:sage [2017/06/24(土) 00:27:16.63 ID:PfOqrM0w.net]
ない

752 名前:デフォルトの名無しさん mailto:sage [2017/06/24(土) 00:27:41.83 ID:5MVxspQe.net]
>>738
ない
(もちろんaを構築するときに呼ばれるコンストラクタの話
Aのコンストラクタの中で起きることまでは知りようがない)

753 名前:デフォルトの名無しさん mailto:sage [2017/06/24(土) 09:24:07.49 ID:AroON3at.net]
イコールあるけどコピーしないん?
もう文法わけわからん

754 名前:デフォルトの名無しさん mailto:sage [2017/06/24(土) 13:28:24.19 ID:7MOF4v/u.net]
変数宣言のときの=はあくまで初期化であって、たまたま同じ記号を使ってるだけで代入とは違うと思ったほうがいい

同じと思うと他にもC++の参照とかで混乱する

755 名前:デフォルトの名無しさん [2017/06/24(土) 15:16:01.77 ID:qquEaJ2M.net]
>>741
コピーしようがしまいが結果は一緒でしょ?
単に最適化の結果で余計な処理が動かないだけと考えればいい

756 名前:デフォルトの名無しさん mailto:sage [2017/06/24(土) 18:10:28.98 ID:Ipep7Yd5.net]
>>743
一緒じゃねーよヴァカ乙
リソースはメモリだけと思ってんの?どんだけお花畑なの?
mutex a = {};コピー無しの保証



757 名前:デフォルトの名無しさん [2017/06/26(月) 12:57:25.63 ID:dr/i6/ki.net]
>>744
コピー出来るクラスを例に持って来いよ

758 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 18:40:34.84 ID:lG20CtJa.net]
コピー出来ないクラスではコンパイル結果が異なるという>>744の指摘に対して
「コピー出来るクラスを例に持って来い」とはこれ如何に

759 名前:デフォルトの名無しさん [2017/06/28(水) 18:53:40.08 ID:fwJBxSlX.net]
>>746
その元コメントはコピーしようがしまいがと言ってるのにそもそもコピー出来ないクラス持ってきて罵倒とはこれ如何に

760 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 20:44:21.28 ID:VFMMUwAr.net]
>>743
一緒じゃない
一緒になるようにクラスを設計すれば一緒というだけ

761 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 20:47:16.20 ID:VFMMUwAr.net]
デフォルトコンストラクタでカレーライスを製造
コピーコンストラクタでラーメンを製造
代入でうどんを製造

同じか?

762 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 21:08:19.84 ID:lG20CtJa.net]
>>743が「コピーしようがしまいが」と言ったからこそ>>744がコピーされてはは困る例を出したのだが
悲しきかな>>747には理解ないのであった

763 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 21:16:03.41 ID:VFMMUwAr.net]
いや、ちょっとズレてると思うよ

764 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 22:13:17.29 ID:xb2y2Mwj.net]
横から何だけど
どうズレてるかの説明は無いの?

765 名前:デフォルトの名無しさん [2017/06/28(水) 22:25:47.08 ID:xMEBWJOX.net]
コピーしない保証がC++17でさらに追加されたがそこで最適化でコピーしようが直接構築しようがどちらでもよかったC++14までの規格は彼の頭の中ではヴァカでお花畑らしい

766 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 23:59:13.87 ID:lG20CtJa.net]
なるほど>>738を初期化でなくcopy/move elisionの話だと勘違いしたままだとこのようなとんちんかんなレスになるのだな
残念なのが>>739-742を読んでも勘違いに気付かないことだ



767 名前:デフォルトの名無しさん [2017/06/29(木) 00:23:16.57 ID:0BA30UdR.net]
>>754
とりあえずお前が一番元のレス読んでないと言うことは解ったよ。
読んでるというなら彼が何を疑問に思ってるか、そしてそれへの説明をしてみるといい

768 名前:デフォルトの名無しさん mailto:sage [2017/06/29(木) 08:20:56.52 ID:J9UCM8ul.net]
>>752
恐らく>>751は「コピーしようがしまいが」について、コンパイル可否(>>750で書いたコピーされてはは困る例)ではなく
「デフォルトコンストラクターで構築したものとそれをコピーして構築したものを概念的に同一視することの是非」こそが論点と主張している
その片鱗が>>749

769 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 16:06:42.41 ID:YTlik2k9.net]
printf("おちんぽじゅぽじゅぽ")

770 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 23:27:57.21 ID:SxEaPPM4.net]
catch のところで例外を再スローすると
再スローされた例外の型は、catchの所に書いたスーパークラスの型に
差し代わってしまうの?

771 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 23:50:44.58 ID:wfcExao2.net]
式無しのthrow;なら元の型のまま

772 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 17:28:15.16 ID:T5yR4ind.net]
「型に差し代わってしまうの?」
 ↓
「〜なら元の型のまま」

確かにその通りなのだが、「型」に着目するあたり、
どうも仕様を正しく理解していないのではという気がしてならない

773 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 22:43:53.34 ID:mdEe7tMk.net]
c++は難しい分ほかの言語より色々できると聞いたんですがどういうことができるのでしょうか?

774 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 22:56:09.11 ID:qtP/3v2i.net]
メモリアクセスができます

775 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 23:22:20.76 ID:sgaEl9jo.net]
難しいからではなく低級言語なのでハードウェアを直接操作するようなプログラムも書ける

776 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 00:10:04.15 ID:kxMmAO7v.net]
>>762
>>763
ハードウェアに直接操作やメモリアクセスですか
トンクスです



777 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 10:29:07.80 ID:TVPISEnD.net]
質問です
doubleの計算誤差ってちゃんと考慮必要でしょうか?
数桁の四則演算なら誤差なしと考えていいですか?

778 名前:デフォルトの名無しさん [2017/07/02(日) 12:30:57.68 ID:w2e8t6sv.net]
考慮が必要な時もあるし
不要な時もある

779 名前:765 mailto:sage [2017/07/02(日) 13:04:46.92 ID:hIH6r6Dk.net]
>>766
考慮必要ですか、、
ありがとうございます

780 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 14:24:20.03 ID:O/UEQvVu.net]
精度保証付きの演算ライブラリ使えば?

781 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 15:42:45.32 ID:1Me6IR2g.net]
4倍精度でも8倍精度でも多倍長でも整数でも有理数でも、使い方を間違えば誤差が問題になる

安直な処理で一番問題が発生しやすいのが整数丸めと比較
ごくごく微妙な誤差は何時でも含んでいると思うと良い

782 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 15:45:50.50 ID:1Me6IR2g.net]
>>768
大抵の演算ライブラリや演算器は精度の保証がある

783 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:02:14.06 ID:O/UEQvVu.net]
>>770
いや、そうじゃなくて浮動小数点計算誤差由来の誤差を解決するための分野とライブラリがあるんだよ
解をレンジで持ち続けるみたいな感じ
Accuracy guaranteed numerical calculation でググるとたくさん出てくるよ

784 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:12:27.01 ID:1Me6IR2g.net]
>>771
解をレンジで持ち続けて何か解決出来ると思うか?
>>765レベルの人が

785 名前:デフォルトの名無しさん [2017/07/02(日) 16:13:48.15 ID:9wrwY3nx.net]
mpir、gmpだろ。これ使えば円周率1万でも1億でも正確に計算できるはず

786 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:15:08.10 ID:1Me6IR2g.net]
有理数を有理数のまま保持している分には、四則演算では誤差が発生しない

もちろんオーバーフローしない条件で



787 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:16:17.16 ID:1Me6IR2g.net]
>>773
前提条件は数桁の四則演算

788 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:18:03.31 ID:1Me6IR2g.net]
doubleで計算を前提とし、誤差が問題となりやすい場面だけ教えてあげれば十分

789 名前:デフォルトの名無しさん [2017/07/02(日) 16:22:01.48 ID:9wrwY3nx.net]
実際、浮動小数点型の誤差は無視できないぞ。
float型とか、容量が少ないほど。情報処理の入門書の最初から出てくる話題だろ。

790 名前:デフォルトの名無しさん [2017/07/02(日) 16:22:48.13 ID:jIucKliD.net]
いい加減スレタイ変えろよ

【初心者姦ゲイ】C/C++室 Ver.100【姦狂依存OK】

791 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:36:49.35 ID:1Me6IR2g.net]
>>777
無視できる場合もあるし出来ない場合もある
floatや半精度があるのはそれで十分な場合があるから

792 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:37:57.96 ID:1Me6IR2g.net]
doubleより前に、整数演算の誤差を学ばなければならないレベルかも

793 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 16:42:50.35 ID:1Me6IR2g.net]
>>765
>>768
>>777
まとめて

794 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 17:12:26.96 ID:ZK/8Emjh.net]
コーディング規約で
float、doubleは使用禁止が正解

795 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 18:20:54.13 ID:p749GQFM.net]
1/3の結果に3を掛けても1にならないとか、
0.1を10回足し合わせても1と一致しないとか、
その辺りは分かっているのかな?

796 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 18:24:15.36 ID:p749GQFM.net]
>>782
質問者は浮動小数点数の演算のどこに注意点があるか分かっていない状態で、
いいから浮動小数点数は使うな、
というのは回答として乱暴過ぎるだろう。



797 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 18:38:08.40 ID:FdY2ZCkQ.net]
・同じ計算をするんでも
なるべく精度の高いアルゴリズムを選ぶ
・0との比較では、絶対値と計算機epsilonの比較を用いる

他にある?

798 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 18:50:30.43 ID:MoO3L/4V.net]
>・0との比較では、絶対値と計算機epsilonの比較を用いる

何かとごっちゃになってる気がする。
計算の収束判定等で用いるのは機械イプシロンじゃない。

799 名前:デフォルトの名無しさん [2017/07/02(日) 19:09:48.56 ID:MlDTzv8m.net]
>>785
0との比較に限らず、比較には絶対値の大きさに応じたεの考慮が必要。

800 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 19:18:00.04 ID:ttjnRDkm.net]
機械イプシロンはあくまでも最大値だよね

801 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 20:17:22.84 ID:+3axEb/N.net]
初めて知りました

802 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 20:44:23.29 ID:+3axEb/N.net]
数桁のdouble計算で誤差が問題になる場面では「誤差が存在する」ことが問題であって、精度を上げることは(誤差の大小は)本質的な解決でないような
(3.1 - 2.9 > 0.2) != (3.1 > 2.9 + 0.2)みたいな

803 名前:デフォルトの名無しさん [2017/07/02(日) 21:37:11.95 ID:9wrwY3nx.net]
計算順序で誤差が違ってくるのは教科書でよくかいてある

804 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 22:54:19.38 ID:ynDhLM7Z.net]
情報処理資格に受かっていない人が、C/C++ をプログラミングするなど、10年早い

C/C++ は、直接デバイスを扱うから、自作パソコンを作れるぐらいに、
かなりパソコン内部の装置の仕組みを、知っていないと無理

さらに組み込みなら、高度情報処理のエンベッド資格も必要

805 名前:デフォルトの名無しさん [2017/07/02(日) 22:59:43.93 ID:9wrwY3nx.net]
そんなことはない

806 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 22:59:50.00 ID:MoO3L/4V.net]
お前は試験に受かってからプログラミング始めるのかw



807 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:03:16.06 ID:UYpoTCPe.net]
パソコンって、アドレスバスの、メモリ読み書きで、
デバイスを、直接操作するのか?
それとも、アドレスA0000に文字を書き込むのか?
その知識、30年くらい、遅くね?

808 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:32:00.58 ID:1Me6IR2g.net]
>>782
整数も除算に誤差があるから禁止

809 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:32:37.56 ID:1Me6IR2g.net]
>>783
整数でも1/3*3は1にならない

810 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:35:11.82 ID:1Me6IR2g.net]
>>785
コストも考えなさい

epsilonは>>786の通り
補足すると、
収束判定に限らず、普通はepsilonで判定しない

811 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:36:02.92 ID:iWsKHD5Z.net]
0になるし誤差はないな

812 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:36:20.12 ID:1Me6IR2g.net]
>>792
情報処理資格www
なんの役にもたたない

813 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:36:31.36 ID:iWsKHD5Z.net]
って触れちゃダメな奴だったかすまん

814 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:38:56.12 ID:+3axEb/N.net]
前回、共用体の非アクティブメンバーアクセスが許されるcommon initial sequenceの条件である「型の互換性」に目を付けたレスを見た時は
>>792がもう少し見所の有る奴だと思っていた(過去形)

815 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:51:33.15 ID:p749GQFM.net]
>>797
すまん、1/3は1.0/3とか書くべきところだったな。 []
[ここ壊れてます]



817 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:53:35.08 ID:1Me6IR2g.net]
いやいやそこじゃなくて

818 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:55:20.40 ID:1Me6IR2g.net]
1.0/3.0*3.0 が 1.0にならないことがある
1/3*3 が 1にならない

小数演算特有ではない

819 名前:デフォルトの名無しさん mailto:sage [2017/07/02(日) 23:59:40.73 ID:1Me6IR2g.net]
0.1を10回足しても1にならないことがあるって言うのも小数特有ではない

0.1は普通のfloatやdoubleでは表現できず、コンパイル時に近似値に変換する
この意味では以下と本質的には同じ

int a = 0.1;
int b = a * 10;

820 名前:デフォルトの名無しさん [2017/07/03(月) 00:01:24.04 ID:UYk8Gv77.net]
>>792
自作って高価なプラモデルだぞ。。。
夢見過ぎ。
直接ってもなぁ。。。
昔はx86限定で直接レジスタ弄れる命令あったんだが、その命令は今じゃ優先的にレジスタ使ってね☆って意味に変質してるもんなぁ。。。
今のCは思ってるより下級言語じゃ無いぞ。
普通の言語よりゃハードに近いけどさ。

821 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 00:02:29.57 ID:Ds1QZZUB.net]
doubleがintに比べて誤差が少ないため、誤差を気にせずに使ってしまいやすい

だから注意の意味を含めて誤差が大袈裟に語られる傾向がある

当然整数の方が(普通は)はるかに誤差が大きい

822 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 00:03:12.56 ID:NRAuceWo.net]
>>805
それは知ってるけど元の質問者がdoubleの演算誤差について聞いているのだから、整数の除算の件は話が外れていると思う。
この手のスレに良くあることだけど、元の質問から勝手に話が発散して何を目的に議論しているのかが分からなくなるね。

823 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 00:04:40.53 ID:Ds1QZZUB.net]
いやだから、

気を付けるべき点は >>769 の後半にまとめたつもりだけど

824 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 00:10:25.95 ID:Ds1QZZUB.net]
よくやりがちな例は、

for (double a = 0; a <= 1 ; a += 0.1)

みたいな比較と

double a = sqrt(3);
double b = a * a;
int c = b;

みたいな整数丸め

825 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 00:12:35.84 ID:Ds1QZZUB.net]
これは、
double に限らす10000桁精度の演算ライブラリでも全く同じ問題がほぼ同じ率で起こる

826 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 00:14:47.47 ID:Ds1QZZUB.net]
前者はループが10回か11回かはバクチで、
後者はcが2になるか3になるかはバクチ



827 名前:デフォルトの名無しさん [2017/07/03(月) 00:19:44.20 ID:UYk8Gv77.net]
なんかそんなの読んだことあるな。
計算結果は精度の範囲内だけど、計算途中で精度超えて結果に誤差が出る的な。
なんか対策あったぞ。

828 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 04:06:04.60 ID:yzYakBEJ.net]
>>798
普通は計算機epsilonで判定は
しない、これはわかりました
じゃあどんな値で判定するんですか?

829 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 04:57:07.32 ID:BlNCaFmm.net]
>>792
カーニハンもリッチーも受かっていないようだが?

830 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 08:32:52.95 ID:rvaVDuHz.net]
>>815
対象の値が含み得る誤差を用いる。
機械イプシロン(を指数によってスケールしたもの)は誤差の下限を示しているだけに過ぎない。

831 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 11:17:36.99 ID:rWGDP/Vn.net]
下限ではない
下限はその半分

832 名前:デフォルトの名無しさん [2017/07/03(月) 19:44:02.70 ID:BsrmCust.net]
VisualC++とそれ以外用とで別の関数を用意して、プリプロセッサを使用してコンパイル時に選択したいと思っています
この場合、関数全体を#ifdef _MSC_VER〜#endifで囲うことになるのですか?
もう少しきれいな書き方があれば教えてください
よろしくお願いします

833 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 20:12:56.57 ID:oiFj/hKr.net]
>>819
機種依存部分をライブラリ化してリンク時に差し替えるとか

834 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 20:21:04.11 ID:tl3oQzgh.net]
関数全体を切り替えたいなら関数全体を複数記述するしかあるまい

部分的に違うだけならその違う部分的だけ切り替えればいい

関数全体を複数記述する方法はいくつかある

835 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 00:10:04.57 ID:2/r2iAfu.net]
>>819
別にそれでいいじゃん。大量にあるならファイル分ければいいし

836 名前:デフォルトの名無しさん [2017/07/04(火) 09:38:28.01 ID:GKwjzP9N.net]
class A {}
int main{
A a; //c++
A a = new A(); //c#
}
このc++の「A a;」は、c#の「A a = new A();」と同じ意味ということでいいんですか?



837 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 10:10:55.61 ID:A8K7ipT2.net]
>>823
同じになるねぇ
あえて違う点を挙げるとすればAが作成される領域がスタックかヒープか
でも意識するほどのことじゃない

838 名前:デフォルトの名無しさん [2017/07/04(火) 10:53:00.81 ID:GKwjzP9N.net]
>>824
スッキリしました。ありがとうございます。

839 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 12:24:06.77 ID:rriFyG5E.net]
いやC++やるならスタックかヒープかは意識しなきゃだめだろ
deleteどうすんの

840 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 12:53:41.35 ID:Tv7aUxog.net]
>>824
> Aが作成される領域がスタックかヒープか
いや、それは意識しろよ

841 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 16:07:16.69 ID:BdJEhj1W.net]
ヒープはC#の方だろ、とりあえず意識しないでも

842 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 17:16:06.09 ID:RU97axJ4.net]
C#はdelete書かないんだからC++なら
deleteが不要な「A a;」を同等と捉えるのが筋
配置場所なんかどうでもええ

843 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 18:37:27.41 ID:eP5xPbfu.net]
newだとスコープ抜けても残るんじゃ?

844 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 18:44:00.48 ID:xAcMjOR1.net]
C#だとスマポみたいになるんかね

845 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 19:56:18.89 ID:3bDdeHlE.net]
c#はGC管理、classは参照型

846 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 20:17:33.06 ID:olJiM2Cb.net]
>>829
寿命が全然違うじゃないですかぁ



847 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 20:31:05.28 ID:L7t36fm1.net]
コストも

848 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 21:02:27.05 ID:V6j6UQbw.net]
で?

849 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 21:52:57.05 ID:+pBAjacr.net]
すげえ考え方の奴が出てきてワロッシュ

850 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:13:30.60 ID:kiqPrlXB.net]
寿命だのコストだの言うけど
そんな実相依存どうやって見積もるの?
無意味な揚げ足取りはやめたら?

851 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:14:59.82 ID:VwPftttd.net]
え?

852 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:17:16.01 ID:TrkY+sIz.net]
C++ 側は実装依存な部分あるっけ? C#側はよーわからんけど

853 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:19:25.34 ID:dCdz+uzl.net]
こっちはC++スレだぞ?C++でスタックとヒープのコストや寿命の違いを意識する必要がないってマジでいってるのかよ

854 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:29:39.22 ID:kiqPrlXB.net]
newの方はC#のって前置きがあるだろうが
よく読め
まあ元々の質問もあれだが

855 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:42:25.19 ID:IS9gvNe4.net]
コストは
c++のnew>>(超えられない壁)>>c#のnew>スタック
全然違うというほどでもないし

856 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:02:36.26 ID:olJiM2Cb.net]
コストは置いておいたとしても寿命はどうするんだよ

平たく言うと
「マニュアル車の1速は、オートマ車のDと同じ意味ですか?」
って質問だぞ
それに対して
「オートマ車はDで発進するからマニュアル車なら1速と同等ととらえるのが筋
 速度が出た後のことなんかどうでもええ」
ってのはなんか違うだろ

メモリ管理に関してはC++はマニュアルでC#はオートなんだから
こういうたとえになるんだよ



857 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:10:09.31 ID:VgVQ93XC.net]
>>837
おまいさん資格持ちじゃないよな?な?な?

858 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:15:08.21 ID:olJiM2Cb.net]
あと、C#はJavaと違って構造体が使えてこれは値型になれるから
スタックに確保できる
なんで、C++の A a; はどちらかというと、そちらに該当するんだよ

で、C#のA a = new A(); はというと
delete が必要という一点を除けば C++ の A *a = new A();に相当するんだよ
こんなこと当たり前だろ

859 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:23:27.06 ID:9HpxJyun.net]
>>845
実装と目的を一緒にすんなよタコ
単に「Aのインスタンス生成するコード書いてみ」
といわれたら>>823になるだろjk
意味が同じってのはそういうこった

860 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:33:11.25 ID:AVhuZxl1.net]
>>842
えっ???
そんな馬鹿な

861 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:38:27.02 ID:olJiM2Cb.net]
>単に「Aのインスタンス生成するコード書いてみ」

ってのはお前が勝手に言ってることだろ

元は
>このc++の「A a;」は、c#の「A a = new A();」と同じ意味ということでいいんですか?


862 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:38:59.24 ID:AKPIjSm8.net]
超えられないかはともかく、newに限って言えばGC言語の方が低コストでもおかしくない。

863 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:39:54.18 ID:kiqPrlXB.net]
厳密にどうかじゃないんだよ
初心者がこれから言語を勉強していくのに
より得になる方はどっちだってことよ

GCだからー、ヒープだからーって
そんな答えおよびじゃないっつーの

864 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:40:16.44 ID:AVhuZxl1.net]
実際に試してから言えよ

865 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:40:38.87 ID:AVhuZxl1.net]
>>842
>>849

866 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:43:53.74 ID:olJiM2Cb.net]
どの程度の初心者かわからないだろ
C#と比べてるってことは既にC#をそこそこマスターしているかもしれないだろ
その状態でC++に手を出そうとしていたとしたら、どうだ?
C#とC++の違いなどを書いたほうが良いだろ



867 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:46:31.14 ID:tvZqc0j8.net]
>>850
初心者だからこそ、上っ面の文法の違いだけで捉えて、こうすればだいたい同じとか説明する前に、
前提としてメモリ管理の考え方が違うことを理解してもらうのは重要だろう。

868 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:47:41.62 ID:AVhuZxl1.net]
違うものは違う

869 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:48:12.47 ID:VwPftttd.net]
もういいよ、まとめると

C++ではインスタンス生成(アドレスの決定)は二種類のやり方がある
A a;
A* pa = new A();
前者はスタックのアドレスが割り当てられ、後者は通常はヒープのアドレスが割り当てられる。
前者はスコープが寿命で、後者はdelete pa;されるまでが寿命。

C#ではインスタンス生成の方法は値型、参照型でそれぞれ一種類ずつしかなく、
A a; //struct A
B b = new B(); //class B
前者はスタックのアドレスが割り当てられ、後者はヒープのアドレスが割り当てられる。
前者はスコープが寿命で、後者はdelete pa;されるまでが寿命。

どれとどれを同じと思うかは人それぞれ。
終了

870 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:50:58.52 ID:TrkY+sIz.net]
C# の後者の寿命は? delete pa は C++ だよね

871 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 23:53:27.36 ID:VwPftttd.net]
>>856
おっと、間違えた
C#の後者の寿命はGCに回収されるまででした

872 名前:デフォルトの名無しさん mailto:sage [2017/07/05(水) 00:46:01.47 ID:EyHtcvE8.net]
>>856
ご苦労さん

何故この話題がここまで伸びたんだろ

873 名前:デフォルトの名無しさん mailto:sage [2017/07/05(水) 22:56:44.72 ID:UhWlQCq1.net]
異なる考えの言語同士であるため対応が自明でないという事実を無視して
自分の考える「同じ意味」の解釈を押し付けるからに相違ない

>C#ではインスタンス生成の方法は値型、参照型でそれぞれ一種類ずつしかなく、
>A a; //struct A
なるほどこうやって言語仕様を確認せず想像をたれ流すので世の中が嘘だらけになるのだな

874 名前:デフォルトの名無しさん mailto:sage [2017/07/05(水) 23:29:36.43 ID:0KIeSgEp.net]
>>860
ん、C#のほうはそれであってるだろ
StringとかDateTimeみたいな一部の例外を除けば

875 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 01:22:17.04 ID:AOJFjP+S.net]
>異なる考えの言語同士であるため対応が自明でないという事実を無視して
>自分の考える「同じ意味」の解釈を押し付けるからに相違ない

ん?だからそれに基づいてほとんどの人は
「違う意味だよ〜」って言ってたんじゃなかったの?
一部の人が「同じような意味だよ〜」って言ってただけで
それに反論する流れだったでしょ
だから「同じ意味」の解釈の押し付け合いはしてなくて
同じ意味だよ vs 違う意味だよ
だったと思うけど

876 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 05:15:51.23 ID:5a/RGiY/.net]
わざわざ堅苦しい言葉選んで俺偉いアピール



877 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 05:29:37.28 ID:T7F4pxe5.net]
同じ様な意味と同じ意味は違う
さらっと言葉をすり替えるなよ
まったく卑怯な奴よの
(つーか同じ様な意味とも言っていない)

878 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 08:09:44.50 ID:TSgBvSRK.net]
>>862
>だから「同じ意味」の解釈の押し付け合いはしてなく
「同じ意味」の基準について合意していないのに「ここが違うから別」とだけ言うのは「同じ意味」の解釈の押し付けに他ならないと思うのだが、
もう少し日本語の字面でなく意味を理解した方がよいのではないか

>「違う意味だよ〜」って言ってたんじゃなかったの?
 →Yes
>同じ意味だよ vs 違う意味だよだった
 →Yes

879 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 08:11:58.37 ID:rcg+ZZ7N.net]
違うものは違う

880 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 08:12:32.60 ID:TSgBvSRK.net]
>>861
合っているかと訊かれれば合っていないので、言語仕様を読むか当該のスレッドで訊くのが良いのでは
あとStringやDateTimeの例外というのが何なのかよくわからなかった

881 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 08:18:45.02 ID:QfwLuwwY.net]
>>867
合ってるから消えろ
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/new-operator

882 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 14:54:52.15 ID:m/Ia1fy1.net]
まだやってんのかよ
おまいらのこだわりはスゲェな

883 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 22:06:42.25 ID:TSgBvSRK.net]
リンク先を見て思ったのだが
こだわりじゃなくて罵られることに喜びを覚えるマゾなのではないかと言う気がした

884 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 22:08:34.16 ID:JPWXM8i2.net]
>>870
正しく指摘できないのならレスしないほうがいい
あなたの思ういちばんすこいC#の仕様の世界で生き続けてくだはい
アーメン

885 名前:デフォルトの名無しさん mailto:sage [2017/07/07(金) 11:58:06.67 ID:C1hAccX9.net]
俺は、プログラミングなんて存在しない世界で生きたい

886 名前:デフォルトの名無しさん mailto:sage [2017/07/07(金) 12:21:24.92 ID:2bQkb9bH.net]
生まれてくるのが100年くらい遅かったようだな



887 名前:デフォルトの名無しさん [2017/07/07(金) 12:21:27.14 ID:xvg52mfm.net]
プログラマ辞めれば良いだけやん。

888 名前:デフォルトの名無しさん [2017/07/07(金) 13:29:12.14 ID:1UwaMcEr.net]
c++
英語を読める
btcをトレードしたことがある

仮想通貨の開発に参加してみたい方
レスをお願いします

889 名前:デフォルトの名無しさん mailto:sage [2017/07/07(金) 15:01:32.91 ID:u5D8E4qs.net]
>>875

んで?どうすりゃええの

890 名前:デフォルトの名無しさん [2017/07/07(金) 16:03:32.34 ID:1UwaMcEr.net]
>>876
お返事ありがとうございます

通貨名
raiblocks

simple
instant
fees 0(送金手数料がかからない)

web
https://raiblockscommunity.net/

slack
https://raiblocks.slack.com

slackに参加
#developmentにて、開発に興味がある旨の書き込みをしてください(英語で)

891 名前:デフォルトの名無しさん mailto:sage [2017/07/08(土) 21:39:10.74 ID:dFvfrYOE.net]
プログラミングなんて底辺ドカタの仕事
そのうちAIがやれるようになる

892 名前:デフォルトの名無しさん [2017/07/08(土) 22:33:35.86 ID:lbAgDi9M.net]
アドバイスさんくす

893 名前:デフォルトの名無しさん [2017/07/09(日) 16:06:32.28 ID:EeQkMvgZ.net]
ポインタそのものにオブジェクトってできるんでしょうか?
例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
int array[3];
int *p = array;
int **pp = &p;
for(i = 0; i < 3; i++)
{
printf("&array[%d] : %d : %d\n", i, &array[i]);
}
&array[0] : 2293472
&array[1] : 2293476
&array[2] : 2293480
&p[0] : 2293472
&p[1] : 2293476
&p[2] : 2293480
&pp[0] : 2293468
&pp[1] : 2293472
&pp[2] : 2293476
ppが参照しているpのオブジェクトの位置が、arrayのオブジェクトのアドレスと全く同じ位置にあります。
1つのアドレスが2つのオブジェクトをもてるのか、ポインタ自体にオブジェクトは生成されないのか
他の要素でそうなってるのかわかりません。どなたか回答宜しくお願いいたします。

894 名前: ◆QZaw55cn4c mailto:sage [2017/07/09(日) 16:13:17.36 ID:VF1qtZ3L.net]
>>880
その出力を一挙に得られるプログラムを示せ,アドレスはプログラムの実行ごとに変わる可能性がある

895 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 16:20:52.70 ID:v/7piv3Y.net]
>>880
pとarrayは異なるオブジェクトだから確認方法が間違ってる

896 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 16:25:25.83 ID:3Luqddjj.net]
一つのポンタを複数のオブジェなんて当たり前
int z;
int * p = &z;
int * p2 = p;
int * p3 = p2;



897 名前:デフォルトの名無しさん [2017/07/09(日) 16:43:15.93 ID:EeQkMvgZ.net]
>>881 これでいいでしょうか?
int i;
int array[5];
int *p = array;
int **pp = &p;
printf("array : %d\n", array);
for(i = 0; i < 5; i++) {
printf("&array[%d] : %d\n", i, &array[i]);
}
printf("p : %d\n", p);
for(i = 0; i < 5; i++) {
printf("&p[%d] : %d\n", i, &p[i]);
}
printf("pp : %d\n", pp);
for(i = 0; i < 5; i++) {
printf("&pp[%d] : %d\n", i, &pp[i]);
}
>>882
&ppでpのオブジェクトのアドレスを取得できると思ってたんですが違ったんですか?
>>883
すいませんまだそれを理解するのは難しいです。

898 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 16:44:50.47 ID:3Luqddjj.net]
何がわからんのや。ようわかるやんけ

アドレス : オブジェクト : 値 : オブジェクトの型
2293464 : pp : 2293468 : int**型
2293468 : p : 2293472 : int*型
2293472 : array[0] : ? : int型
2293476 : array[1] : ? : int型
2293480 : array[2] : ? : int型

899 名前:デフォルトの名無しさん [2017/07/09(日) 16:51:56.41 ID:EeQkMvgZ.net]
>>885
つまりポインタpは配列を参照してもp自体は配列型ではなくて単体(?)のオブジェクトだということでしょうか?

900 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 16:56:52.17 ID:3Luqddjj.net]
>>886
もちろんや。
pはarrayとは別のアドレス2293468にある
int*型の独立したオブジェやで

901 名前:デフォルトの名無しさん [2017/07/09(日) 17:01:52.64 ID:EeQkMvgZ.net]
>>887
ありがとうございます!5時間以上つまってたのが一気にクリアになりました!

902 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 17:16:44.02 ID:Uu/MlKNR.net]
>>880
> &pp[0] : 2293468
これはpのアドレス
> &pp[1] : 2293472
> &pp[2] : 2293476
pp[1], pp[2]は存在しないからアクセスしちゃダメ
たぶん
2293464: pp
2293468: p
2293472: array[0]
2293476: array[1]
2293480: array[2]
みたいなメモリ割り当てになってるんだろうな

903 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 22:31:05.00 ID:WeAgIUgc.net]
>>889
意味のある値が取れないだけで
別にアクセスしても問題ねーだろ

904 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 23:28:17.80 ID:1po+7Ikw.net]
>>890
正しく割り当てられたオブジェクトのアドレス以外を指しているのなら、アクセスしてはいけないだろう。
889の例ではたまたまpp[1]が表す位置がスタック上の有効なアドレスでアラインメントも問題無いだろうけど、
例えばppがスタックやヒープの末端のオブジェクトを指していたら、pp[1]にアクセスしたらNGということもある。

905 名前:デフォルトの名無しさん mailto:sage [2017/07/10(月) 06:50:03.40 ID:ZgtWUD/x.net]
中身にアクセスしてなくてただのアドレス計算だぞ

C/C++言語的にはNGだけど、それで例外が発生するとはなかなか考えにくい
もしかしたらビルド時に警告を出してくれるかも

906 名前:デフォルトの名無しさん mailto:sage [2017/07/10(月) 06:54:34.99 ID:t9ouoliu.net]
アドレス計算自体はOKだと思うよ。



907 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/07/10(月) 07:04:04.53 ID:Ols/UzwR.net]
配列ならば確保した数+1までのアドレス計算はやっても大丈夫&整合がとれる位置に配置されている

908 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/07/10(月) 07:05:58.47 ID:ZgtWUD/x.net]
無効エリアのアドレス計算
値不定か動作不定かどっちだか忘れた

これらをOKと呼ぶならOKなんでしょう

909 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/07/10(月) 07:13:12.05 ID:ZgtWUD/x.net]
>>894
-1も有効だとうれしい事があるけど、-1はダメなんだよね

910 名前:デフォルトの名無しさん mailto:sage [2017/07/10(月) 22:27:20.57 ID:WIOZS2V0.net]
>>894
つまり式「&pp[1]」は大丈夫でないと?

911 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 13:12:04.11 ID:eWIFW1BW.net]
ppは配列じゃないだろ

912 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 18:17:43.80 ID:L5b0rMHK.net]
これがアスペいうやつだな
 配列でないオブジェクトも要素数1の配列として考える仕様→よくご存知で
 pは配列じゃないからな→わかる
 ppは配列じゃないからな→頭悪いな
 ppは配列じゃないだろ→アスペ

913 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 20:17:20.41 ID:gS+YojZ9.net]
ん?まったくよくわからんのだが、だれか解説して

>配列でないオブジェクトも要素数1の配列として考える仕様
↑まずこれがよくわからない
配列じゃないオブジェクトといえば、例えばint i;などは配列としては扱えないよね

で、下二行の意味も分からない

914 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 22:08:22.53 ID:qjau/h5c.net]
配列かどうかは関係なく、オブジェクトの後ろのアドレスは計算も出来るし比較も出来る

915 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 22:10:11.51 ID:qjau/h5c.net]
>>894は配列じゃない場合に関しては何も言ってないから間違いではないが
わざわざ配列と書いてるので配列以外は違うと思ったかわからなかったか
だろう

916 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 22:14:58.67 ID:qjau/h5c.net]
>>897
「つまり」が意味不明
>>894は配列じゃない場合には何も言ってない
「大丈夫でない」は正しい

>>898
配列じゃないから何?

>>899
実際には配列ではない



917 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 22:28:18.47 ID:gS+YojZ9.net]
いや、それは俺も思ったんだが
ppが配列じゃないのは当たり前なんだが(てかポインタだし)
おそらくはそんなことは問うてないって言いたいんだと思う

つまり、ppが指している先が何であるかが問題であるから
配列か配列じゃないかを問うべきはppではなくppの指している先である「p」であろうと
同じことをもう一度言うけど
pp[1]としたとき問題になるのはppの指してる先がどうなっているかで
今回の場合はそれは「p」であるから
正しくは、「ppの指してる先のpは配列じゃないだろ」って言うべきっていう主張かと

918 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 23:00:18.82 ID:634mVLA8.net]
>>901
なら&pp[1]も大丈夫なんじゃね?

919 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 07:01:19.46 ID:Mf+sZV2C.net]
pp[1]の時点で動作不定

正しく動かない環境はもしかしたら存在しないかもしれないけど

920 名前: ◆QZaw55cn4c mailto:sage [2017/07/12(水) 07:26:19.94 ID:9q9UgJkW.net]
>>880
ん、最初にもどってメッセージを書くとすれば、こうなるかな

>ポインタそのものにオブジェクトってできるんでしょうか?
私が意味を取り違えているかもしれないが、「できない」
ポインタを取得したからといって、オブジェクトが生えてくることはない
あくまで、先にオブジェクトを確保した上で、それに対してポインタを設定する手順をとる

>例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
array を確保しているので、p は array 確保分(p 〜 p + 3)だけプログラムとして意味がある。
pp は p 一個分だけ意味がある。すなわち *pp = p、でも pp[1]= *(pp + 1) は確保していない領域を指すのでこの表現は使ってはいけない

&pp[1] と書くとなにがしかのアドレスを生成するが、それは使えない
アドレスを生成できるからといって、その領域が意味のあるものとは限らない

>>881 では意味のないことを求めてしまいごめんなさい

921 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 08:20:30.93 ID:SNfdy8To.net]
>>906
>pp[1]の時点で動作不定
ちなみにそれを規定する規格の記述はどこ?
Cでは明確に禁止されているようだがC++では見つけられなかった

922 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 09:01:11.94 ID:6a7v2dDL.net]
https://www.google.com/search?q=%22behaves+the+same+as+a+pointer+to+the+first+element+of+an+array+of+length+one%22

923 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 09:10:12.68 ID:6a7v2dDL.net]
https://www.google.com/search?q=%22If+both+the+pointer+operand+and+the+result+point+to+elements+of+the+same+array+object%2C+or+one+past+the+last+element+of+the+array+object%22+%22otherwise%2C+the+behavior+is+undefined%22

924 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 13:20:57.39 ID:ahqaJGrL.net]
>>907
まとめとしてはそれでいいし否定するわけじゃないけど、若干気になるのは
1.ポインタ自身もポインタというオブジェクトじゃないのか?
2.末尾+1のアドレス(を指すポインタ)はデリファレンスできないけど、大小比較には使えるのでは

925 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 13:41:52.51 ID:uqOuLEsE.net]
そんで俺はちょっと思ったんだけど
Cはポインタを配列のように扱えるのが便利だなぁと
逆に配列名を参照したらポインタ値になるし
あと他、関数ポインタを普通の関数のように扱えたり
逆に関数名を参照したらポインタ値になったり
意味の上で別解釈しようがないからそれでいいだろ、的な
二つに共通しているのは
(1)参照しても意味のある値が得られなそうなシンボルは自動的にポインタ値に成り下がってもらおう
(2)その上でポインタに対していろいろな演算 ()[] が出来るようにしておこう
というもので、これでシームレスになるしタイプも減るから便利だろう、と
でもそういう方針なんだったら何故我々は「.」と「->」を
使い分けなきゃならないんだ?と思わんこともない
意味の上で別解釈できたり不明瞭だったりは無いのに
ただ、Cの構造体は(1)を満たしていない
もし(1)を満たすようにしてしまうと、構造体を参照するとポインタ相当に成り下がってしまうので
代入演算子で代入したり、関数に値渡ししたりが出来なくなる
ただし、C言語がそのような仕様になっていた可能性は十分にあると思う
というのも配列がまさにそうであって、代入でコピーできないし、関数に値渡し出来ないから
アセンブリレベルでは配列も構造体もレジスタに入りきらないという意味では同じで
先頭アドレスからのオフセットでアクセスするのは同じであるから
そういう着想に基づけば、構造体も配列と同じようにポインタに成り下がる仕様に
なっていた可能性はあると思う
構造体は代入できないからmemcpyしろ、がCの常識だった可能性はある
そんで、「.」演算子は構造体のポインタに対して有効、となって、「->」は無くなる
で、そうはしなかった代わりに「->」演算子が有る、とも取れる

926 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 13:42:12.78 ID:uqOuLEsE.net]
気まぐれか、意図的か、歴史的事情か、生い立ちに由来するものか、知らんが、そうなっている
だが実際これが大当たりで、もしそうじゃなかったらC++が全く成り立ってこない
C++のクラスはCの構造体を拡張したものだが、オブジェクトが勝手にポインタに成り下がる仕様だと
代入したり、関数のreturnで値として返したりができない
となれば独自のクラスを定義して、まるで基本型のように振舞わせたり、メソッドチェーンをしたりが出来ない
もしやるとしたらnewして返すしかないので、GCが無いとどうにもならなかっただろう
(実際C++とCの配列は相性が悪く、std::vectorかstd::arrayを使わないと上手くいかない場合も多い
 ポインタ相当に勝手に成り下がってしまうので代入ができない)
ただ、このことが本当に良かった事なのかどうなのかは分からない
GCは有ったほうが良かったかもしれないし、C++の代入やコピーコンストラクタに関する話題は後を絶たない
他の言語のほとんどがオブジェクトを参照で扱うのを見てると
Cの配列のように勝手にポインタに成り下がって代入できない考え方のほうがスタンダードなのかもしれない
C++のクラスは、状況に合わせて、これを選べ



927 名前:驕Aという立場になってるが
もしCの構造体が配列のような仕様だったなら、どうなっていたか分からなかった事を考えると感慨深い
[]
[ここ壊れてます]

928 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 13:43:43.81 ID:uqOuLEsE.net]
よくよく考えてみればなかなかに奇妙
まず常人が普通に考えたら、配列や関数名を参照したらポインタ値が得られることにしようっていう発想がない
プログラマは基本的に几帳面で、整合性を気にする生き物だから
ポインタ値は「&」を付けたら得られることにしよう、と決めたのだから
&arrayとか&funcとか書かせたくなるのが普通だろう
そして(*array_ptr)[1]とか(*func_ptr)()とか書かせたくなるものだろう
ところがCは、レジスタに乗らないもの、演算できないもの、を
勝手にポインタと同等に格下げするというルールを設けたうえで
そのポインタに対して各種演算子を定義することで整合性を保ちつつタイプ数を減らすという
ウルトラCをやってのけた
ここまででも俺ではちょっと思いつかないなーと感心するわけだが
逆にこんなすごいことを思いついたんなら、全部このルールで行きたくなってくるのが凡人
その方が整合性がありそうな気がするから
なのに構造体はそうなっていなくて、代わりにアロー演算子が定義してある
だから配列と違って構造体は代入ができるし関数に値渡ししたり、値で返したりが出来る
それはそれで奇妙なことだと思ったりもするが、とにもかくにも
この辺がC++の基本方針や特色にものすごく影響が出てる
GCが無いのもそうだし、最近でも右辺値参照が追加されたりとか、結構尾を引いていて
C++特有のややこしさの一端でもあり、他には代えがたいメリットでもある
ある意味で、Cの配列の考え方のが、他言語のオブジェクトの考え方に近いというのが何とも
そして構造体をベースとするC++とCの配列は相性が悪いという
C言語の功罪は凄い

929 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 13:48:37.49 ID:vq82ZnF5.net]
3行で(´・ω・`)

930 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 17:58:12.38 ID:SNfdy8To.net]
駄レスの関係無いリンク先をまじまじと読んでしまった
日本語でレスが書かれていない時点で読む価値が無いと判断すべきだった

931 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 18:07:40.57 ID:SNfdy8To.net]
>>915
「初期のK&Rが至高と考えるボクは
構造体がコピーできる仕様にハンタイです」

932 名前:デフォルトの名無しさん [2017/07/12(水) 18:19:22.64 ID:Oma/x2r0.net]
ユーザーヘッダーファイルを作って
#include<stdio.h>
#include<math.h>
#define PI 3.14
double r;
void nyuuryoku(void) {
printf("半径を入力してください。\n");
scanf("%fl", &r);
printf("%f\n", r);
return;
}
double keisan(void) {
printf("%f\n", r);
return PI*pow(r, 2);
}
と書いてprintfでrを観察してみたんですがscanfでrに数値を入力しているはずなのにrに何も反映されていないことがわかりました。
rはグローバル変数として扱われていると思うのですがなんでrの値が変わらないんでしょうか?

933 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 18:34:20.99 ID:+I30gFZ0.net]
void nyuuryoku(void) {
char buf[256];
printf("半径を入力してください。\n");
if(NULL==fgets(buf,sizeof(buf),stdin)){
  printf("ちゃんと入力しろやボケ\n");
  return;
}
sscanf(buf,"%fl", &r);
printf("%f\n", r);
return;
}

934 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 18:44:41.01 ID:FRCEttse.net]
>>918
× scanf("%fl", &r);
○ scanf("%lf", &r);

935 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 18:45:48.34 ID:+I30gFZ0.net]
%lfちゃうか?

936 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 18:46:07.89 ID:+I30gFZ0.net]
失礼しますた



937 名前:デフォルトの名無しさん [2017/07/12(水) 18:49:05.30 ID:Oma/x2r0.net]
oh....
コンパイラも見逃してくれてたからそんなミスとは思いませんでした(´エ`;)
ありがとうございました

938 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 19:24:59.74 ID:iSKiMIM1.net]
-Wallつけるか、clang使え

939 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 21:38:59.46 ID:Q4X+sAyq.net]
>>912-914
なんか色々勘違いしてるしどうでもいいから続きはチラウラで頼むわ

940 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 23:05:57.46 ID:2e79StFo.net]
最近のチラシは両面印刷で困る

941 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 00:31:49.82 ID:/oMuxl/G.net]
>>907
>pp[1]= *(pp + 1) は確保していない領域を指すのでこの表現は使ってはいけない
Cの規格をよく読み直したらそうでもなかった

942 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 01:06:35.55 ID:+2MHjXyv.net]
>>912-914は基礎的なところで間違った理解をしていると
そのうえに乗っかるすべてのものについて間違った理解をすることしかできなくなるという見本のようだ

943 名前: ◆QZaw55cn4c mailto:sage [2017/07/13(木) 06:27:44.49 ID:NDMOLt7F.net]
>>927

>>880
int **pp = &p;
でpp[1] は書いちゃだめだろう?

944 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 07:12:43.09 ID:/oMuxl/G.net]
>929
その書いちゃダメを規定する6.5.6p8には「that is evaluated」という条件がある
evaluateはメモリアクセスの有無と関係無く基本的に全て行われるはずだが
6.5.3.2p3の例外既定により該当しないばかりか「&*」が省かれるとある

945 名前: ◆QZaw55cn4c mailto:sage [2017/07/13(木) 08:39:26.58 ID:045lcfaT.net]
>>930
シンタックスではなくセマンティクスというわけですか‥ありがとう

946 名前:デフォルトの名無しさん [2017/07/13(木) 18:16:27.80 ID:PDgj9Ebq.net]
#include<stdio.h>
#include<string.h>
#define NUM 10
int main(void) {
int length;
char name[NUM * 2 + 1];
char family_name[NUM + 1];
char first_name[NUM + 1];
printf("姓を入力してください\n");
scanf("%s", family_name);
printf("名を入力してください\n");
scanf("%s", first_name);
strcat(name, family_name);
strcat(name, first_name);
length = strlen(name);
printf("名前:%s\n", name);
printf("長さ:%d\n", length);
return 0;
}
このプログラムで入力まではちゃんとできてるみたいなんですがstrcatのところでおかしくなって
結合結果がフフフフフフフってなります。どうしてでしょうか?



947 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 18:29:33.51 ID:lX8cJUTX.net]
笑われてんじゃね?

948 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 18:30:25.16 ID:lX8cJUTX.net]
マヂレスすると、nameが不定

949 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 18:34:34.28 ID:a0isPZOF.net]
>>932
char name[NUM * 2 + 1] = {0};

950 名前:デフォルトの名無しさん [2017/07/13(木) 18:37:48.37 ID:PDgj9Ebq.net]
ありがとうございました

951 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 19:34:29.65 ID:b1PvI/zl.net]
どうでもいいけど、
char name[NUM * 2 + 1] = "";

普通こうじゃね?

char name[NUM * 2 + 1] = {'0'};

これでも良い

コンパイル結果はたぶん全部同じだけど

952 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 20:27:20.55 ID:bV5zFMan.net]
>>932
俺のところで試してみたらフフフノフフフになった

953 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 20:43:44.17 ID:lX8cJUTX.net]
Visual Studio のデバッグビルドだと、不定メモリをCCで埋める
だからこれに対応する'フ'が表示される
なぜ途中が'ノ'になるかはわからん

strcatではCCの後の0を探してその後に文字列をコピーするから、0の位置によっては例外が発生したり動作がおかしくなったりするかも

954 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 21:06:57.04 ID:a0isPZOF.net]
>>937
= {'\0'};のタイプミスだよね?

955 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 21:23:18.88 ID:lX8cJUTX.net]
>>940
タイプミスじゃなくて文字化けした
スマホから見ると、? が◆の中に書かれた文字になってる

956 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 23:03:34.21 ID:xdHlDIka.net]
プログラム終了にexit 0とreturn 0がどう違いますか?



957 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/07/13(木) 23:59:30.53 ID:anRp6w5D.net]
>>942
違わない。
main 内の return は exit と同じ。

958 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 19:19:48.00 ID:TW7O0pB9.net]
というタワゴトで他人を陥れるのであった

959 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 19:26:30.76 ID:RoIBY40S.net]
exitは死のトラクターが働かない

960 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 19:32:27.26 ID:RoIBY40S.net]
異常終了以外でexitを使うヤツは素人

961 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 20:20:31.05 ID:8ghhANnS.net]
えっ
mainのreturnでint値返すのはexitをその返り値で呼ぶのと全く等価でしょ?
少なくとも現行のC,C++規格では等価と書いてあるけど現実の実装ではそうなってないってこと?

962 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 20:52:35.05 ID:RoIBY40S.net]
#include <iostream>
#include <cstdlib>
struct A {
~A() {
std::cout << "OK" << std::endl;
}
};
int main(void) {
A a;
std::exit(-1);
}

963 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 20:55:56.83 ID:RoIBY40S.net]
>>947
どこに書いてあったか? 苦情入れるぞ。

964 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 21:04:08.43 ID:TW7O0pB9.net]
今日の>>945は健常者
後始末される例外ケースについて触れていたら完璧だった

965 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 21:06:50.82 ID:VdC9hBdZ.net]
atexit で後始末回収機構走らないの?

966 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 21:39:46.62 ID:RoIBY40S.net]
>>947
どこに書いてあった?



967 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 21:46:17.67 ID:RoIBY40S.net]
atexitはマニュアルに書いてある通りだから、ここでいちいち説明する必要はない。

968 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 21:53:53.48 ID:RoIBY40S.net]
マニュアルこそが聖書。マニュアルを読まない奴等はノンプレイヤー。

969 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 22:54:13.51 ID:RlDfzlps.net]
つまりexit()はバカ発見器ってこと?

970 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/14(金) 23:01:28.54 ID:RoIBY40S.net]
C++でexit使うぐらいなら、代わりにC++例外を使った方がいいよ。デバッグしやすいし。

971 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 05:41:00.21 ID:81gh4ly6.net]
>>947
exit() 関数に入ってしまってはデストラクタが働かないのに,それでも return 文と一緒といいはるの?
それ規格がまちがってるから,そのうち修正がはいるはず

972 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 13:25:52.33 ID:d+yGYUAe.net]
ポインタの作法に慣れないです
読めるけどかけないです

973 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 16:38:44.94 ID:sZ4h7fLQ.net]
ポインタは2段までしか使わないなあ
関数ポインタはstd::functionに入れる癖がついたし

974 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 17:20:33.71 ID:d+yGYUAe.net]
#include<stdio.h>
int unko(int x);
int aho(int *y);
int main(void) {
int a[5] = { 1,2,3,4,5 };
unko(a);
aho(&a);
printf("%x\n%x\n", a, &a);
return 0;
}
int unko(int x) {
printf("%x\n", x);
return;
}
int aho(int*y) {
printf("%d\n%d\n",*(y+1), y[2]);
return;
}

このとき関数unkoで配列aの中身にアクセスする方法ってありませんか?
アドレスがわかっているからできそうな気もするんですがよく解りません。

975 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 17:27:13.54 ID:xLcEZRbh.net]
aがint a[5]であるとき、aはint配列の先頭アドレスだ。unkoの引数をポインターにしろ。

976 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 17:56:11.02 ID:d+yGYUAe.net]
はい



977 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 20:48:00.24 ID:iuayY/9E.net]
そもそもこのソースコンパイルエラーになるんじゃね?

978 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 21:29:06.16 ID:d+yGYUAe.net]
>>963
VSだとコンパイラ通るんですが他のだと通りませんか?
あと関数unkoをいろいろ弄ってたんですが

#include<stdio.h>
void unko(int x);
void aho(int *y);
int main(void) {
int a[5] = { 1,2,3,4,5 };
unko(a);
aho(a);
printf("%x\n%x\n", a, &a);
printf("%d\n",a[4]);
return 0;
}
void unko(int x) {
printf("%x\n", x);
int *p = x;
printf("%d\n%d\n", p[1],*(p+2));
p[4] = 10;
return;
}
void aho(int*y) {
printf("%d\n%d\n",*(y+1), y[2]);
return;
}

こんな記述にすれば少なくともVSでは引数をポインタにしなくても配列aの要素を覗いたり操作したりできることがわかりました。

979 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 21:31:54.33 ID:18nkvKxh.net]
型がめちゃくちゃだあああ!!!
型が形無し!

980 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 21:36:49.71 ID:18nkvKxh.net]
できることとやってもいいことは違うんだよ。

981 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 21:39:23.41 ID:18nkvKxh.net]
コンパイル時に出て来る度重なる警告を無視したらダメだよ。

982 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 21:44:11.03 ID:d+yGYUAe.net]
すみません

983 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 21:46:08.79 ID:18nkvKxh.net]
お使いの32ビット環境ではintとint*が同じサイズだから、キャストされれば代入できる。sizeof(int) == sizeof(int*)。
しかし、64ビット環境では動かなくなるかもしれない。ポインター型を無視した良くない書き方だ。

984 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 21:54:52.27 ID:18nkvKxh.net]
おそらく、君の環境では、
sizeof(int) == 4,
sizeof(int*) == 4
のはずだ。
64bit環境では、多分
sizeof(int) == 4,
sizeof(int*) == 8
になる。確認してみたまえ。

985 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 21:57:34.94 ID:18nkvKxh.net]
int*のサイズがintのサイズより大きいと、ポインター(アドレス)の値が正しく代入できない。これが64bitで失敗する理由だ。

986 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 22:08:26.63 ID:qXQ9KlTo.net]
こまけーことをゴチャゴチャと
Cなんて大なり小なり環境依存な場面しか使わん
貴様はintに32767以下しか入れんのか?



987 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 22:10:20.05 ID:d+yGYUAe.net]
確かめてみたら確かに自分の環境では両方4バイトでした
64bitのプログラムにしたらダメになるんですね・・・
勉強になります。ありがとうございます。

988 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 22:23:44.38 ID:vkKq60sj.net]
2レスで失礼します
VC++9Eでruby-opencvのビルドを試みているのですが構文エラーが多発してビルドできません
>C:\dev\ruby-opencv>nmake
>〜
>cl -I. -I. -IC:/dev/ruby-1.8.7-p374/win32/bin/lib/ruby/1.8/i386-mswin32_90 -IC:/dev/ruby-opencv-master/ext/opencv -MD -O2b2xty- /EHsc -IC:/dev/ruby-opencv-master/ext/opencv/ext/opencv
/EHsc -DHAVE_OPENCV2_CORE_CORE_C_H -DHAVE_OPENCV2_CORE_CORE_HPP -DHAVE_OPENCV2_IMGPROC_IMGPROC_C_H -DHAVE_OPENCV2_IMGPROC_IMGPROC_HPP -DHAVE_OPENCV2_VIDEO_TRACKING_HPP
-DHAVE_OPENCV2_FEATURES2D_FEATURES2D_HPP -DHAVE_OPENCV2_FLANN_FLANN_HPP -DHAVE_OPENCV2_CALIB3D_CALIB3D_HPP -DHAVE_OPENCV2_OBJDETECT_OBJDETECT_HPP
-DHAVE_OPENCV2_LEGACY_COMPAT_HPP -DHAVE_OPENCV2_LEGACY_LEGACY_HPP-DHAVE_OPENCV2_HIGHGUI_HIGHGUI_C_H -DHAVE_OPENCV2_HIGHGUI_HIGHGUI_HPP -DHAVE_OPENCV2_PHOTO_PHOTO_HPP
-DHAVE_OPENCV2_NONFREE_NONFREE_HPP -DHAVE_STDARG_H -I/usr/include -IC:\dev\OpenCV2.4\install\include -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c
-TpC:/dev/ruby-opencv-master/ext/opencv/algorithm.cpp
>〜
>algorithm.cpp
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE\istream(699) : warning C4003: マクロ 'read' に指定された実引数の数が少なすぎます。
>C:\〜\istream(699) : error C2059: 構文エラー : ')'
>C:\〜\istream(846) : コンパイルされたクラスの テンプレート のインスタンス化 'std::basic_istream<_Elem,_Traits>' の参照を確認してください
>C:\〜\istream(700) : error C2143: 構文エラー : ')' が '{' の前にありません。
>〜
>C:\〜\xxbind1(320) : warning C4003: マクロ 'bind' に指定された実引数の数が少なすぎます。
>C:\〜\xxbind1(320) : error C2988: 認識できないテンプレートの宣言または定義です。
>C:\〜\xxbind1(320) : error C2059: 構文エラー : ','

989 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 22:24:14.08 ID:vkKq60sj.net]
何らかのファイルが足りないとかならまだ判るのですがこのファイルはVCに付属の物ですし構文エラーなどと言われても理解できません
algorithm.cppは一番最初のファイルで全く進まない状態です
ちなみにRubyとOpenCVのビルドは一応通っています(本当に問題ないかは未確認)
C/C++は不慣れでVSの使用経験もあまりないため原因の見当も付かず手詰まり状態です。もし何か判る方がいたら教えてもらえると助かります

990 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/15(土) 22:27:42.35 ID:18nkvKxh.net]
readというマクロが悪さをしているようだ。#include順を変えるか#undefしろ。

991 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 22:35:18.82 ID:Z+b63Gri.net]
>>958
使わずに済むのなら無理して使う必要は無いだろ?
正しく動けばそれでいい

992 名前:974 mailto:sage [2017/07/16(日) 12:18:52.82 ID:wcmK4agw.net]
>>976
すみません。その場所の特定ってどのようにすればいいのでしょうか
比較的規模の大きいライブラリですし、インクルードしているファイルだけでもかなりの数になりそうです
ファイルの検索とテキストエディタだけでは追えそうにありません
追跡を支援してくれるツールとかないんでしょうかね・・・

993 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/16(日) 12:28:40.60 ID:flrpsNzv.net]
>>978
IDEのフォルダ内検索か、
grepツール

994 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 15:16:03.75 ID:1O/pViqJ.net]
マクロ展開したソース吐くオプションあったよな

VCならd.hatena.ne.jp/nurs/20100516/1274020395

1.ソリューションエクスプローラ上で展開後の結果を見たいcppファイルを右クリック⇒
 プロパティ⇒プリプロセッサ⇒前処理済みファイルの生成⇒行番号つきか行番号なしを選択
2.再びソリューションエクスプローラ上で展開後の結果を見たいcppファイルを右クリック⇒コンパイル
 これで、cpp が置かれているのと同じファイル階層に、cppと同じ名前だけど拡張子が.iになってる
 ファイルができてるからそれがそうだよ

gccなら -E

995 名前:デフォルトの名無しさん [2017/07/16(日) 17:55:59.24 ID:i1aK64sE.net]
class Kitty {
public:
char *str;
Kitty() { str = "Kitty on your lap\n"; }
Kitty(const Kitty &obj) { str = "Di Gi Gharat\n"; }
} g_obj ;

int main() {
Kitty obj = g_obj;
cout << g_obj.str;
cout << obj.str;
return 0;
}

Kittyクラス終わりのセミコロンの間に変数g_objがあるんですがこれはどういう意味なんですか?

996 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 18:11:45.98 ID:0XlWr73/.net]
「int i; のセミコロンの前に変数g_objがあるんですがどういう意味ですか」
と訊いているに等しい



997 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 18:13:11.34 ID:0XlWr73/.net]
訂正
 誤 変数 g_obj
 正 変数 i

998 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 18:25:45.80 ID:dVrh8pbL.net]
g_objはKittyのインスタンスだが
あまりこういう書き方はしないかもね

999 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 18:31:52.76 ID:ZbG5GhXO.net]
>>981
Kitty と言うクラス定義とその型を持つ g_obj と言うグローバル変数を同時に定義している
要するに
class Kitty {
...
};
Kitty g_obj;
を一つにまとめてるだけ

1000 名前:デフォルトの名無しさん [2017/07/16(日) 18:48:37.09 ID:i1aK64sE.net]
>>982 >>984
レスありがとうございます
>>985
わかりやすい解説ありがとうございました

1001 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 22:25:00.23 ID:Z5uaiz2p.net]
>>986
それはさておき
>str = "Kitty on your lap\n"
このウンコード、何かおかしいとは思わないのかね

1002 名前:デフォルトの名無しさん mailto:sage [2017/07/17(月) 00:15:32.26 ID:+UBTk6HR.net]
>>987
ウンコードは食べるとニガいからな

1003 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 05:08:40.08 ID:gGqeofJB.net]


1004 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 07:08:39.06 ID:vzMDiUgd.net]
次スレ立てたにゅ

【初心者歓迎】C/C++室 Ver.101【環境依存OK】
mevius.2ch.net/test/read.cgi/tech/1500329247/

1005 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 19:37:15.43 ID:bPzCLpNs.net]
おつ

1006 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 22:55:46.66 ID:KX2fhuwb.net]
ひょっとして2ちゃんのこのスレ
他のC/C++相談所よりハイレベル!?



1007 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 07:02:25.97 ID:Jp1Fyagp.net]
うめてんてー

1008 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 07:03:18.13 ID:Cx7F+3jm.net]


1009 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 10:27:43.90 ID:MRnyPI+k.net]
他のC/C++相談所ってどこ?

1010 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/07/19(水) 16:13:01.49 ID:AV+hYp2C.net]
SNS の C++ コミュニティとかじゃね?

1011 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 17:00:45.76 ID:Si/VL0fD.net]
それトリ割れしてるよ
#o%K%H:+O

1012 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/07/19(水) 17:08:00.13 ID:AV+hYp2C.net]
>>997
知ってるけど成りすましは一度しか出てきてないのでまあいいかなって。

1013 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 17:33:56.27 ID:bGQD/KSW.net]
このスレにはQさんがいるからな
Qさんがいれば安心だ

1014 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/07/19(水) 17:43:36.36 ID:AV+hYp2C.net]
>>1000 を取れたら長門は俺の嫁

1015 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 18時間 45分 34秒

1016 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています








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

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

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