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/
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] ");
//]]>-->816 名前:97" rel="noopener noreferrer" target="_blank">>>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 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています