[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
654: 2017/05/23(火)10:48 ID:Ip/q9ayQ(1) AAS
未定義動作多すぎだなこの言語。
よくここまで生き残れたな。
655: 2017/05/23(火)11:01 ID:3W0XlzKr(1) AAS
未定義部分を各社が好きに定義してたからね。
VC++だとこう動くけど、g++だとこう動く、みたいな。
656
(2): 2017/05/23(火)12:45 ID:hcbwXZ+h(1) AAS
>>653
横からだけど、それまじ?
出来れば、規格で書かれてる場所教えて欲しい。

不安に思いながらも、一個作っちゃったんだよな…
動作確認済みだから、直ちに問題があるわけではないんだけど、未定義と聞くと将来的には修正しておきたい…
657
(1): 2017/05/23(火)13:25 ID:I6yYOIGb(1) AAS
>規格で書かれてる場所教えて欲しい

delete式の説明の最初のページに書かれていることが探せないというのは
場所を教えられたところでそもそも規格を保有していないのではないか
658
(2): 2017/05/23(火)13:25 ID:YY4qnA2y(1) AAS
>>656
意図して作ったの?バグじゃなくて?
659: 2017/05/23(火)15:16 ID:0tdmeFKn(1) AAS
htmlとその解釈に悩まされるよりはマシ
660
(1): 653 2017/05/23(火)15:21 ID:Ek6JChT/(1) AAS
>>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.
661: 2017/05/23(火)17:00 ID:EZJXMIkJ(1) AAS
C++があまりに不安な要素をたくさん抱えているお陰で未だに新生言語が多数出てくると
思えばいいじゃん?
662: 2017/05/23(火)19:47 ID:rsJqfxq0(1) AAS
継承すんなよ
663
(1): 2017/05/24(水)00:55 ID:WEdzXALv(1/3) AAS
>>658
意図して作った。
悪しき方法とは思いつつも、stringクラスにsprintf 的な機能のメンバ関数作ったった。
その時、stringクラスの全機能を実装するのがめんどくさかったんで public 継承で。
メモリレイアウトは一切変わらない事を見切った上でだが、未定義だとすると…ヤベ。
664: 2017/05/24(水)00:56 ID:WEdzXALv(2/3) AAS
ん、まあ、deleteは使わないからセーフか?
665: 2017/05/24(水)01:00 ID:WEdzXALv(3/3) AAS
>>657
ドラフトしか持ってない…
delete 使う事は頭になかったから気付かなかった。
ありがとう。

>>660
おぉ、ピンポイント情報あざす。早速確認してみる。
666: 2017/05/24(水)12:01 ID:/RGvDc8r(1/4) AAS
メモリレイアウトが変わらない範囲で既存のクラスを再オープンして機能を追加する方法の提案だけは出てたような気がする。
667: 2017/05/24(水)12:06 ID:/RGvDc8r(2/4) AAS
>>663
例外関連のなんたらかんたらの処理 (stack unwinding) がかかわってくるんじゃなかったっけ。
正常系では普通に動いているように見えても何がどうなってるかわからんぞ
668
(1): 2017/05/24(水)13:51 ID:OqDgfclu(1) AAS
>>658の話の場合、別に”string *のポインタで”継承したやつをdeleteしない限り大丈夫でしょ
>>651で言うところの
・B* を A* にキャストしたものを delete
これが問題になるんであって

B*からdeleteして中身もBなら問題にならないと思うけど
669
(1): 2017/05/24(水)14:15 ID:ttKQmf2U(1/2) AAS
>>668
std::vector<std::string>に入れたら死ぬってことだよね??
670
(1): 2017/05/24(水)14:47 ID:/RGvDc8r(3/4) AAS
>>669
ポインタを std::string* に入れてなおかつそれを std::string* のままで delete したらあかんという話。
値を std::string にキャストする分にはなにも問題はない。
671
(1): 2017/05/24(水)15:58 ID:ttKQmf2U(2/2) AAS
>>670
だからstd::vector<std::string>にいれらんないよね?
672
(1): 2017/05/24(水)17:02 ID:/RGvDc8r(4/4) AAS
>>671
何を言いたいのかよくわからんが……。
std::string を継承した型は、レイアウトが変わらないようにしたからと言って (キャストなしで) std::string には入らないよ。
言いたいことを具体的にコードで示してくれんか
673: 2017/06/03(土)20:46 ID:/cDPk3Lb(1) AAS
>>672
外部リンク:ideone.com
674
(2): 2017/06/04(日)05:01 ID:a4MXR2y0(1) AAS
テンプレート構造体を作りその配列をクラスのメンバに含めたいのですが上手くいきません。

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

どのようにすればテンプレート構造体をクラスのメンバにすることが出来るのでしょうか?
もしくは、このような機能を持つクラスを実装するためにはどうすればいいのでしょうか?
よろしくお願いします。
675: 2017/06/04(日)08:23 ID:7To+hzFq(1) AAS
まず
using テンプレート構造体の型 = 構造体テンプレート<型パラメーター>;
をします
676: 2017/06/04(日)11:02 ID:4s9JqZC9(1/5) AAS
>>674
外部リンク:ideon.com
677: 2017/06/04(日)11:02 ID:4s9JqZC9(2/5) AAS
外部リンク:ideone.com
678
(1): 2017/06/04(日)21:12 ID:0J0aNZ4Z(1/2) AAS
質問への回答はいいとして
たった100行のコードによくもここまでUNKOを詰め込めるものだと感心
679
(1): 2017/06/04(日)21:24 ID:4s9JqZC9(3/5) AAS
>>678
どこ?教えて
680
(2): 2017/06/04(日)22:06 ID:0J0aNZ4Z(2/2) AAS
>>679
細かくは見てないがぱっと見て気になったのは、
殆どが「= default」で済むものを自前で定義する所とか
K,Vの左辺値が渡せないunkoコンストラクターとか
左辺値が渡せないpush関数とか
key_value_pair_stackの外で定義されたdefault_max_sizeとか
禁断の「value_type pop()」とか
ムーブ代入だけ何故か無いとか
例外安全を考慮しないswapとか
constexprの付いていない関数が多数とか
省7
681: 2017/06/04(日)22:21 ID:4s9JqZC9(4/5) AAS
>>680
ありがとう
見直してみる
682
(1): 2017/06/04(日)23:59 ID:4s9JqZC9(5/5) AAS
>>680の指摘を受けて修正したやつ
外部リンク:ideone.com
683
(2): 2017/06/05(月)07:13 ID:dSqD3vhj(1/3) AAS
>>682
20秒ほど眺めたがとりあえず3つほどなおした方がいい
・key_のメンバー宣言に{}が付いていないと、修正前と同じ動作にならない
・popの戻りはvoidにした方が無難
・clear()しても要素のデストラクターが呼ばれないのでstatic_assert(std::is_trivial_destructible<element_type>::value,"未対応")しとくのが礼儀
684
(1): 2017/06/05(月)08:02 ID:SbeuyTlX(1) AAS
>>683
一つ目だけ意味がわからない…28行目のこと??なんで?
685
(1): 2017/06/05(月)08:16 ID:dSqD3vhj(2/3) AAS
>>684
その通り28行目
struct X {
 some_type m1 /* {} */;
 X() = default;
};
ここでsome_typeの初期化{}が無いとm1は未初期化になるし、
some_typeにデフォルトコンストラクターが無ければX()の「=default」が「=delete」扱いになる
686
(1): 2017/06/05(月)08:25 ID:CMNJImQI(1/2) AAS
>>685
なるほど…これってデフォルトコンストラクタ自前で書いてメンバイニシャライザに書いても同じだよね?
valueも同様にイニシャライズしなきゃだめだよね?
687
(1): 2017/06/05(月)12:04 ID:dSqD3vhj(3/3) AAS
>>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;};
が初期化されない
688: 2017/06/05(月)12:34 ID:CMNJImQI(2/2) AAS
>>687
ありがとう
689: 2017/06/05(月)21:07 ID:YRHwBsQU(1) AAS
空のvectorをpop_backした時の仕様がクソ過ぎるC++
690: 2017/06/05(月)23:54 ID:vnQWBbWO(1) AAS
亀レスで申し訳ありません、>>674です
とりあえずレベルが足りないことが分かったので、もう少し勉強してからいただいたコード解読してみます。
答えてくださった方ありがとうございました。
691: 2017/06/06(火)07:02 ID:ueF+TYcD(1) AAS
気にすんな
簡単なことすんのにもこの難易度な言語がおかしい
692
(1): 2017/06/06(火)17:35 ID:zF6NOqag(1/3) AAS
というかほとんどがムーブとかconst版とかconstexprとか、とことん丁寧にやろうとした場合の作法まで
含めた突っ込みだから、初心者が気にするような話ではないなw

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

上記に該当しようがしまいがまず左辺値版は必須だし(左辺値を弾きたいならともかく)
該当する場合に高速化したければ右辺値版も書けばいいというだけで
これまた初心者が気にするような話ではないw
693: 2017/06/06(火)18:16 ID:uCSRK7Ay(1/2) AAS
>>692
>右辺値版も書けば速くなるよ、ってだけだよね?
お前の中ではそうなんだろうな
694
(1): 2017/06/06(火)18:58 ID:zF6NOqag(2/3) AAS
違うというなら例ぐらい挙げてくれよ
695: 2017/06/06(火)19:28 ID:+mNKSnZM(1) AAS
そういうのはスルーでok
696
(1): 2017/06/06(火)22:23 ID:uCSRK7Ay(2/2) AAS
>>694
こういうのはワンポイントTipじゃなくて概念の理解だからね
『ムーブセマンティクスのため』と答えを言ったところで
君は理解できないんだろう?
697
(1): 2017/06/06(火)23:19 ID:zF6NOqag(3/3) AAS
>>696
ドヤ顔で用語を挙げろなどとは一言も言っていないのだがw
698
(2): 2017/06/07(水)00:10 ID:xZGjq0dG(1) AAS
>>697
『ムーブセマンティクス』が君の求めた
例そのものなんだよ
でも君の頭脳では概念を理解できないから
説明する気もないし
わからなくても心配しなくていいよ
699
(1): 2017/06/07(水)00:22 ID:2ipgwMGH(1) AAS
教える側界隈の高度なやり取りだけで終始しないでほしいんですけど、、
700
(1): 2017/06/07(水)00:27 ID:gn2mDiBA(1/2) AAS
>>699
ヒント:unique_ptrのムーブは性能目的ではない
701
(1): 2017/06/07(水)00:54 ID:CXRZvrBM(1/2) AAS
>>698
こっちは疑問形で書いてんだから普通に指摘してくれりゃいいんじゃねーの?
なんかコンプでも抱えてんのかね

unique_ptrみたいな所有権の移動の実現(を楽に実装する)は確かに気付いてなかったが
初心者が気にするような話ではない&いつも書かなければならないものではない、に対する反論になってないよな
ちょっとした指摘をそこまで煽って書ける神経が理解できん
702
(1): 700 2017/06/07(水)06:42 ID:gn2mDiBA(2/2) AAS
ちなみに俺は>>698ではない
そうぞうで書いた
703
(1): 2017/06/07(水)08:16 ID:PxDlVTZD(1) AAS
>>701
君は概念を理解できないだろうけど
コピーされては困るから「ムーブ」「セマンティクス」
なんだよ
性能に余裕があってもね
右辺値参照がなかったらスマポをvectorに入れることすらままならないよ
704: 2017/06/07(水)18:47 ID:CXRZvrBM(2/2) AAS
>>702
いや自分も軽く調べてすぐ見つかった例がunique_ptrだったからそれだろうと思った

>>703
偉そうに言う割に自分もいい加減なこと言ってるな
C++03以前を知らない学生か何かだろうけど、お前みたいに偉そうにドヤ顔する癖のあるやつで
使い物になるコード書くやつを俺は見たことない
恥ずかしいからその辺にしとけ
705
(1): 2017/06/10(土)17:42 ID:SxYi4azU(1) AAS
>>683
>・popの戻りはvoidにした方が無難
なぜなんだ?pop の戻りがナルなら空であることを示せてべんりだろう?
706: 2017/06/10(土)20:12 ID:JqmNS/A3(1) AAS
>>705
topとpop作れってことが言いたいんだろう多分
707: 2017/06/11(日)22:14 ID:iu5DR0Hy(1) AAS
「なぜなんだ?pop の戻りがナルなら空であることを示せてべんりだろう?」
 ↓
「topとpop作れ」

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

まあ、古いデザインを引き摺っている部分はあるとは言っても標準ライブラリはすごくよく考えられてるから、
どうしてそうなっているのかを考察したり真似したりするのは良いと思う。
710: 2017/06/12(月)01:48 ID:E1Ahh3IF(1) AAS
はつみつ
711: 2017/06/12(月)17:36 ID:t42bNJ0A(1) AAS
>>709は健常者
ただ理由は性能でなくて例外安全だろう
712
(2): 2017/06/17(土)07:59 ID:bupTq8cx(1/2) AAS
クラスの演算子オバーロードの
書き方全種類教えてください。
operator (*)やoperator ""や
operator ->()辺りが特に解説が少なくて
理解するのに困ってます。

よろしくお願いします。
713: はちゃめちゃ餃子 ◆8X2XSCHEME 2017/06/17(土)09:10 ID:a/4tSU3I(1/3) AAS
>>712
ユーザー定義リテラルについてはこのあたりが詳しいと思う。

外部リンク:ezoeryou.github.io
外部リンク[html]:cpprefjp.github.io

名前空間名で修飾することができないので、
namespace 内で定義されたものについては using してからでないと使えないという規則が微妙に気持ち悪い。
あまりお勧めしない。
標準ライブラリが提供している complex 型のリテラルや時間のリテラルもそんなに頻繁には使わなさそうだし、
よく使うのは string 型のリテラルくらいかなぁ。
714: 2017/06/17(土)11:23 ID:cPfPWWru(1/2) AAS
まずウェブブラウザーで
外部リンク:www.open-std.org
をアクセスします。
次に「N4660」のPDFをダウンロードします。
右下に336と書かれたページ(16.5 Overloaded operators)を開きます。
そこから5ページほどスクロールしながら、英文を見ずにコードだけ眺めます。
715: 2017/06/17(土)11:24 ID:cPfPWWru(2/2) AAS
oops...
× N4660
○ N4659
716
(1): ◆QZaw55cn4c 2017/06/17(土)12:02 ID:ir1eTLN6(1/2) AAS
>>712
ユーザー定義リテラルについては書かれていないが、それでも演算子オーバーロードについては
外部リンク:stlalv.la.coocan.jp
が詳しいのではないか?はちみつさんがこれに触れないのは不思議‥
717
(1): 2017/06/17(土)12:24 ID:qMkdrUOQ(1) AAS
あ、うんでもなんか、
外部リンク[html]:stlalv.la.coocan.jp
↑のページ読んだだけでもうダメなんじゃないかって
文章もなんか危ないというか危ういし

とおもったらQZか
な〜んだ納得
718: 2017/06/17(土)13:21 ID:ir1eTLN6(2/2) AAS
>>717
ハンガリアンは意見がわかれるからね‥
私はハンガリアンはやらないよ
719: はちみつ行者 ◆8X2XSCHEME 2017/06/17(土)14:21 ID:a/4tSU3I(2/3) AAS
>>716
自分が見ないページだから意識の外だった。
そのページはわかりやすく説明できているとは思うけど、
基本的な書き方で今更調べることはあんまりないよ。
720: 2017/06/17(土)14:31 ID:bupTq8cx(2/2) AAS
712です。
短いコードを打ちこんで動作を確認しました。
皆さん有り難うございました。

(ちょっと気になったのは
void operator [](std::initializer_list <int > list);
これがvsc2015では動作しなかったことぐらいです。
)
721: 653 2017/06/17(土)16:42 ID:YXyzn6OG(1) AAS
それ戻り値がvoidだからじゃ

vs2015で試したら添字演算子の結果を使わなければvoidのままでも動いたし
戻り値返すようにしたら普通の使い方もできたよ
722: はちみつ餃子 ◆8X2XSCHEME 2017/06/17(土)18:56 ID:a/4tSU3I(3/3) AAS
話がそれるけど operator[] に initializer_list を渡したいときってどんなとき?
次元が動的に決まるようなコンテナとか?
723: 2017/06/18(日)00:16 ID:sDQUBcQX(1) AAS
xyの二つの値を渡したかったんだろ
言わせんな恥ずかしい
724: はちみつ餃子 ◆8X2XSCHEME 2017/06/18(日)00:50 ID:fX2BYeVR(1) AAS
void って C++ の予約語の中ではカッコイイ言葉ナンバーワンだよな!
725: ◆QZaw55cn4c 2017/06/18(日)09:48 ID:BCfBDJC6(1) AAS
auto に席をゆずったらしい‥
726
(1): 2017/06/19(月)13:14 ID:dXkNDY8/(1/2) AAS
pascal とか fortran の方が良くね?
727
(1): 2017/06/19(月)13:45 ID:LlSBVcNV(1) AAS
後藤
728: はちみつ餃子 ◆8X2XSCHEME 2017/06/19(月)14:29 ID:MatPzd+v(1) AAS
>>726
良かろうが悪かろうがこのスレに来てるのはそれでも C/C++ を使うってやつらなんだからその問いかけは無意味
729: 2017/06/19(月)15:29 ID:dXkNDY8/(2/2) AAS
予約語として他言語から呼べる万能感があるのに :-P
C89では削除されたのだっけ
730: ◆QZaw55cn4c 2017/06/19(月)19:14 ID:zNrORK8z(1) AAS
>>727
setjmp/longjmp のインパクト!を考えると、いまいちだと思いますぅ
731: 2017/06/20(火)00:48 ID:tAZ0INkH(1/2) AAS
longjmpは無理やり過ぎだよな
Cならではとも思うが
732: 2017/06/20(火)00:52 ID:tAZ0INkH(2/2) AAS
リターンアドレスレジスタみたいなの持ってる石だと
ちょいとだけ複雑になるのかすぃら?
733: 2017/06/20(火)23:58 ID:f6m5FZzF(1) AAS
>>172
>MISRA-C研究会が書いている、MISRA-C 2004(C90) の本をみっちり、勉強しろ!
>研究会のメンバーでさえ、規格に詳しい人がいないのだから

規格も理解できない奴らが集まって書いた27年前の規格の解説本って
やばすぎだろ
734: 2017/06/21(水)00:16 ID:vvvagSt1(1) AAS
5ヶ月以上前のレスに反応するって
やばすぎだろ
735: 2017/06/21(水)04:19 ID:ZaPNA4YS(1) AAS
コンパイラやライブラリが腐っていることなんて
良くある事。利用者は配慮してくれないと (AA略)
736: 2017/06/21(水)11:49 ID:x++JJuQ3(1) AAS
最終的にできたものが使用通りならそれでいい
規格準拠度なんてどうでもいいな
737: 2017/06/21(水)13:05 ID:sg+bsLqU(1) AAS
/* 仕様通り動いたコード */
int Z = 0; // これを消すと動かなくなる
int Z2 = 0; // 2010.1.4. vcバグ回避の追加
char *s, *p;
if (s==p) return 2; //これ必要?
738
(2): 2017/06/23(金)22:17 ID:U/0DguFU(1) AAS
A a = {};
これってコピーコンストラクタ呼ばれる可能性ある?
739
(1): 2017/06/24(土)00:27 ID:PfOqrM0w(1) AAS
ない
740
(1): 2017/06/24(土)00:27 ID:5MVxspQe(1) AAS
>>738
ない
(もちろんaを構築するときに呼ばれるコンストラクタの話
Aのコンストラクタの中で起きることまでは知りようがない)
741
(2): 2017/06/24(土)09:24 ID:AroON3at(1) AAS
イコールあるけどコピーしないん?
もう文法わけわからん
742
(1): 2017/06/24(土)13:28 ID:7MOF4v/u(1) AAS
変数宣言のときの=はあくまで初期化であって、たまたま同じ記号を使ってるだけで代入とは違うと思ったほうがいい

同じと思うと他にもC++の参照とかで混乱する
743
(3): 2017/06/24(土)15:16 ID:qquEaJ2M(1) AAS
>>741
コピーしようがしまいが結果は一緒でしょ?
単に最適化の結果で余計な処理が動かないだけと考えればいい
744
(3): 2017/06/24(土)18:10 ID:Ipep7Yd5(1) AAS
>>743
一緒じゃねーよヴァカ乙
リソースはメモリだけと思ってんの?どんだけお花畑なの?
mutex a = {};コピー無しの保証
745: 2017/06/26(月)12:57 ID:dr/i6/ki(1) AAS
>>744
コピー出来るクラスを例に持って来いよ
746
(1): 2017/06/28(水)18:40 ID:lG20CtJa(1/3) AAS
コピー出来ないクラスではコンパイル結果が異なるという>>744の指摘に対して
「コピー出来るクラスを例に持って来い」とはこれ如何に
747
(1): 2017/06/28(水)18:53 ID:fwJBxSlX(1) AAS
>>746
その元コメントはコピーしようがしまいがと言ってるのにそもそもコピー出来ないクラス持ってきて罵倒とはこれ如何に
748: 2017/06/28(水)20:44 ID:VFMMUwAr(1/3) AAS
>>743
一緒じゃない
一緒になるようにクラスを設計すれば一緒というだけ
749
(1): 2017/06/28(水)20:47 ID:VFMMUwAr(2/3) AAS
デフォルトコンストラクタでカレーライスを製造
コピーコンストラクタでラーメンを製造
代入でうどんを製造

同じか?
750
(1): 2017/06/28(水)21:08 ID:lG20CtJa(2/3) AAS
>>743が「コピーしようがしまいが」と言ったからこそ>>744がコピーされてはは困る例を出したのだが
悲しきかな>>747には理解ないのであった
751
(1): 2017/06/28(水)21:16 ID:VFMMUwAr(3/3) AAS
いや、ちょっとズレてると思うよ
752
(1): 2017/06/28(水)22:13 ID:xb2y2Mwj(1) AAS
横から何だけど
どうズレてるかの説明は無いの?
753: 2017/06/28(水)22:25 ID:xMEBWJOX(1) AAS
コピーしない保証がC++17でさらに追加されたがそこで最適化でコピーしようが直接構築しようがどちらでもよかったC++14までの規格は彼の頭の中ではヴァカでお花畑らしい
1-
あと 249 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s