17/07/18 15:31:46.97 PYVrHLeZ.net
ほす
3:デフォルトの名無しさん
17/07/18 18:40:03.50 R/mOsefM.net
まさか短時間に20レスしないと落ちる?
4:デフォルトの名無しさん
17/07/18 19:38:57.23 u0V8o5mb.net
そんなことで落ちるならレス数一桁のスレが大量に残ってるわけないだろ
5:デフォルトの名無しさん
17/07/20 23:03:44.79.net
右辺値参照がネットのどの記事をみてもわからないので書籍に手を出して見ようと思います
右辺値参照についてをわかりやすく取り扱ってる参考書籍があれば教えてください
6:デフォルトの名無しさん
17/07/20 23:51:51.38.net
ネットで探して出てくるいつもの説明が一番マシではないかという気がしてならない
7:デフォルトの名無しさん
17/07/21 00:25:40.36.net
・見分け方
lvalueは、名前がある
rvalueは、名前がない
・rvalueの特徴
名前がないということは使い捨ての一時的なオブジェクトだから、処理が終わったら捨てられる
・使い分けの理由
代入演算子(=)や、関数の戻り値に使う時や、vectorなどのコンテナに放り込む時には、
一旦オブジェクトがコピーされるが、rvalueだと分かっていたら、勝手にmoveしてくれるので処理が速い
特に、でかいデータを持った独自のクラスの場合にコピーよりmoveが速くなる
この機能を使いたかったら、クラスのmoveコンストラクタとmove代入演算子(=)を定義しておくこと
でも、それは面倒だろうから、ある条件を満たしたらコンパイラが勝手に作ってくれる
・条件
独自クラスに次のいずれの定義もしていないこと
a) コピーコンストラクタ
b) コピー代入演算子
c) デストラクタ
C++歴1ヶ月の俺が答えてみるテスト
8:デフォルトの名無しさん
17/07/21 00:50:30.03.net
moveコンストラクタを作ったら気づくと思うが、処理内容は結局コピーコンストラクタと同じなわけ
とどのつまり、ポインタをメンバーに持ったクラスを定義する時に有効なんだよ
コピーコンストラクタ(lvalue)だと、コピー元は存在し続ける可能性があるから、
必ず1から全データを作り直して、ポインターのポイント先を新データにしないといけない
でも、rvalueで捨ててもいいデータだと分かっていたら、捨てるデータを捨てずにそのまま使って
ポインタのポイント先をその捨てるデータにすればよいから、楽で速いよねという話
9:デフォルトの名無しさん
17/07/21 00:56:26.30.net
右辺値参照なら
URLリンク(srad.jp)
が一番わかりやすい
これ読んでわからなかったらまだ手を出すのが早すぎたと思って諦めたほうが良い
本を買っても無駄な出費になるだろう
そして↑のページを見つけるのに検索してて出てきたのが↓
URLリンク(woorex.com)
で、全然読んでないが、こういった文章に価値はないと思う
ネットの文章のすべてに価値があるわけではないと思ったわ
10:デフォルトの名無しさん
17/07/21 01:02:33.71.net
>>8
いや多分そういうことじゃなくて、分からないのはC++の文法的なトリックの部分に関してだと思う
右辺値参照として宣言した変数を参照したら左辺値になるとか
なかなかにクラクラする部分もあるので
11:デフォルトの名無しさん
17/07/21 01:04:55.21.net
みなさんありがとうございます
取り敢えず>>7>>8さんのレスを参考に
>>9さんのURLを見て寝ようと思います
迅速な回答ありがとうございました (^○^)
12:デフォルトの名無しさん
17/07/21 01:15:36.94.net
まぁ、あれだよね。
右辺値と右辺値参照の違いを理解できるとスッキリするんだけどね。
13:デフォルトの名無しさん
17/07/21 02:26:47.25.net
>右辺値と右辺値参照の違いを
>>9のURL先の説明を書いた低能に100回読ませたい
まずこの違いを明確に理解しないと>>7の様なおかしな説明になってしまう
14:デフォルトの名無しさん
17/07/21 02:39:34.56.net
使う目的が違うの?
15:デフォルトの名無しさん
17/07/21 02:47:35.89.net
俺の理解では、moveしたいからそのためにmoveができる
16:条件を定義してるだけだと思うけど コンパイラーがどういう条件の時に右辺値と扱えるかどうかを示すために それが、参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
17:デフォルトの名無しさん
17/07/21 02:51:29.22.net
まずもって
> lvalueは、名前がある
> rvalueは、名前がない
がおかしいということでは?
18:デフォルトの名無しさん
17/07/21 07:39:48.91.net
そうだな
「lvalueは、名前がある」という誤った知識を注入されていることもあるが
右辺値(rvalue)についての説明が始まって最後まで右辺値参照の話が無いのは良くないな
19:デフォルトの名無しさん
17/07/21 07:46:07.93.net
レベルの低いスレだな
20:デフォルトの名無しさん
17/07/21 07:53:53.57.net
お勧め本の提示ができないばかりか、自分の言葉で説明もできずにただただ罵るだけ
突っ込まれると粗探しをし始める
まぁ、本当に理解してる人間がこんなスレ覗く暇ないわな
21:デフォルトの名無しさん
17/07/21 08:31:50.37.net
>>15
>参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
&は昔からあるのに、そうなのだろうか。
どちらかというと右辺値・左辺値が右辺値参照・左辺値参照と直交する概念で、
言葉が似ているのに>>10の例にもあるように「右辺値参照かつ左辺値が同時に成り立つ」ことが原因だと思うのだが
22:デフォルトの名無しさん
17/07/21 08:43:30.27.net
>>19
> お勧め本の提示ができない
>>9の最初のリンクで充分だろ
自分の言葉でとか言うがそこそこ大きな概念だから説明がまともだったとしてもこんなところでとうとうと説明されても困るし>>7-8みたいな中途半端な説明は有害なだけだし
23:デフォルトの名無しさん
17/07/21 09:09:12.41.net
他の言語ではこの概念出てこないの?どこが違うの?
24:デフォルトの名無しさん
17/07/21 10:43:02.49.net
他言語では見たことが無いな
参照の仕組みが近いのはC#だと思うが右辺値参照の概念は無い
static int X;
static ref int M() { return ref X; }
static void Main () {
M() = 100;//「M()」実質の左辺値
ref int x = ref M();//「ref M()」実質の左辺値
ref int rx = ref x;
rx++;
Console.Write(M());//「M()」実質の右辺値
}
25:デフォルトの名無しさん
17/07/21 11:42:16.76.net
他言語では代入演算子でオブジェクトをコピーしたり
まるでオブジェクトを基本型であるかのようにふるまわせる概念が無いからな
なぜなら他言語にはGCが有るからね
GCがあって、オブジェクトは常にnewして使うから
勝手にディープコピーされるとか、そういうことは考える必要がないね
逆にC++はGCが無いから・・・
もしC#で右辺値参照があり得るとしたらstructに関してだが
C#のstructはmoveセマンティクスが必要であるような用途に使うものではないから
やっぱり要らないな
26:デフォルトの名無しさん
17/07/21 11:52:40.57.net
GCがあるから委譲と複製を区別しなくて済むってのに違和感
27:デフォルトの名無しさん
17/07/21 12:22:05.32.net
1==1 の結果が 2でも-1でもなく 1 だってのは
仕様書のどこに書いてありますか?
28:デフォルトの名無しさん
17/07/21 12:25:57.68.net
他言語は普通に代入などすれば、基本型はコピーでオブジェクトは委譲だ
C++は普通に代入などすれば、基本型もオブジェクトもコピーだ
で、メタプログラミングの観点から見て、何が起こるかということだな
C++は無駄なディープコピーが発生しやすい仕様なのだわ
C++もnewすれば他言語と同じになるが、GCが無いので常に有効ではない
やはりナマポはクラスでラップして・・・って事になるので
適切にコピーなりmoveなり寿命管理してもらわないと破綻する
29:デフォルトの名無しさん
17/07/21 12:37:14.45.net
>>26
ほれ
ISO/IEC 9899:2011 6.5.9p3
Each of the operators yields 1 if the specified relation is true and 0 if it is false. The result has type int.
30:デフォルトの名無しさん
17/07/21 13:04:34.65.net
>>28
おっ サンキュー
これC11っぽいけど、C89でもおんなじだよな?
31:デフォルトの名無しさん
17/07/21 13:30:56.58.net
>>29
残念ながら2011より前の規格は知らぬ
32:デフォルトの名無しさん
17/07/21 13:49:35.62.net
C99は同じ節の同じ段落にある。
C89は不明だが、もしそんな基本部分が変化してたら大騒ぎになってたはずなので同じだろう。
33:デフォルトの名無しさん
17/07/21 13:54:13.46.net
>>29
89と内容等価ということになっているANSI/ISO C90を入手した
6.3.9(==,!=)は6.3.8(大小比較)を参照していてそこには
yields 1 if the specified relation is true
とある
つまり1になる
34:デフォルトの名無しさん
17/07/21 15:17:08.56.net
>>9
横からだけど、すごく分かりやすかった。ありがたい。
35:デフォルトの名無しさん
17/07/21 19:19:00.46 6hIUsyMM.net
>>24
GC 関係ないわな
> 勝手にディープコピーされるとか、そういうことは考える必要がないね
> C#のstructはmoveセマンティクスが必要であるような用途に使うものではないから
なぜか自信満々で頓珍漢な思い込みを披露されてもな
36:デフォルトの名無しさん
17/07/22 01:20:33.15 oqulLxLp.net
into sokuに1か2以外を入力したとき1か2を入力されるまでループさせるのをやってみたいんですが
scanf("%d", &soku);
while (soku != (1 || 2)) {
printf("もう一度入力してください。\n希望する 1\n希望しない 2\n");
scanf("%d", &soku);
}
こう書くと2を入力してもループしてしまいます。
1か2が入力されたらループを抜けるにはどう書けばいいんでしょうか?
37:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 01:34:09.94 Scnyb+6Y.net
soku != 1 && soku != 2
38:デフォルトの名無しさん
17/07/22 01:36:10.92 oqulLxLp.net
>>36
できました。そういう風に書くんですね。ありがとうございました。
39:デフォルトの名無しさん
17/07/22 01:38:48.73 aL/Y+CP+.net
()が強いので1||2が先に計算されて1になってしまう。
40:デフォルトの名無しさん
17/07/22 01:40:28.07 ewNbHc5x.net
!(soku == 1 || soku == 2) (1 または 2 )ではない
⇒ soku != 1 && soku != 2 1ではない かつ 2ではない
41:デフォルトの名無しさん
17/07/22 01:47:45.17 oqulLxLp.net
いろんな書き方もできるんですね!
勉強になります。ありがとうございます。
42:デフォルトの名無しさん
17/07/22 06:19:41.71 RRuLA+SK.net
C++1zでかっこよく書けるようになる。
そう思っていた時期がありました
43:はちみつ餃子 ◆8X2XSCHEME
17/07/22 07:13:43.26 Sw3YC1YO.net
>>39-40
この理屈はド・モルガンの定理って名前がついてるやつ。
44:デフォルトの名無しさん
17/07/22 14:34:43.25 9V10kE5p.net
>>38
なんで3じゃなく1になるの?
45:デフォルトの名無しさん
17/07/22 14:51:10.38 ewNbHc5x.net
>>43
ビット演算のor ではなく、真偽判定の論理和なので
1の真偽を求めて真 ⇒ 1
(2の真偽を求めて真 ⇒ 1 : or 結合のショートサーキットで判定しなけど便宜的に)
こうなる
46:デフォルトの名無しさん
17/07/22 14:51:24.55 o3Mfi2ju.net
1|2なら3
1||2は1
47:デフォルトの名無しさん
17/07/22 15:12:08.99 9V10kE5p.net
難しいのね…
48: ◆QZaw55cn4c
17/07/22 18:27:01.28 Yr9CVNZl.net
>>42
いつも不思議に思うのだが、このド・モルガンは議論のスタートとなる公理なの?
それとも、なんらかの公理から導かれる定理なの?
教科書の最初の方でカップハットをやらされる度に思う疑問です
49:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 18:39:33.61 WTRjQogU.net
>>47
定理って言ってるんだから、定理だろ。
ベン図と真理値表で簡単に証明可能。
50: ◆QZaw55cn4c
17/07/22 18:41:59.88 Yr9CVNZl.net
>>48
それは集合が有限個の場合
集合が無限個の場合はどうなる?公理じゃないとうまくいかないんじゃない?
51:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 18:48:30.61 WTRjQogU.net
無限集合の場合は集合の内包的定義により、離散的な論理学に還元され、やはり成り立つ。
52:デフォルトの名無しさん
17/07/22 18:50:49.49 Yr9CVNZl.net
>>50
稠密な実数の世界のもとでも、それはいえるの?
われわれの解析学の世界では、まず実数からスタートするんです
53:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 18:57:46.94 WTRjQogU.net
A={ x | x ∈A }.
B={ x | x ∈B }.
A∩B={ x | x ∈A ∧ x∈B }.
このように、集合の元の存在は論理学に還元される。
54:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 19:05:08.09 WTRjQogU.net
論理学の真理値表→論理学のド・モルガンの定理→集合論のド・モルガンの定理
55: ◆QZaw55cn4c
17/07/22 19:09:10.20 Yr9CVNZl.net
>>52
ん、それって A, B, C ‥と数えられる世界の中では、いずれ到達できると思う。
でも、力学とか解析学とかをやるときは、ぎっしりつまった実数を相手に論理を組むよね
実数を相手に考える世界では、かぞえられる、とかいう性質を前提にしてはいけないんだと思うよ
まあ立場の問題かもしれない、計算機は数えられる世界で考えればいいことなのかもしれない
いま読んでる教科書の最初の方での∀∃∩∪を読むたびに思うのです
よく「証明は読者の演習としよう」で苦しむのです、これ、やめて欲しいんですけどね
∩∪の羅列である命題にドモルガンを振り返るときれいに解決するのですが
そんなことでいいのだろうか、と常々思っているのでした
56:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 19:16:19.03 WTRjQogU.net
何も数えていないぞ。
x∈Aというのはxの性質を表しただけだ。
集合論の内包的定義を否定するのか?
57: ◆QZaw55cn4c
17/07/22 19:19:02.26 Yr9CVNZl.net
>>55
分割して分割して最後に行き止まりがあるから、その推論はなりたつと思うんです
でも分割して分割して分割して‥終わりがない場合には、その推論は成り立つのでしょうか?
成り立つものとして仮定しているだけなんじゃないでしょうか?
58:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 19:32:50.77 WTRjQogU.net
集合論で、無限演算(極限)が必要になることは少ない。無限集合においても扱う性質が有限であることが多いからだ。
59:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 19:38:35.09 WTRjQogU.net
無限集合では、1つ1つ数えるのではなく、性質(述語)に着目する。集合は述語の組み合わせで表せる。
取り扱う集合を表す述語が有限の表現で表せないなら、人間はそれを考えることすらできないだろう。
60:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 19:47:57.23 WTRjQogU.net
そんなに気になるなら、疑問をなくすために本格的に数学者になって『集合の極限に関する研究』という本を出版してはいかがか。
61:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 20:00:32.46 WTRjQogU.net
すまない。オレは数学の話になると神経質になるんだ。
62:デフォルトの名無しさん
17/07/22 20:10:05.26 aL/Y+CP+.net
トラウマがあるのか。
63:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 20:27:14.25 WTRjQogU.net
A={ x | x ∈A }. B={ x | x ∈B }.
A∩B={ x | x ∈A ∧ x∈B }.
A∪B={ x | x ∈A ∨ x∈B }.
~A={ x | ¬(x∈A) }.
~(A∩B)={ x | ¬(x ∈A ∧ x∈B) }.
~A∪~B={ x | ¬(x ∈A) ∨ ¬(x∈B) }.
ここで、¬(x ∈A ∧ x∈B)={ x | ¬(x ∈A) ∨ ¬(x∈B)を証明すれば、
~(A∩B)=~A∪~B と言える。
64:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 20:34:24.27 WTRjQogU.net
ここでα=(x∈A)、β=(x∈B)とおけば、命題α、βによる命題論理学のド・モルガンの定理に還元される。
α、βについて真理値表を作れば、容易に命題論理学のド・モルガンの定理が証明できる。□
65:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 20:38:22.42 WTRjQogU.net
>>62
訂正。
(誤) ここで、¬(x ∈A ∧ x∈B)={ x | ¬(x ∈A) ∨ ¬(x∈B)を証明すれば、
(正) ここで、¬(x ∈A ∧ x∈B)=¬(x ∈A) ∨ ¬(x∈B)を証明すれば、
66: ◆QZaw55cn4c
17/07/22 20:47:11.33 /Wnz58+R.net
>>59
いや,手持ちの本が読めれば十分なので(今はその部分は結論ありきで読み飛ばしている)追求しようという意図はない
ていうか,たぶん,そうやって読まないといけない(そうじゃないと進めない)
でも,ド・モルガンは定理じゃなくて公理じゃないのかなって「感じる」んですよ
これは私だけの気のせい?多分気のせいなんだろうな‥ごめんね
67:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 20:47:54.26 WTRjQogU.net
集合の極限というと、
S=f(X_0)∪f(X_1)∪...∪f(X_n)∪...
みたいな感じか?
自明ではないが、つまらないな。
68:デフォルトの名無しさん
17/07/22 21:04:17.39 Xt0MBnGT.net
>>58は健常者の様な発言なのに、
スレをツイッターと勘違いしているかのようなクソレス連投が残念だ
69:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 21:09:55.19 WTRjQogU.net
君の公理系では公理かも知れない。ただZFCで証明されるものであるから、定理と言った方がいい。
70: ◆QZaw55cn4c
17/07/22 21:15:06.91 /Wnz58+R.net
>>66
URLリンク(www.amazon.co.jp)
最初の方だが,すでに∞前提
演習
(1)(∪_{n=1}^∞ An)∩A = ∪_{n=1}^∞(An ∩A)
(2)(∩_{n=1}^∞ An)∪A = ∩_{n=1}^∞(An ∪A)
どちらか一方だけ証明できたら,残りはドモルガン採用ですっとばしているが,ドモルガンが∞にも使えるか迷いがある
71:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 21:21:12.59 WTRjQogU.net
無限大について、濃度が定まっている。集合が一意に確定する。
72:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 21:25:41.26 WTRjQogU.net
集合であることの定義にまでさかのぼって、well-definedであることを確認すればいい。
73:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 21:26:51.50 WTRjQogU.net
あとは数学的帰納法だ。
74:片山博文MZ ◆T6xkBnTXz7B0
17/07/22 21:36:21.21 WTRjQogU.net
整数の無限大は整数ではない。
整数の全体集合は無限の濃度だが、集合としてwell-definedである。
このように、極限については個別に存在を確認する必要がある。
75: ◆QZaw55cn4c
17/07/22 21:41:01.35 /Wnz58+R.net
うん,確かにこの場合は自然数の無限だから可算個だね,ちょっと今までの私の話とは事情が違う,なかなかいい例が思い浮かばないね‥
76:デフォルトの名無しさん
17/07/22 22:41:47.08 GxGWP07y.net
なにこの自演連投
77:デフォルトの名無しさん
17/07/22 23:51:19.55 QqZjuHKP.net
>>57
ωの定義は?
Γ_0の定義は?
78:デフォルトの名無しさん
17/07/23 00:08:17.96 senoENRy.net
そろそろC/C++に関係ない話だから適切なスレに移動してもらえないか?
79:デフォルトの名無しさん
17/07/23 00:15:19.26 saJI7pNE.net
災害だと思って諦めろ
80:デフォルトの名無しさん
17/07/23 04:53:37.10 48axhpAl.net
コイツ等は
何が楽しくて生きているんだろうか
81:デフォルトの名無しさん
17/07/23 08:32:31.28 uweeyuEb.net
しかし間違いだらけで、見てるだけで苛ついてくるな
82:デフォルトの名無しさん
17/07/23 11:35:11.86 3jIQW2qu.net
糞ハンネ
83:デフォルトの名無しさん
17/07/24 18:08:53.79 UuUAOyUA.net
>>80
間違いだと思う点について具体的に
84:デフォルトの名無しさん
17/07/24 18:34:08.77 3yF9COr6.net
>>48
違う。通常公理系から証明する。
>>50
違う。可算加法性は自明な性質ではない。
>>57
解析学は非可算無限、整数論は可算無限を扱う
無限集合を扱うのは一般的
むしろ有限集合を扱うほうが特殊
>>58
ソボレフ空間とかガン無視かよ
めんどくさいからこのくらいで
ほぼすべてのレスに間違いが含まれてる
85:デフォルトの名無しさん
17/07/24 18:40:29.85 UuUAOyUA.net
>>83
では、糞コテQZが提起している「ド・モルガンこそ公理」については、どう思う?
86:デフォルトの名無しさん
17/07/24 18:44:31.66 3yF9COr6.net
>>84
それも間違ってるよ
87:デフォルトの名無しさん
17/07/24 18:49:15.52 UuUAOyUA.net
>>85
立場を確認する
排中律(二重否定)は認める立場?認めない立場?
88:片山博文MZ ◆T6xkBnTXz7B0
17/07/24 19:20:26.89 iUqnpKPO.net
天才の時間を無駄にするなよ。
89:デフォルトの名無しさん
17/07/24 19:22:57.71 UuUAOyUA.net
>>87
初等整数論だけが数学ではない、中国剰余定理でとまっていては惜しい
90:はちみつ餃子 ◆8X2XSCHEME
17/07/24 22:07:17.47 Gxl+AYGO.net
>>47-50
やりたければ公理にした系を考えてもええんやで。
でもまあこのスレの話題として必要なのは手書きで真理値表を書けるレベルの狭い世界の論理だろう、JK
91:デフォルトの名無しさん
17/07/24 22:49:36.92 9ObWd1Q9.net
論理回路とかでまともな無限元のブール代数教えるとこなら、
交換、結合、単位元、補元の公理から証明する手順教える。
92:デフォルトの名無しさん
17/07/24 22:51:50.82 mYhfbnvO.net
と、荒らし共が申しております
93:デフォルトの名無しさん
17/07/25 10:10:52.25 OkhRIGg6.net
operator[](int n) をその定義されてるクラス自身で呼び出すにはどうしたらいいんですか?
94:デフォルトの名無しさん
17/07/25 10:41:29.07 QLVMoI/q.net
(*this)[n]
95:デフォルトの名無しさん
17/07/25 10:49:24.51 OkhRIGg6.net
サンクスです
96:デフォルトの名無しさん
17/07/25 12:05:17.11 M07WjxQ9.net
>>92
難しく考えなくてもそのまんまだよ
this->operator[](n);
もしくは単に
operator[](n);
97:デフォルトの名無しさん
17/07/25 12:22:00.82 s+Qz9lcg.net
あとから劣後した提案できるって尋常じゃないね
98:デフォルトの名無しさん
17/07/25 18:10:25.51 0HSMBoAM.net
operator()();
俺はこの言語を勉強するのをやめた
99: ◆QZaw55cn4c
17/07/25 19:38:58.05 CTkA02wP.net
>>97
こう使う
スレリンク(tech板:21番)
100:デフォルトの名無しさん
17/07/25 20:05:19.85 M07WjxQ9.net
>>97
operator彡(゚)(゚)
こう使う
101:片山博文MZ ◆T6xkBnTXz7B0
17/07/25 20:35:51.44 hJo+OnkE.net
尋常小學校
102:デフォルトの名無しさん
17/07/26 03:01:12.72 73NCM6AX.net
int main() {
vector<int> v;
v.reserve(10000);
v.push_back(0);
cout << v.capacity() << endl;
vector<int> (v).swap(v);
cout << v.capacity() << endl;
}
(v).swap(v); の文頭のvに付いてる()は何の意味があるんでしょうか?
103:デフォルトの名無しさん
17/07/26 03:21:52.99 qHYVpVTl.net
バルタン星人。
104:デフォルトの名無しさん
17/07/26 04:24:25.95 cw7jpAOD.net
>>101
vector<int> (v)
までで一時オブジェクトをコピーコンストラクトしてるんじゃ?
で、.swap(v) で中身を入れ替えて、コンパクションするっていうサンプルに見える。
未確認で書いてるので、間違えてたらごめん。
105:デフォルトの名無しさん
17/07/26 06:18:35.77 qHYVpVTl.net
・V ・
(v).swap(v) フォッフォッフォッ
106:デフォルトの名無しさん
17/07/26 15:54:35.58 73NCM6AX.net
>>103
何とか理解できました。ありがとうございます。
107:片山博文MZ ◆T6xkBnTXz7B0
17/07/26 20:46:35.22 bC5SPfn2.net
vector<int> (v).swap(v);
>と( の間が離れてるのが、分かりにくい読みづらい、意地悪な点だな。
108:はちみつ餃子 ◆8X2XSCHEME
17/07/26 21:25:55.76 cdUQ14Vj.net
>>106
なんか宣言っぽく見えるよね。
109:デフォルトの名無しさん
17/07/26 22:56:52.57 vCDZhGQY.net
int OTL=3;
110:デフォルトの名無しさん
17/07/27 01:04:28.47 q1rhXXen.net
> vector<int> (v).swap(v);
C++は糞だな。
111:デフォルトの名無しさん
17/07/27 06:22:38.44 tCxrViSf.net
同意
112:デフォルトの名無しさん
17/07/27 06:23:16.82 tCxrViSf.net
C++というより、ライブラリだが
113:デフォルトの名無しさん
17/07/27 06:55:32.44 SUaLVh4Q.net
>>103
そんな変な文法を考えたヤツ誰だよ?
114:デフォルトの名無しさん
17/07/27 07:34:51.23 mWPL0ri7.net
その書き方がわかりづらいからC++11でvectorにshrink_to_fit()が追加されてるわけで
URLリンク(www.open-std.org)
115:デフォルトの名無しさん
17/07/27 17:10:11.12 nKOoAa+D.net
そんで、mapの場合はどうするんでつか?
116:デフォルトの名無しさん
17/07/27 19:10:45.43 /VCkXAgy.net
mapでシュリンクが必要なケースあるの?
117:デフォルトの名無しさん
17/07/27 19:41:35.37 nKOoAa+D.net
無いの?
118:デフォルトの名無しさん
17/07/27 22:33:18.49 wZCn8yX+.net
無いと思ったから、あるの?って聞いたんだけど。
119:デフォルトの名無しさん
17/07/27 22:33:51.77 wZCn8yX+.net
そもそもreserveできないし。
120:デフォルトの名無しさん
17/07/27 23:08:59.52 8uP2v97Y.net
>>117
あると思ったから 無いの? なのに
どうして無いのか説明できないアフォなの?
121:デフォルトの名無しさん
17/07/27 23:34:10.64 5IXklzdW.net
今流行りのこれか
これからわざとこういうやり取りして荒らすやつ増えるんだろうな
URLリンク(www.honmotakeshi.com)
委員「あなたがやっていることの根拠を示してください」
前川「俺のやることに疑問を持つなら疑問を持つ根拠を示せ」
委員「政策を実現するにはそれに基づく根拠が欲しいと言ってるんです」
前川「それだけの疑問を呈するなら疑問の根拠を示せ」
122:デフォルトの名無しさん
17/07/27 23:43:42.41 KBJFSsyK.net
>>119
最初からそう言えばいいのに。
そもそもシュリンクが必要になるのかがわからないって事でOK?
123:デフォルトの名無しさん
17/07/28 08:07:33.12 VRFX85+t.net
>>121
最初から一貫した発言しかしてないけど
「最初からそう言えばいいのに」ってアフォなの?
124:デフォルトの名無しさん
17/07/28 08:22:36.87 aSs6rxS/.net
コミュニケーション出来てない
明らかに触ってはダメな人でしょ
125:デフォルトの名無しさん
17/07/28 08:34:52.56 oIFva6g9.net
わざとじゃねーの?
126:デフォルトの名無しさん
17/07/28 12:38:35.23 WViVOgsq.net
どっちも説明する気がないから
平行線
127:デフォルトの名無しさん
17/07/28 12:39:07.07 WvgdGCet.net
煽り専用の人工無能でしょ
128:デフォルトの名無しさん
17/07/28 14:08:59.02 IiZPJKRx.net
バイナリファイルについて質問します
変数xyzがあったときxyzをまとめてバイナリファイルにすることはできないんでしょうか?
例えば
#include<stdio.h>
FILE *fp;
int main(void) {
fp=fopen("test2.dat", "wb");
int x = 10;
double y = 15.55;
char z[] = { "abcde" };
fwrite(&x, sizeof(x),1, fp);
fclose(fp);
return 0;
}
これでxのバイナリファイルはできると思いますがyzにもそれぞれ専用のファイルポインタを用意して
それぞれ個別に書き出すことしかできないんでしょうか?
129:デフォルトの名無しさん
17/07/28 14:46:45.90 wtp1eGJk.net
fclose()する前に同じfpに続けてfwrite()すれば、同じファイルに書き出されますよ
130:デフォルトの名無しさん
17/07/28 15:02:04.83 IiZPJKRx.net
ありがとうございます。
いっぺんに書くんじゃなくて行を増やして書けばよかったんですね(´エ`)
131:デフォルトの名無しさん
17/07/28 21:22:15.86 HyK7cEQc.net
> char z[] = { "abcde" };
こんな初期化初めて見た
奥が深いな
132:デフォルトの名無しさん
17/07/29 01:30:09.73 wXH6c2tF.net
mapで、あるvalueを持つpairだけを別のmapに移す時はどうやればよいでしょうか?
例えば
unordered_map<int, int> map1{
{0, -10},
{10, -1},
{2, 5},
}
があってvalueが負のもの({0, -1.}と{10, -1})をmap1から削除して
map2へ移す、みたいな場合です。
133:デフォルトの名無しさん
17/07/29 02:13:30.18 NWxouBfw.net
C++14まではmapの要素を直接付け替えることはできないのでそのまま
1 ループやalgorithmで該当する要素を見つける
2 その要素のキーと値でmap2に新しい要素を追加
3 古い要素をmap1から削除
4 該当する要素がなくなるまで1-3を繰り返す
134:はちみつ餃子 ◆8X2XSCHEME
17/07/29 08:10:20.47 HavpCAcr.net
>>131
std::remove_copy_if を使うのが一番簡単な方法だと思う。
std::remove_copy_if(std::begin(map1), std::begin(map2), std::inserter(map2, std::end(map2)), [](decltype(map2)::value_type x) { return x.second < 0; });
みたいな感じ。
135:デフォルトの名無しさん
17/07/29 08:18:43.60 MwwfsD4U.net
C++のSTLってこういうの好きだけど
ベタに書いた方が絶対楽だよな・・
136:デフォルトの名無しさん
17/07/29 08:21:23.24 zJVnUUbX.net
あとから見てこれなにやってるんだっけ?
ってなりそうで怖い
137:はちみつ餃子 ◆8X2XSCHEME
17/07/29 08:24:46.31 HavpCAcr.net
>>134-135
こういう場合に for で回した方がいいというタイプの人は go に移行した方が幸せになれると思う。
138:デフォルトの名無しさん
17/07/29 08:27:01.28 N+YJafLA.net
forで回した方が良い
139:デフォルトの名無しさん
17/07/29 08:30:04.61 MwwfsD4U.net
あとエラるもんなら
とんでもない量の
コンパイルエラー吐くんだよな
もうアホかと
140:デフォルトの名無しさん
17/07/29 08:32:03.69 wXH6c2tF.net
>>132
ありがとうございます。
URLリンク(ideone.com)
こういう感じでループ回しているときに削除するとうまく行かないので聞いてみました。
イテレータでもうまくいかなくて。
>>133
algorithm使うんですね。こういう書き方知らなかったです。
141:デフォルトの名無しさん
17/07/29 09:29:15.29 USfv5Coy.net
>>135
for文のほうがなにやってるかわからんわ
標準なら何やってるかわからなくてもググれば挙動がわかる
どっちにしても、わかりにくいものは構造化して名前をつけるべきだけどね
142:はちみつ餃子 ◆8X2XSCHEME
17/07/29 09:35:15.24 HavpCAcr.net
せやな。
名前重要。
143:デフォルトの名無しさん
17/07/29 09:46:53.19 tkUDhhFx.net
>>139
イテレータを使うならこんな感じ
eraseの返却値をイテレータの更新に使う
URLリンク(ideone.com)
144:デフォルトの名無しさん
17/07/29 10:19:10.90 zJVnUUbX.net
>>140
分かりにくいか?
for(auto pair: map1){
if(pair.second < 0){
map2.insert(std::pair<int,int>(pair.first, pair.second);
}
}
for(auto pair: map2){
map1.erase(pair.first);
}
145:デフォルトの名無しさん
17/07/29 11:11:01.24 cYfk9kB4.net
お題改変野郎おつ
146:デフォルトの名無しさん
17/07/29 11:14:07.65 zJVnUUbX.net
>>144
ん?
どこか違うっけ?
147:デフォルトの名無しさん
17/07/29 11:15:51.26 bre1+bmg.net
>>143
うん
そんなコードがプルリクされたらreplace to stl functionとだけ書いて突き返すよ
148:デフォルトの名無しさん
17/07/29 11:17:44.82 cYfk9kB4.net
>>145
>for(auto pair: map2){
149:デフォルトの名無しさん
17/07/29 11:19:40.37 bre1+bmg.net
てかpairなんて変数名使うなよ
誰か頭おかしいやつがusing namespace stdしたらどうすんだよ
150:デフォルトの名無しさん
17/07/29 11:21:58.56 bre1+bmg.net
てか細々とひどいね
こんな短いコードでよくもまぁ無能をここまで晒せるなと思う
151:デフォルトの名無しさん
17/07/29 11:23:44.04 zJVnUUbX.net
>>147
意味わからん
ひょっとしてコード読めてない?
152:デフォルトの名無しさん
17/07/29 11:26:00.62 zJVnUUbX.net
>>148
なんの問題もないけど?
って思ったらいちゃもんしかつけられない奴かよ w
153:デフォルトの名無しさん
17/07/29 11:29:49.09 USfv5Coy.net
>>151 make_pair知らないの? なんでコピーコンストラクタ使わないの? てかemplace知らないの? ifのステートメントの中がひどい
155:デフォルトの名無しさん
17/07/29 11:57:02.87 ODSH1Ehs.net
ことごとく的はずれな指摘で笑たわ
156:デフォルトの名無しさん
17/07/29 12:12:55.39 cYfk9kB4.net
>>150
お前アルゴリズムとか論理に弱いだろw
157:デフォルトの名無しさん
17/07/29 12:15:08.54 14mINgXT.net
プログラム板ってみんなこんな感じなの?
とりあえずバカにする
みたいな
158:デフォルトの名無しさん
17/07/29 12:16:28.94 qNmrQnXF.net
せやで
159:デフォルトの名無しさん
17/07/29 13:01:38.77 MwwfsD4U.net
>>146
なぜ?その理由は?
書くならそこまで書けよ無能
160:デフォルトの名無しさん
17/07/29 13:20:13.10 FYOlqRfm.net
>>157
わけわかんないオレオレコードより、テスト済みの標準ライブラリ関数のほうが信頼できるから
161:デフォルトの名無しさん
17/07/29 13:24:20.64 14mINgXT.net
安易にライブラリを使うから、パフォーマンスがどんどん悪くなるんだな
162:デフォルトの名無しさん
17/07/29 13:47:21.71 E5EEKRTu.net
>>155
自分の知識目一杯使って的はずれなマウンティングしてる奴がいるだけ w
163:デフォルトの名無しさん
17/07/29 15:25:53.36 wF9WnZrE.net
あと、自分がコメントできそうな話題になるとここぞとばかりに知識を披露しようとして、
主題からずれたことを言い出したり、
さらにそれに間違いがあって余計なツッコミや攻撃的コメントを呼び込むのも
よく見る風景。
164:デフォルトの名無しさん
17/07/29 15:47:58.67 0zBFZ9bK.net
さほど広い範囲を読んでるわけじゃないけど、
C++関連は特に殺伐としてる感じはあるな。
165:デフォルトの名無しさん
17/07/29 15:56:27.65 gp3BUyJn.net
>>160 ←こういうのもマウンティングだよな。
166:デフォルトの名無しさん
17/07/29 16:15:28.13 mj0H/MXI.net
>>159
まずは意図が伝わるようにと言う意味でシンプルに書くことが重要。
標準ライブラリ使用は最低限のマナー。
チーム開発してると、上記を踏まえずオレオレ判断でパフォーマンスガー言っている人が、一番迷惑なんだよね。
167:デフォルトの名無しさん
17/07/29 16:53:05.23 V9CC1YIs.net
仕事だとメモリ効率や実効速度より開発効率が優先されるからな
168:デフォルトの名無しさん
17/07/29 16:56:37.35 USfv5Coy.net
パフォーマンスどうこうで、標準ライブラリ使わなくても許されるのは、mkl開発チームとか、eigenのコミッターレベル
169:デフォルトの名無しさん
17/07/29 17:01:43.15 E0esoNX5.net
>>164
>まずは意図が伝わるように
ならお前、>>133が何してるか説明出来るんだよな?
170:デフォルトの名無しさん
17/07/29 17:07:45.04 zJVnUUbX.net
>>163
鏡見た方がいいと思うよ w
171:デフォルトの名無しさん
17/07/29 17:18:24.12 WkR4K9lF.net
>>167
>>133はすげーわかりやすいだろ
172:デフォルトの名無しさん
17/07/29 17:19:42.35 mj0H/MXI.net
>>167
それが元ネタかー!
すみませんでした _orz
無理っていうか、>>143でおk
173:派ですw
174:デフォルトの名無しさん
17/07/29 17:20:19.90 mj0H/MXI.net
てか、パフォーマンス関係ねー
175:デフォルトの名無しさん
17/07/29 17:24:23.71 E0esoNX5.net
>>169
答えられないから回答を逸らすんですねわかります
まさか「あるvalueを持つpairだけを別のmapに移す」なんて言わないことを祈る
176:デフォルトの名無しさん
17/07/29 17:26:24.48 mj0H/MXI.net
ん?
でも、よく見たら>>133割りとわかりやすいじゃん?
今、スマホの小さい画面で改行が多いから面食らったけど、2行(かな?)でみれば、とてもシンプルで意図も読み取れるわ。
177:デフォルトの名無しさん
17/07/29 17:30:02.48 mj0H/MXI.net
ちょっとテンパったけど、そのレベルなら正直どっちでも構わないな。
コメントがあれば。
178:デフォルトの名無しさん
17/07/29 17:50:22.46 E0esoNX5.net
>>144
どう見ても>>133の方が酷いお題改変なのだが
それをさしおいて>>143に指摘とはこれ如何に
179:デフォルトの名無しさん
17/07/29 17:53:27.93 14mINgXT.net
>>165
どうでも良いことにこだわってるあたり、
開発スピードが速いようには見えないなあ
180:デフォルトの名無しさん
17/07/29 21:53:58.73 JdwUdvlQ.net
>>127
亀だがバイナリ書き込みは後で読み込むときに構造情報が欠けてることが多いからできれば避けたほうがいい
abcde が可変長になりそうなところとかな
181:はちみつ餃子 ◆8X2XSCHEME
17/07/29 23:46:27.56 HavpCAcr.net
個人的には BENCODE がなかなかいいんじゃないかと思ってる。
182:デフォルトの名無しさん
17/07/30 12:35:48.46 GR0hOB2I.net
>>177
>バイナリ書き込みは後で読み込むときに構造情報が欠けてることが多い
欠けているのは>>177の知能だろ
183:デフォルトの名無しさん
17/07/30 17:25:43.33 w5RmXCUD.net
enum EMFType
{
MF_INT, // 符号付き整数
};
// いろいろなデータを1つの関数で表示します
void MultiFunc(EMFType type, unsigned int data)
{
switch(type)
{
case MF_INT : cout << (int)data << endl; break;
}
}
int main()
{
int a = -10;
MultiFunc(MF_INT , a);
return 0;
}
実行結果
-10
unsigned int にマイナスの値を渡してるんですが、そのまま出力されます。
これが仕様だとすると、パラメーターにunsigned int を指定する意味はなんなんでしょうか?
184: ◆QZaw55cn4c
17/07/30 18:36:26.80 wjBL4Xoh.net
>>180
URLリンク(codepad.org)
これが望みの解かどうかはわからないが
185:デフォルトの名無しさん
17/07/30 18:49:49.76 xziOu8cb.net
>>181
なんでcoutでintにキャストしてんの
186:片山博文MZ ◆T6xkBnTXz7B0
17/07/30 18:54:45.98 aW4ocSFO.net
>>180
MultiFuncを作った人にきけば?
187:デフォルトの名無しさん
17/07/30 18:57:01.02 wjBL4Xoh.net
>>182
>>180 に聞いて
188:デフォルトの名無しさん
17/07/30 20:43:43.49 w5RmXCUD.net
>>181
ありがとうございます。コンバイラかバージョンの問題ですかね。
>>182
URLリンク(www7b.biglobe.ne.jp)
ここで勉強してたら出てきたんですが、完全には書いてること理解できてないんで何でかはわかりません。
189:デフォルトの名無しさん
17/07/30 20:54:24.26 1HGPNMYb.net
>>180
cout時にintにcastしているからでは?
190:デフォルトの名無しさん
17/07/30 21:21:54.63 wjBL4Xoh.net
>>185
よく見てくれ,cout << (int)x
の (int) のキャストが問題となっている,なぜ (int) のキャストをしているのかは読み取れないが
191:デフォルトの名無しさん
17/07/30 21:40:38.31 K4rJr1Oo.net
>なぜ (int) のキャストをしているのかは読み取れないが
ふむふむ、これがイケヌマと言う奴だな
192:デフォルトの名無しさん
17/07/30 21:42:16.93 IhAKIxVt.net
オマエ読み取れたの?
193:デフォルトの名無しさん
17/07/30 21:46:15.66 K4rJr1Oo.net
これが読み取れない者はC/C++より国語の勉強をした方がよいのではないか
194:デフォルトの名無しさん
17/07/30 21:49:30.37 9ZftmVJd.net
業務ではよくあるよ
195:。 バグか仕様か分らないっての。書いた本人は既にいなくて誰も答えを知らない。
196:デフォルトの名無しさん
17/07/30 22:21:43.69 pLyoXQEm.net
どこの業務だよ。仕様残せよ
197:片山博文MZ ◆T6xkBnTXz7B0
17/07/30 22:28:24.05 aW4ocSFO.net
型消し、type eraserだから、データ構造に意味が無ければ、悪い設計だろう。
198:デフォルトの名無しさん
17/07/30 22:31:00.66 ynobldaf.net
>>190
で、なぜキャストしてるの?
読み取れた結果を披露してちょ
199:デフォルトの名無しさん
17/07/30 22:31:49.27 K4rJr1Oo.net
>type eraser
まさか、type erasureのつもりだった!?
200:片山博文MZ ◆T6xkBnTXz7B0
17/07/30 22:37:32.57 aW4ocSFO.net
>>195
間違えました。すみません。
201:デフォルトの名無しさん
17/07/30 22:38:07.55 K4rJr1Oo.net
>>194
パラメーターの型は適当に決めたもので、EMFTypeで指定されたint型で取り出すのが目的だからだろう
「いろいろなデータを1つの関数で表示します」と書かれているのだから
イメージは↓
URLリンク(wandbox.org)
202:片山博文MZ ◆T6xkBnTXz7B0
17/07/30 22:42:59.84 aW4ocSFO.net
そのインターフェース、なんか意味があるの?
203:デフォルトの名無しさん
17/07/30 22:49:59.18 hW0bjdhb.net
type erasureは意味違うけどね
204:デフォルトの名無しさん
17/07/30 23:12:02.27 K4rJr1Oo.net
これはきっとロベールさんが知恵を絞って考えた、徐々に発展していく例題だったに違いない
と思って調べたら単なる型変換の説明だった
205:デフォルトの名無しさん
17/07/30 23:35:50.02 w5RmXCUD.net
>>187
すいません、よく見てませんでした。
unsigned intでひっくりかえった値はintでキャストしなおすと元に戻るんですね。勉強になります。
206:デフォルトの名無しさん
17/07/31 00:05:24.36 rlOfWFsH.net
int ⇔ unsigned intだからそれ程でもないけど
たかが型変換と思って単純そうに見えて実は深い
207:デフォルトの名無しさん
17/07/31 04:51:20.26 eXoHYgix.net
もしかしてunsigned int a = -10が10だと思ってるじゃ
208:デフォルトの名無しさん
17/07/31 07:41:44.42 2pZH8HVB.net
>>184
ごめんアンカミスだ
209:デフォルトの名無しさん
17/07/31 08:13:27.51 QJrBCtHy.net
unsigned intとintの変換って戻る保証あったっけ?
教えてエロい人
210:デフォルトの名無しさん
17/07/31 09:37:11.53 8MdXXwK/.net
ない
211:デフォルトの名無しさん
17/07/31 10:27:16.23 b0IxVlKH.net
そうなの?
補数表現が違うと戻らなくなるんだっけ?
212:デフォルトの名無しさん
17/07/31 12:46:28.35 oDbItPw6.net
いつもの
・現実にはダメな処理系はない
けど
・仕様では保証されない
って奴じゃね?
213:デフォルトの名無しさん
17/07/31 17:41:18.97 ULiYNE/a.net
この速さなら言える
unsigned intが分からない
少なくともunsignedの-10が10じゃないことは分かった
214:デフォルトの名無しさん
17/07/31 17:52:47.90 4+hbusvk.net
俺もunsignedに負数を代入した場合
どーなるのかわかってなかったわ
つーか、そんな処理入れる機会なくね?
わざわざバグったコード書いて
どうなるんですかって聞いているようなもん
215:片山博文MZ ◆T6xkBnTXz7B0
17/07/31 18:12:00.47 tXq0mJzu.net
intが32ビットの整数と仮定すると、
-1==0xFFFFFFFF。
これに1を足すと、オーバーフローして
0==0x00000000
となる。
-2は-1==0xFFFFFFFFよりも1だけ小さいので0xFFFFFFFEだ。
216:デフォルトの名無しさん
17/07/31 18:19:04.62 RCGkVO1K.net
処理系依存な内容とそうじゃない内容はちゃんと区別しよう
217:デフォルトの名無しさん
17/07/31 18:23:58.10 2pZH8HVB.net
>>209,210
仮にこの範囲の整数を扱える型(X型)があったとすると
-4 -3 -2 -1 0 1 2 3 4
unsigned X型はこの範囲を扱える
0 1 2 3 4 5 6 7 8
X型の-1は-1
unsigned X型の-1は8になる
同じ数だけ(この場合9つ)表現できるのは変わらず
unsignedは最小値が0になる
218:片山博文MZ ◆T6xkBnTXz7B0
17/07/31 19:07:02.18 tXq0mJzu.net
符号つき(signed)の値の場合、一番上のビット(最上位ビット)を符号として扱う。そういう決まりになっている。
例えば、0x80000000は一番小さい符号つき32ビット整数になり、0x7FFFFFFFは符号つき32ビット整数で一番大きな数になる。
219:デフォルトの名無しさん
17/07/31 19:16:13.46 ULiYNE/a.net
こんなに一生懸命説明してくれてるのにわからない俺…
すんませんした
220:デフォルトの名無しさん
17/07/31 19:18:53.66 aK6EDhQb.net
>>214
そんな事は決まってない
そういう処理系が多いってだけ
221:片山博文MZ ◆T6xkBnTXz7B0
17/07/31 19:18:53.77 tXq0mJzu.net
-30は、-1==0xFFFFFFFFよりも29だけ小さい数だ。29==16+8+4+1==0x1Dだから、-30==0xFFFFFFFF - 0x1D==0xFFFFFFE2となる。
222:デフォルトの名無しさん
17/07/31 19:19:50.58 9Hgupd7z.net
意外とハマるのはサイズが拡張される場合で
char ch1 = 0xFF;
unsigned char ch2 = 0xFF;
unsigned int int1 = ch1;
unsigned int int2 = ch2;
int1 と int2 は違った値になりよるよ
VCの処理系依存かもしれんが
223:デフォルトの名無しさん
17/07/31 19:21:38.34 aK6EDhQb.net
1の補数、2の補数、符号ビット+仮数
言語上はこれだけある
トラップ表現があったりもする
224:片山博文MZ ◆T6xkBnTXz7B0
17/07/31 19:37:10.30 tXq0mJzu.net
自動車やバイクには走行メーターがついているだろう。走行メーターは0~9の何桁でどのくらい走ったかを表す。
9999の次が0000になる場合、9999を-1、9998を-2、と考えるとメーターで足し算・引き算を考えることができる。各桁が0~9になるから、メーターの場合は10進数表示になるがね、
コンピュータの場合は2進数や、16進数で考えることが多い。
225:片山博文MZ ◆T6xkBnTXz7B0
17/07/31 19:41:04.34 tXq0mJzu.net
2進数の場合は各桁が0か1になり、2で次の位に繰り上げ。16進数の場合は各桁が0~9、A~Fのいずれかになり、16で次の位に繰り上げ。
226:デフォルトの名無しさん
17/07/31 19:49:09.33 aK6EDhQb.net
いつまで機種依存ネタ続けるつもり?
227:デフォルトの名無しさん
17/07/31 20:01:22.25 iTQXcHuD.net
>>220
それは10の補数で負数を表す場合でしょ
そういうアーキテクチャもあるだろうけど、それ以外がありえないわけじゃない
228:デフォルトの名無しさん
17/07/31 20:05:38.00 9Hgupd7z.net
だからさわるなって
229:
17/07/31 21:11:41.06 VQaCNCGS.net
1の補数表現ですか,教科書には堂々と載るんですけど,実際には見たことないね‥
230:デフォルトの名無しさん
17/07/31 21:44:09.51 zfEccCnj.net
auto i = -100;
auto u = static_cast<unsigned>(i);
int i2;
std::memcpy(&i2, &u, sizeof(int));
unsigned intを経由してintを取り出す方法はこれしか思いつかなかった
231:デフォルトの名無しさん
17/07/31 22:53:45.79 SkB3nQWo.net
触るも何も自演だから嵐が過ぎ去るのを黙って見てるしかないぞ
232:片山博文MZ
17/07/31 23:31:24.17 tXq0mJzu.net
仮想世界の住人たちが全て同一人物の自演に見える病気に名前を付けるとしたら、何にする?
233:片山博文MZ
17/07/31 23:37:22.96 tXq0mJzu.net
「思念体同一視妄想」と名付けよう。
234:はちみつ餃子
17/08/01 00:01:32.28 J7NYj7Ga.net
思念体が滅びることはない……
死ねんたいwww
235:デフォルトの名無しさん
17/08/01 02:44:00.93 LRNcLEwd.net
なるほど・・さっぱりわからん
236:片山博文MZ
17/08/01 21:04:49.74 iBC54dHR.net
わからない
わからん
若卵
らんらんるー
237:デフォルトの名無しさん
17/08/01 21:55:28.88 J7NYj7Ga.net
わかんない → 和姦ない → 強姦ばかり
238:片山博文MZ
17/08/01 22:00:50.36 iBC54dHR.net
だじゃれモードかよ
239:片山博文MZ
17/08/01 22:05:37.08 iBC54dHR.net
2進数を下の位から4桁ごと区切ると、簡単に16進数に直せるぞ。
2の4乗は16だから、2進数の4桁が16進数の1桁に相当する。
240:片山博文MZ
17/08/01 22:12:21.56 iBC54dHR.net
#include <stdio.h>
int main(void) {
int i;
printf("10進数と16進数\n");
for (i = 0; i < 30; ++i) {
printf("%d => 0x%x\n", i, i);
}
return 0;
}
241:片山博文MZ
17/08/01 22:15:21.90 iBC54dHR.net
C/C++では、2進数出力は少し難しい。ビット演算が必要になる。
242:片山博文MZ
17/08/01 22:20:52.25 iBC54dHR.net
void print_binary(int n) {
int i;
for (i = sizeof(int) * 8 - 1; i >= 0; --i) {
if (n & (1 << i)) putchar('1');
else putchar('0');
}
}
243:片山博文MZ
17/08/01 22:55:18.84 Oo5iWDLT.net
#include <stdio.h>
int main(void) {
int i;
printf("符号あり => 符号なし => 16進\n");
for (i = -10; i <= 10; ++i) {
printf("%d => %u => 0x%x\n");
}
return 0;
}
244:片山博文MZ
17/08/01 22:56:59.82 Oo5iWDLT.net
>>239
訂正。
#include <stdio.h>
int main(void) {
int i;
printf("符号あり => 符号なし => 16進\n");
for (i = -10; i <= 10; ++i) {
printf("%d => %u => 0x%x\n", i, i, i); //訂正。
}
return 0;
}
245:デフォルトの名無しさん
17/08/01 23:06:29.76 mGfRGHrE.net
>>240
%u に int 渡してんじゃねーよ
246:片山博文MZ
17/08/01 23:19:17.88 Oo5iWDLT.net
>>238
URLリンク(www.wdic.org)
247:片山博文MZ
17/08/01 23:26:14.17 Oo5iWDLT.net
%huなんて知らなかったなあ。
URLリンク(stackoverflow.com)
248:デフォルトの名無しさん
17/08/02 00:27:59.29 AGgV01p7.net
>>238
C++のときはstd::bitsetも使えるぞい
URLリンク(cpprefjp.github.io)
249:片山博文MZ
17/08/02 00:33:11.36 hTaTWBJY.net
>>244
情報ありがとう。
250:デフォルトの名無しさん
17/08/02 17:58:47.10 denJnq0F.net
ぞいってなー
251:デフォルトの名無しさん
17/08/02 22:14:43.24 TeM237FQ.net
class CManiac {
private: char* m_pc;
public:
virtual ~CManiac() {
cout<<"destr "<< this << " : " << &m_pc << endl;
delete[] m_pc;
}
CManiac() : m_pc(new char[1]) { cout<<"constr "<< this <<endl;}
void getAdrs(){ cout<< this <<" : "<< &m_pc << endl; }
};
int main() {
vector<CManiac> vecmaniac;
vecmaniac.resize(3);
vecmaniac[0].getAdrs();
vecmaniac[1].getAdrs();
vecmaniac[2].getAdrs();
return 0;
}
constr 0x22fe40
destr 0x22fe40 : 0x22fe44
0x3b1678 : 0x3b167c
0x3b1680 : 0x3b1684
0x3b1688 : 0x3b168c
destr 0x3b1678 : 0x3b167c
destr 0x3b1680 : 0x3b1684
destr 0x3b1688 : 0x3b168c
vectorに自作クラスのインスタンスを入れるとき、このコードだとm_pc;が指すアドレスが2重開放になるとかで
デフォルトコンストラクタとコピーコンストラクタとデストラクタの3つが必須だと書いてあったのですが、エラー無しで出力できます。
デストラクタのところで<<m_pc;と書いても、何故か文字化けしてしまうのでアドレスが分からないんですが
本来、resizeを使ってインスタンスを生成したら、m_pc(new char[1])で作った領域は3つとも同じになるということですか?
あと、最初に呼び出されている0x22fe40 は何のインスタンスなんですか?回答宜しくお願いします。
252:片山博文MZ
17/08/02 22:27:48.20 tJX9Zx+g.net
new char[1]は、要素数1の動的配列へのポインターで、中身は初期化されていない。
253:片山博文MZ
17/08/02 22:33:06.29 tJX9Zx+g.net
<< m_pcと書くと、当然m_pcは、C文字列として解釈されるが、初期化されておらず、ヌル終端とは限らないので、
文字化けする。
254:片山博文MZ
17/08/02 22:35:13.01 tJX9Zx+g.net
教訓。生ポインターは使うな。std::stringやstd::vectorなどを使え。
255:片山博文MZ
17/08/02 22:46:24.97 tJX9Zx+g.net
resizeは、引数なしのコンストラクターでオブジェクトを作成して、それをvector内部にコピーする。
このコピーの際にコピーコンストラクターが使われ
256:る。コピーコンストラクターは記述されていないから、暗黙のものが使われる。 それはポインターの中身をコピーしていないから、問題がある。
257:片山博文MZ
17/08/02 22:57:09.01 tJX9Zx+g.net
よくわからなければ、
CManiac(const CManiac& cm)
{ ... }
というコピーコンストラクターを書き加えてみるとよい。
258:片山博文MZ
17/08/02 22:59:09.90 tJX9Zx+g.net
代入の
CManiac& operater=(const CManiac& cm)
{
...
return *this;
}
も追加。
259:デフォルトの名無しさん
17/08/02 23:05:54.19 qrhQzK+m.net
unsigned intなどを使って何かいい事有るのか?普通にint使えばいいだろ?
260:片山博文MZ
17/08/02 23:06:30.72 tJX9Zx+g.net
IDEのデバッグ機能を使えば、std::vector::resizeなどのソースコードも読めるよ。
261:片山博文MZ
17/08/02 23:08:15.66 tJX9Zx+g.net
>>254
符号なし整数の比較が出来る。負の場合を考えずに済む。
262:デフォルトの名無しさん
17/08/02 23:10:24.82 qU91jTb3.net
>new char[1]は、要素数1の動的配列へのポインター
んなこたーない
263:片山博文MZ
17/08/02 23:11:05.31 tJX9Zx+g.net
符号ありよりも大きな範囲を扱える。ビット演算やビットフィールドで便利。
264:デフォルトの名無しさん
17/08/02 23:44:31.73 qU91jTb3.net
この実行結果を見て>>251の回答が瞬時に出てくるのはひょっとして凄い奴なのではないか?
と一瞬でも思ってしまった自分が恥ずかしい
265:デフォルトの名無しさん
17/08/02 23:59:09.86 qU91jTb3.net
ライブラリ仕様の変遷を理解した上で質問者に回答を合わせる
などという高度な対応がクソコテにできる筈も無かった
266:デフォルトの名無しさん
17/08/03 00:21:51.89 1LfxTpLV.net
>符号ありよりも大きな範囲を扱える
確かにそうだな
言語仕様の規格上は
267:片山博文MZ
17/08/03 00:37:28.83 YO3k3fE8.net
>>251
コピーコンストラクターじゃなくて、代入でした。すみません。
268:片山博文MZ
17/08/03 00:44:37.38 YO3k3fE8.net
>>262
あ、コピーコンストラクターは、C++03の方で、C++11なら、ムーブコンストラクターとムーブ代入が使えるから、少し動作が違うんだった。
269:ねこまじ
17/08/03 00:45:34.22 t0J1S2SM.net
Youtuberヒカルが月収を明らかに!!おはよう朝日です出演
URLリンク(www.youtube.com)
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
URLリンク(www.youtube.com)
ユーチューバーの儲けのカラクリを徹底検証!
URLリンク(www.youtube.com)
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
URLリンク(www.youtube.com)
誰も言わないなら俺がYouTuberのギャラ相場を教えます
URLリンク(www.youtube.com)
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
URLリンク(www.youtube.com)
最高月収5000万円だとさ。年収じゃなくて「月収」な
誰でも参入可能だからおまえらもyoutubeに動画投稿したほうがいい
顔出したくないならラファエルみたいに仮面かぶればいい
手っ取り早く視聴数稼ぐには有名ユーチューバーへの物申す系動画がオススメ
ゲーム実況はニッチだから人気ユーチューバーのネタをパクればいい
270:片山博文MZ
17/08/03 00:48:11.43 YO3k3fE8.net
ってことは、C++11の場合は、
CManiac(CManiac&& cm)
{ ... }
と
CManiac& operater=(CManiac&& cm)
{
...
return *this;
}
を書くんだね。これで完璧。
271:デフォルトの名無しさん
17/08/03 00:48:42.44 cUZMqwjs.net
>>257
違うの?
272:デフォルトの名無しさん
17/08/03 01:02:12.67 cUZMqwjs.net
あ、動的配列じゃなくてヒープのアドレスとってるだけよということかな
273:片山博文MZ
17/08/03 01:02:16.06 YO3k3fE8.net
C++11のemplace_backを忘れてた。コピーせずに、vector内部で直接構築されるんだった。
274:デフォルトの名無しさん
17/08/03 07:14:24.41 jHHnzd5n.net
>>266
「アドレス」でなく「ポインター」という言葉を使っているので正しくない
要素数1の動的配列の先頭要素へのポインター
275:デフォルトの名無しさん
17/08/03 13:14:53.27 vWCSRcUD.net
>>248
コピーコンストラクタ無しのm_pcが同じアドレスを参照している確認取れました。
丁寧な解説ありがとうございました。
276:デフォルトの名無しさん
17/08/03 14:40:42.21 xqHGpC9q.net
ふえぇぼうよー先生の本凄く読みずらいよ・・・
277:デフォルトの名無しさん
17/08/03 16:53:01.55 2WeFShGG.net
>>241
言いたいことはわかるけど
キャストしたところで何もしないぜ?
278:デフォルトの名無しさん
17/08/03 16:58:53.44 2WeFShGG.net
何もしないってのは吐き出されるコードが不変て意味ね
個人的にはキャストするけど
279:デフォルトの名無しさん
17/08/03 20:14:02.94 Wy5AX0em.net
intが32bitな64bit環境下だとして
printfの可変長引数で32bit整数を64bitに自動拡張するときの
拡張のされ方が変わるんじゃね?
ただし%uによって32bit分しか見に行かないから無視してよいけど
コード不変とはならないんじゃね?
280:デフォルトの名無しさん
17/08/03 20:21:13.08 D1Re6UdQ.net
%z と %d の差ですかい?
281:デフォルトの名無しさん
17/08/03 20:24:42.71 Wy5AX0em.net
いや、64bitに自動拡張してスタックに積む際に
282:デフォルトの名無しさん
17/08/03 20:28:36.06 D1Re6UdQ.net
int が32bit なら 可変長引数部でスタックに詰むとき
暗黙で 64bit に自動拡張はやらんのじゃないの?
283:デフォルトの名無しさん
17/08/03 21:31:57.89 2WeFShGG.net
やったら破綻する
284:デフォルトの名無しさん
17/08/03 22:25:13.00 2WeFShGG.net
嘘ですサーセン
285:デフォルトの名無しさん
17/08/03 22:54:52.47 84Bc5dj3.net
>>273
そんな保証はないよ
286:デフォルトの名無しさん
17/08/03 23:29:16.77 2WeFShGG.net
保証は無いね
x64の場合でもキャストしようがしまいが0拡張になるけど
差が出るとしたらどんな場合?
287:デフォルトの名無しさん
17/08/03 23:48:26.53 Wy5AX0em.net
常に0拡張は信じがたい
負数の時おかしくなるだろ・・・
288:デフォルトの名無しさん
17/08/03 23:49:27.73 2WeFShGG.net
intが32bitの処理系の話ね
32bitのintを64bitに符号拡張するのはダメでしょ
289:デフォルトの名無しさん
17/08/04 07:09:12.01 KzbqP8qx.net
>>282
>負数の時おかしくなるだろ・・・
ならねーよ
printfは32bitしか取り出さねーんだから
290:デフォルトの名無しさん
17/08/04 08:30:27.75 oD3njs5y.net
64bit で引き出したうえで 32bit しか採用しないのか
32bit で引き出すだけなのか
後者は2個目いこう狂うわけ
291:デフォルトの名無しさん
17/08/04 08:46:19.49 SS0ANIEQ.net
64bitに自動拡張してスタックって、x64はpush eaxしたら8バイトpushされんの?
292:デフォルトの名無しさん
17/08/04 08:47:48.89 Q7buFUOM.net
8、16でも前者でしょ
293:デフォルトの名無しさん
17/08/04 08:48:26.38 Q7buFUOM.net
push raxになる
294:デフォルトの名無しさん
17/08/04 08:53:09.50 Q7buFUOM.net
というわけでビッグエンディアンは糞である
295:デフォルトの名無しさん
17/08/04 09:16:15.84 SS0ANIEQ.net
int32にしてもスタックやキャッシュは倍の速度で消費されるのかよ。
296:デフォルトの名無しさん
17/08/04 09:27:05.86 Q7buFUOM.net
キャッシュは確認してないけど
スタックはポインタ幅で消費されるね
297:デフォルトの名無しさん
17/08/04 09:31:06.85 Q7buFUOM.net
実装依存だとは思う
VisualStudioではそうだっつーだけ
298:デフォルトの名無しさん
17/08/04 12:56:51.39 +PWQy8Ni.net
実装依存じゃない
x86-64の仕様
299:デフォルトの名無しさん
17/08/04 12:57:32.28 +PWQy8Ni.net
普通、引数の受け渡しはスタックじゃなくてレジスタ使うけど
300:デフォルトの名無しさん
17/08/04 13:15:35.79 SS0ANIEQ.net
呼出規約については知らないのか。
301:デフォルトの名無しさん
17/08/04 14:31:21.93 PHBV9/TP.net
呼び出し規約は実装依存ではないけどアーキテクチャ依存でもないよ
そして、引数の受け渡しにレジスタをどう使うかというのは呼び出し規約と関係なく実装依存
さらに、引数はスタックに積まれるし、それはレジスタどうのこうのとは関係のない話
302:デフォルトの名無しさん
17/08/04 14:49:43.29 SS0ANIEQ.net
何を言ってるかさっぱり意味が分らないや。
303:デフォルトの名無しさん
17/08/04 14:56:40.96 oD3njs5y.net
引数を { 頭から 末尾から } { レジスタ スタック } につんで
つんだ引数の巻き戻しを { 呼び出し側 呼ばれた側 } で行う
304:デフォルトの名無しさん
17/08/04 18:15:41.13 fFEm/UGM.net
>>296
呼び出し規約がアーキテクチャーに依存しないなんてことはあり得ない
305:デフォルトの名無しさん
17/08/04 18:17:54.06 5d5G+9Ac.net
>>296はどうしようもない低能
その低能にマジレスみっともない
306:デフォルトの名無しさん
17/08/04 18:24:58.70 gG3ajqK7.net
>>296
レジスタ少ないx86ではスタックだが、x86_64では第1引数から第7引数までキッチリどのレジスタに入れろって決まってる。
これをアーキ依存と言わずしてなんと言うのか。
307:デフォルトの名無しさん
17/08/04 19:06:39.89 gMHFD1Iy.net
その規約をやぶって、全部スタックに乗せる、という呼び出し規約を自分で実装していいですか?
308:デフォルトの名無しさん
17/08/04 19:13:12.05 07Vnvfe5.net
規約は他のプログラムと協調するためだけのもの。
他のプログラムと絡まないんなら好きにすればいい。
309:デフォルトの名無しさん
17/08/04 19:20:42.44 gG3ajqK7.net
>>302
別にAPI単位の規約だから好きにすれば良いけど、スタックだと32bitよりメモリ喰うし増えたレジスタ活かさずメモリとやり取りだから関数呼び出しが多いほど速度に差が出るよ。
310:デフォルトの名無しさん
17/08/04 19:22:07.45 PHBV9/TP.net
>>301
勉強になったわ
311:デフォルトの名無しさん
17/08/04 19:37:44.52 9p5UOFbs.net
アセンブラで書くならともかく、
既存のコンパイラで自己流の呼び出し規約を使うって可能なのかな。
312:デフォルトの名無しさん
17/08/04 19:43:40.82 gG3ajqK7.net
レジスタとか出てる時点でアセンブラやけどね。
高級言語からは同じに見えてもアセンブラからAPI呼ぶ時に混乱の元だから規約になってるんだろう。
313:デフォルトの名無しさん
17/08/04 19:47:10.77 LmZvF4Bx.net
>>306
自己流の呼び出し規約を使うのは自己流のコンパイラだけだろ
それが既存かどうかは知らんけど
314:デフォルトの名無しさん
17/08/04 19:49:02.44 fFEm/UGM.net
アセンブラでリーフ関数を呼ぶとき位だな
自己流が役立つのは
315:デフォルトの名無しさん
17/08/04 20:12:22.52 B2ZVqR3g.net
pro*cって何のために存在するの?
普通にc言語のコードにSQL埋め込めばよくね?
316:デフォルトの名無しさん
17/08/04 20:15:41.79 d/io8eQ7.net
>>301
第6引数までじゃね? 普通は rdi rsi rdx rcx r8 r9
rax も浮動小数の個数に使うが
windowsだけは rdx rcx r8 r9 だった気がする。
317:デフォルトの名無しさん
17/08/04 20:27:46.30 fFEm/UGM.net
floatやdoubleが混ざれば
318:デフォルトの名無しさん
17/08/04 23:32:26.83 ajRTrwbv.net
>>310
普通はCにSQL埋め込むなんてできないだろ。
SQL文を送ってコンパイルする関数を呼んで実行する関数を呼んで結果を取得する関数を呼ぶので
かまわないならPro*Cなんて必要ない。
それにしてもなんで今頃Pro*Cなんだろうか。とっくに廃止されたかと思ってた。
319:デフォルトの名無しさん
17/08/05 01:02:35.26 wHnek147.net
よくわからないんだけどSQLと連動できるプログラム言語ってあるの?
320:デフォルトの名無しさん
17/08/05 01:36:09.75 AmDvMFkm.net
Transact-SQLとかのことか?
321:はちみつ餃子
17/08/05 02:01:06.28 mmL6pr8y.net
Linq とか
322:デフォルトの名無しさん
17/08/05 13:32:17.23 9ltGhnE7.net
>>314
SQL埋め込みコボルが世の中に何百万行残ってるとおもってんだ
323:デフォルトの名無しさん
17/08/05 17:30:23.26 eD6LHYAo.net
>>293
そりゃそうか
失礼しました
324:デフォルトの名無しさん
17/08/06 15:44:19.07 4cVoKrwP.net
コボルかー
じゃjavaとかpythonとかC++やCで大量データを扱おうと思ったら何らかのアルゴリズムでデーターベース自作するしかないの?
それともそういう目的だとすべからくLinqとかつかってるの?
325:デフォルトの名無しさん
17/08/06 16:33:45.26 k6XOSsfa.net
ORまっぱ
326:デフォルトの名無しさん
17/08/07 00:24:32.53 9fB0IwUX.net
大量のデータを処理したいのならPLSQLとかのdb上で動作するやつじゃないの?
327:デフォルトの名無しさん
17/08/07 00:26:46.20 DdwwpY1/.net
DB操作用のクラスが標準ライブラリにあるから、その言語はSQLをサポートしてると思ってるのだろう。
328:デフォルトの名無しさん
17/08/08 21:38:02.52 9+bCDZAx.net
const char ex1[] = "test";
const char ex2[] = { 't', 'e', 's', 't', '\0' };
auto ex3 = "test";
auto& ex4 = "test";
auto&& ex5 = "test";
ググってみると、ex1とex2は完全に等価、ex3はconst char*?
ex4とex5はconst char[]だけどex1、ex2と等価ではない?
どういうことッスか?なんかよー分からんです。
329:デフォルトの名無しさん
17/08/08 21:44:21.88 RV4q7wps.net
変数名の上にマウスポインターを持って行く
ぐらいは試したのだろうか
330:はちみつ餃子
17/08/08 22:10:21.09 FFmZneRO.net
誰もかれもがモダンな統合開発環境を使ってると思ったら間違いやで。
331:片山博文MZ
17/08/08 22:12:27.93 m3/ZcJyF.net
早くナウいモダンボーイになれよ
332:デフォルトの名無しさん
17/08/08 22:13:12.16 RV4q7wps.net
>>325
その通りだ
では
URLリンク(ideone.com)
この結果を見てわからなければ出家するしかない
ついでにex1,2は関数が実行される度に配列が作られる
333:片山博文MZ
17/08/08 22:16:15.22 m3/ZcJyF.net
配列への参照というのが分かりにくいね。
334:デフォルトの名無しさん
17/08/09 18:30:53.88 hewgQard.net
using F = void () &;
struct A { void f() & {} };
F A::*const &mp = &A::f;
参照もこのぐらい複雑になるとコンパイラーですら正しく実装できないものが出てくる
335:デフォルトの名無しさん
17/08/09 20:42:43.33 deJRgLks.net
初心者歓迎スレはいつから難読コードスレになったんだ?
336:デフォルトの名無しさん
17/08/09 23:21:19.78 HVjwey6J.net
難読禁止スレではないし
それより言語を断らずにc++限定の話すんなや
337:デフォルトの名無しさん
17/08/09 23:58:04.92 1RczvVHb.net
ぷらぷらは意図しない難読化しやすいよなぁ
338:デフォルトの名無しさん
17/08/10 00:19:15.22 iih/xgGV.net
おまえらは意図してドヤ顔でオナニーコード貼って理解できないなら出家しろとか言ってるからな。
初心者相手にマウンティングとか見てて恥ずかしい。
339:デフォルトの名無しさん
17/08/10 07:19:08.51 9leEGZbL.net
バカにマウンティングしてるお前や俺よりマシだろ w
340:デフォルトの名無しさん
17/08/10 07:42:54.68 0ifqJKrS.net
URLリンク(d.hatena.ne.jp)
この話ってグローバル変数の時だけと思っていいですか?
void f(){ const char g[] = "asdf"; }
だと毎回初期化する分、損になりそうに思うんですが
341:デフォルトの名無しさん
17/08/10 07:57:39.32 OxRJE4uH.net
普通は最適化されて何の問題もないだろうけど
組み込み用の一部の糞コンパイラとかで使う可能性があるなら書き換えておいた方が良いかもね
342:デフォルトの名無しさん
17/08/10 08:00:25.98 OxRJE4uH.net
極端に悪くなる可能性のあるコードにしない
汎用性のあるコードを書く時の基本
特定の環境だけならその環境でテストしてみればわかること
343:デフォルトの名無しさん
17/08/10 08:05:23.26 PWbZqU7d.net
>>335
だからstatic付けろって書いてあるっしょ
344:デフォルトの名無しさん
17/08/10 12:55:02.15 XSzwBP/X.net
リテラルに名前付けたいだけなら
auto&&var=リテラル
何も考えずこれでええw
345:はちみつ餃子
17/08/10 13:19:12.39 eseR3mB4.net
せやろか
346:デフォルトの名無しさん
17/08/10 14:56:24.20 R7slyUqA.net
はいそうです
347:デフォルトの名無しさん
17/08/10 16:20:23.29 K3yW/cOR.net
もしかして#defineで定数用意するよりそっちの方がかっこいい?
348:デフォルトの名無しさん
17/08/10 16:58:59.12 R5q9oGzu.net
マクロ多用するとデバッグ面倒にならね?
349:デフォルトの名無しさん
17/08/10 16:59:23.11 9PTjWwFP.net
#define A 100 ←存在が害悪の化石老人
auto &&A = 100; ←ODRを考えない短絡思考
constexpr int A = 100; // ←ふつうの人
constexpr auto &&A = 100; // ←ちょっとヘンな人
350:デフォルトの名無しさん
17/08/10 18:17:00.74 OxRJE4uH.net
組み込みCだとdefineしか出来なかったりするんだよ
351:デフォルトの名無しさん
17/08/10 18:23:30.24 0YJhJ81N.net
>>344
ODR って何の略?
352:デフォルトの名無しさん
17/08/10 18:53:23.23 cpubt7xV.net
>>346
ODRとはOne Definition RuleのことでC++の重要なルールである。
Cの仮定義と異なりC++ではインライン関数やテンプレートを除き
「定義」が複数あってはならない。
この多重定義の禁止と一部の例外を定めたルールがODRと呼ばれる。
例えばauto && A = 100;が記述されたヘッダファイルを
二つの翻訳単位からincludeしたとすると
二つの翻訳単位でAが定義されることになりエラーとなる。
詳細は処理系のマニュアルを見よ。
353:デフォルトの名無しさん
17/08/10 19:40:58.66 1RrigXav.net
もしかしてヘッダファイルにconstexpr auto &&A = "lkjdslkjf";とか書くのって合法?
#define 名前 定数としてたやつは全部constexpr auto &&名前 = 定数で置き換えられる?
354:デフォルトの名無しさん
17/08/10 21:11:04.47 yu1iQyxx.net
>>348
内部リンケージなのでODRには違反しない
翻訳単位ごとに実体が異なるのでアドレスが異なると困る場合には使うべきでないが
これは旧来のstatic constやdefineでも変わらない
355:デフォルトの名無しさん
17/08/11 03:47:43.97 eOUFNbYQ.net
#define→enum→const→constexpr
定数書くのに変わり杉です
理想論いらないです#define溢れた現実世界見よ
356:デフォルトの名無しさん
17/08/11 08:37:53.72 NrUav3sg.net
>>350
老害の見苦しい言い訳乙
ディープラーニングとか言っても理解できないんでしょ?涙拭けよ
357:デフォルトの名無しさん
17/08/11 08:55:50.68 xt3khzo9.net
constexprにしたほうがいいものがconstになってるのは結構あるけど、defineなんてほぼ見ないけどな
358:デフォルトの名無しさん
17/08/11 11:58:39.97 vOciZ7Dc.net
>>351
Aで詐欺でもしてるんですか?
359:はちみつ餃子
17/08/11 13:32:11.00 eZ0/1svY.net
さすがに #define は殺そう
360:デフォルトの名無しさん
17/08/11 14:16:58.81 Tw4iEl8C.net
組み込みのチープな世界を知らないんだな
361:デフォルトの名無しさん
17/08/11 14:29:14.52 Ngnf1AZe.net
知る必要すらない
362:デフォルトの名無しさん
17/08/11 14:37:28.25 Tw4iEl8C.net
リッチな環境限定のスレじゃないから
環境依存OK
363:デフォルトの名無しさん
17/08/11 14:39:12.01 Tw4iEl8C.net
知る必要がない人が大部分だろうが
ここはそういう人限定のスレではない
364:デフォルトの名無しさん
17/08/11 14:40:43.01 Tw4iEl8C.net
>>354 みたいなのを見ると、視野が狭いと思ってしまう
色々な事情で色々なコードがある
365:デフォルトの名無しさん
17/08/11 14:43:55.42 Tw4iEl8C.net
Cに移植する可能性がゼロであるコードをC++上で新規でdefineで書いてたら老害だと思う
366:デフォルトの名無しさん
17/08/11 15:18:06.60 BFfVWgAm.net
組み込みCだとstatic const使えてもアセンブリレベルで
即値にならないので#defineは常識
環境依存スレで多様性否定する奴は去れ
367:デフォルトの名無しさん
17/08/11 15:54:54.01 99wg1jHM.net
>>355
どこのコンパイラ使ってるか書いてみ
368:はちみつ餃子
17/08/11 16:37:53.27 eZ0/1svY.net
>>361
だからそういうコンパイラを殺そうぜっていう話な
369:デフォルトの名無しさん
17/08/11 19:54:31.22 +jIwXf8Q.net
constとconstexprの違いがよくわからない
370:デフォルトの名無しさん
17/08/11 20:11:06.67 TX++PaV2.net
動的か静的かの違い?
371:デフォルトの名無しさん
17/08/11 20:26:59.57 xY0P43RN.net
ROM に書ける内容だったら constexpr
RAM に置かなければならないのなら const
372:デフォルトの名無しさん
17/08/11 20:35:58.34 +GdUPlS/.net
ROMって見たこと無いけど実在するの?
373:デフォルトの名無しさん
17/08/11 22:35:43.38 nYt6U0do.net
>>323
分かるヤツ使ってればいいだろ
374:デフォルトの名無しさん
17/08/11 22:38:20.04 +GdUPlS/.net
>>364
どちらもコンパイル時に決まるものも決まらないものも扱うUNKO仕様なので常人が理解できないのは致し方ない
一つ知っておくべきなのは「constexprの変数はコンパイル時に決まるもののみ」ということ
375:デフォルトの名無しさん
17/08/12 06:07:41.79 Bi4KH0eW.net
>>367
一般人はRAMも見たことないよ
組み込み用マイコンだと、フラッシュROMからそのまま実行したりする
コードもconstデータもROMに置いてそのまま実行出来る
376:デフォルトの名無しさん
17/08/12 08:39:04.62 kmz0IeX9.net
メモリ増設の時ぐらいしかスロット見ないし
え?別の話?
377:デフォルトの名無しさん
17/08/12 08:43:37.90 4bZijuJS.net
光学メディアもROM、RAMか
378:デフォルトの名無しさん
17/08/12 08:45:12.28 W5hpPQ56.net
デシタルネイティブ「RAMもROMを見たことがない」
379:デフォルトの名無しさん
17/08/12 09:18:14.87 l8v9tpAX.net
>>373
> デシタルネイティブ「RAMもROMを見たことがない」
デバイスの話なのか
チップの話なのか
ダイの話なのか
380:デフォルトの名無しさん
17/08/12 11:23:24.91 cYvxwySm.net
>>374
そんなこともわからんのかジジイは
「どんなものかは知らんがRAMとかROMとか呼ばれるモンを見たことがない」
ってことだ
それ以上の意味はない
381:デフォルトの名無しさん
17/08/12 11:30:23.35 Rv1gs3bL.net
CDショップやDVDレンタルショップがあってもそこに並んでいるのがROMだと認識できない無知なだけでは
382:はちみつ餃子
17/08/12 14:15:09.06 5zwa3GdH.net
>>376
いまどきの若者は CD も DVD も使わんのやで。
383:デフォルトの名無しさん
17/08/12 14:27:13.69 sYSoZbpb.net
CDROMなら知ってるよ
384:デフォルトの名無しさん
17/08/12 15:36:58.80 B05a5g6/.net
まあスマホのスペックにはROMとRAMの容量が書いてあるけど
殆どの利用者は理解してないな
385:はちみつ餃子
17/08/12 16:26:44.03 5zwa3GdH.net
スマホの表記で ROM って言ってるの、そもそも ROM じゃないだろっていう。
386:デフォルトの名無しさん
17/08/12 17:41:32.36 ORwFQQja.net
フラッシュはEEPROMの一種だからな
387:デフォルトの名無しさん
17/08/12 18:25:30.05 Bi4KH0eW.net
フラッシュはROMの一種
388:デフォルトの名無しさん
17/08/12 22:15:11.32 KtFjlZWy.net
class C {
private:
static int secret;
public:
friend int peep() {return secret;}
};
このpeepはどうやって呼び出すのが正解なんだぜ?
389:デフォルトの名無しさん
17/08/12 22:18:47.73 3DdLvbHE.net
てかそれコンパイル通る?
390:デフォルトの名無しさん
17/08/12 22:25:08.16 KtFjlZWy.net
>>384
コンパイルは通るんだがまるで飲み込まれたようだぜ
c.peep();
peep();
C::peep();
どれも反応しない
391:デフォルトの名無しさん
17/08/12 22:28:18.66 3DdLvbHE.net
へー、通るんだ。
とりあえず、peep()はメンバー関数じゃないから引数にCを渡すなりするのが普通の使い方だろう。
392:デフォルトの名無しさん
17/08/12 22:33:38.16 l8v9tpAX.net
>>380
「そもそもROM」ってなに?
マスクROMしかダメとか?
393:デフォルトの名無しさん
17/08/12 22:41:10.73 KtFjlZWy.net
おおお
Cクラス渡すと通った
class C {
private:
static int secret;
public:
friend int peep(C data) {return secret;}
};
int PosCalc(BOOL flag) {
C data(0, 0)
int count = peep(data);
//いろいろ計算
}
ダミーでインスタンス渡すってことなんだな
394:デフォルトの名無しさん
17/08/12 22:44:09.18 WjSPvpbD.net
friendの意味分かってる?
395:デフォルトの名無しさん
17/08/12 22:53:16.34 Yi4OBpEw.net
ROM 不揮発メモリ
RAM 揮発メモリ
リードオンリー何それ
396:デフォルトの名無しさん
17/08/12 23:05:04.34 Bi4KH0eW.net
MRAMとかFRAMは不揮発
397:デフォルトの名無しさん
17/08/12 23:05:42.05 qm/cOPpP.net
>>383
URLリンク(ideone.com)
398:デフォルトの名無しさん
17/08/12 23:10:35.92 3DdLvbHE.net
secretはstaticだったか。見落としてた。
399:はちみつ餃子
17/08/13 00:36:14.04 B4YDUmld.net
>>387
Read Only つってるのに、意味が拡大して結局それどういう意味なんだよっていう
400:デフォルトの名無しさん
17/08/13 01:36:36.53 HI8S2XNx.net
文脈で判断しないと。CでROMつったら不揮発性メモリのこと。CDROMのことではない。
401:デフォルトの名無しさん
17/08/13 01:39:15.30 PA7iDDOj.net
それにしてもfirendって付けた関数の方にボディーを書くことが出来るんだな
キモ
402:片山博文MZ
17/08/13 01:59:58.88 8O7/DK3E.net
CでぇーROMまんてぃっく
403:デフォルトの名無しさん
17/08/13 06:29:34.48 03rMAOAx.net
>>395
それは違う
404:デフォルトの名無しさん
17/08/13 06:30:06.63 03rMAOAx.net
>>396
friendじゃなくてもかけるけど
405:デフォルトの名無しさん
17/08/13 07:55:49.45 WSSr83j3.net
>>390
ReadOnlyMemory
406:デフォルトの名無しさん
17/08/13 08:21:05.43 49RznEc3.net
揮発不揮発は関係ない
読み込みと同等の速度で普通に書き込みが出来るか
Cの場合、普通の代入やmemcpyで普通に書き込み出来るかどうか
407:デフォルトの名無しさん
17/08/13 09:45:28.87 HI8S2XNx.net
>>398
おまえのマイコンにはCDROMが内臓されてるのかよ。馬鹿は休み休みいえ。
408:デフォルトの名無しさん
17/08/13 10:05:31.19 HI8S2XNx.net
>>401
また頓珍漢なことを。
409:デフォルトの名無しさん
17/08/13 10:16:39.11 TSMbvEPJ.net
>>395
メモリの不揮発性ってのは意味合いが違うぞ。
フラッシュメモリは不揮発性だがROMではない。
410:デフォルトの名無しさん
17/08/13 10:25:56.46 HI8S2XNx.net
EEPROMの一種だろうが。組み込み経験ない奴はもうレスすんな。
411:デフォルトの名無しさん
17/08/13 10:37:54.73 TSMbvEPJ.net
組み込み経験と何の関係がw
412:デフォルトの名無しさん
17/08/13 10:38:05.69 PA7iDDOj.net
>>399
普通friend指定はこのようにするとおもう
URLリンク(www.sirochro.com)
それを
URLリンク(ideone.com)
のように出来るのはキモいと思うが
413:デフォルトの名無しさん
17/08/13 11:19:48.45 HG5dPUko.net
>>404
フラッシュメモリはROMの仲間だけど…
414:デフォルトの名無しさん
17/08/13 11:20:22.74 md5XkZ0n.net
EEPROMはROMなのか?
415:デフォルトの名無しさん
17/08/13 11:31:45.02 HG5dPUko.net
不揮発性だけどROMでしょ
416:デフォルトの名無しさん
17/08/13 20:43:58.81 Tf2liO6H.net
そりゃ揮発性のROMって意味ないから...
417:デフォルトの名無しさん
17/08/13 21:09:32.11 1akT1/u1.net
肉抜きのステーキとかチーズ抜きのチーズバーガーみたいなもの?
418:デフォルトの名無しさん
17/08/13 23:37:23.43 b2PcXx/4.net
そういうこと言うから豆腐ステーキとか書きたくなる
419:デフォルトの名無しさん
17/08/13 23:41:05.82 WikyJvVl.net
>>356
そういう仕事をするハメになったら
タラタラ文句言うだけで成果出せなくてもいいの?
420:デフォルトの名無しさん
17/08/13 23:45:20.52 WikyJvVl.net
ん?天抜きとかたのまないの?
421:デフォルトの名無しさん
17/08/13 23:51:34.49 TSMbvEPJ.net
天ぬきは天ぷら抜きの天ぷら蕎麦じゃないからな。
422:デフォルトの名無しさん
17/08/14 00:40:01.90 NpV9/t44.net
世の中知らんやつらが多いな
423:デフォルトの名無しさん
17/08/14 00:46:16.17 NpV9/t44.net
フラッシュもEEPROMもROMと呼ばれる
ROMの語源はRead Only Memory
でも、今は消去や書き込みが可能なメモリ�
424:ノも使われるようになった 読み書きともランダムアクセスが可能で、アクセス時間も読み込みと書き込みで大きな差が無いものがRAM DRAMやSRAM, MRAM, FRAMがこの範疇 そうでないものがROM NAND, NOR, EEPROMなんかはROMという扱い
425:デフォルトの名無しさん
17/08/14 00:59:13.70 qET1a6fj.net
いろんな人がいるね。
俺の中では電源切っても覚えてるかどうかの違いだよ。
426:デフォルトの名無しさん
17/08/14 01:00:55.60 NpV9/t44.net
MRAMはROMか?
FRAMはROMか?
427:デフォルトの名無しさん
17/08/14 01:16:56.43 qET1a6fj.net
ROMです(俺の中ではね)
428:デフォルトの名無しさん
17/08/14 01:33:45.85 IT2ffc23.net
ID:qET1a6fjが非常識なのはよく分かったけどあまり言いふらさない方が生活し易いと思うよ
429:デフォルトの名無しさん
17/08/14 01:37:55.14 IeoGyZA4.net
もう少し役立つ話題にしろよ
430:デフォルトの名無しさん
17/08/14 04:51:13.03 qbtpazWw.net
template <typename T>
class DataStoreArray
{
public:
explicit DataStoreArray(std::size_t size) : mValueArray(new T[size]) {}
~DataStoreArray() { delete [] mValueArray; }
inline T operator[](std::size_t index) const
{
cout << "from primary : T : " << index <<endl;
return mValueArray[index];
}
inline T& operator[](std::size_t index)
{
cout << "from primary : T& : " << index <<endl;
return mValueArray[index];
}
private: T* mValueArray;
};
int main()
{
static const int size = 3;
DataStoreArray<int> iStoreArray(size);
for (int i = 0; i < size; ++i)
{
iStoreArray[i] = i * 10;
}
}
from primary : T& : 0
from primary : T& : 1
from primary : T& : 2
iStoreArray2[i] = i * 10;で[]をオーバーロードした時
戻り値がT&のほうが呼び出されるのはなんででしょうか?
431:デフォルトの名無しさん
17/08/14 05:23:42.65 P3rVXCaa.net
class Point {
public:
Point() {}
int x, y;
};
std::vector<Point*> vec;
vec..push_back(new Point());
こんな感じに作られたvectorの中のPointを解放するにはどうしたらいいでしょうか
以下のようなコードを考えて実行していたところ、free_base.cppというところで例外が発生しました
内容は「block Error reading register value.」です
for (unsigned int i = 0; i < vec.size(); i++) {
delete vec[i];
}
432:424
17/08/14 05:24:58.54 qbtpazWw.net
>>424
自己解決しました。
433:デフォルトの名無しさん
17/08/14 05:58:41.65 qbtpazWw.net
>>425
タイプミスとは思うけどvec..push_backのドット2つ付けてるのが原因じゃ
434:デフォルトの名無しさん
17/08/14 18:57:13.14 6kKovBuY.net
>>427
それではないです
435:片山博文MZ
17/08/14 19:38:37.75 0VcPF6xv.net
>>425
コンパイラーを変えてみたら?
436:デフォルトの名無しさん
17/08/14 20:02:20.41 cPbpYqjZ.net
↑バカ
437:デフォルトの名無しさん
17/08/14 21:00:06.87 2BlD9S+P.net
>>425
ここに書いてない部分に問題がある気がする
438:デフォルトの名無しさん
17/08/14 21:09:59.18 4UD3Pot4.net
>>431
delete済みのポインタを更にdeleteしてたりしてな
439:デフォルトの名無しさん
17/08/14 22:15:23.49 IeoGyZA4.net
>>425
stackoverflow.comで聞くといいよ
440:デフォルトの名無しさん
17/08/14 22:21:54.47 i3ERgNqH.net
2chにコード書きこんで質問するんなら
そのコードで問題が再現するのかどうなのかぐらい確認してから
書き込んだ方が良いだろうな、常識的に
441:デフォルトの名無しさん
17/08/14 23:12:49.50 G751meAI.net
でも2chだからなー
442:デフォルトの名無しさん
17/08/14 23:24:57.28 gV3KeQMV.net
普通は再現する最小限のコードこさえてる時点で
たいていはバグの原因に気付いて質問やめる
443:デフォルトの名無しさん
17/08/15 00:30:11.65 ILMibSrs.net
> block Error reading register value
これ何のエラー?
444:デフォルトの名無しさん
17/08/15 01:01:30.84 xb8goknd.net
>>437
WindowsのHeapFreeが出したりするエラーで基本的にはメモリをぶっ壊してる事に起因するらしい
ただしリビルドしたら治ったとかいう話もあったりしてなんだか分からない
445:デフォルトの名無しさん
17/08/15 01:17:41.90 ILMibSrs.net
なら、流行の方法は知らないけど、ポインタを最初にNULLできちんと初期化して
NULLチェックしてからdeleteして、deleteしたら忘れずにNULLで初期化すれぱいいんじゃないの。
446:デフォルトの名無しさん
17/08/15 01:36:52.39 RtDnkjIA.net
スマポ使え
447:デフォルトの名無しさん
17/08/15 01:43:30.18 z7TEyY+0.net
>>439
deleteするときのNULLチェックていらないよね
NULL(nullptr)のdeleteは何も起こらない保証があるから使い終わった後にNULL代入するのはよくやるけど
まぁ今どきのC++なら素直に>>440だね
448:デフォルトの名無しさん
17/08/15 02:48:07.41 ILMibSrs.net
調べたらいっぱいあって余計に混乱しそうだわ
auto_ptr
unique_ptr
shared_ptr
weak_ptr
449:デフォルトの名無しさん
17/08/15 06:24:37.22 /mWh256Z.net
>>442
ナマポで自分でやるのがいいよね
450:デフォルトの名無しさん
17/08/15 08:15:54.91 GzAS59pw.net
>>442
auto_ptr ⇒ オワコン、使用禁止
unique_ptr ⇒ 共有しないならこれ
shared_ptr ⇒ 共有するならこれ
weak_ptr ⇒ はて?いつ使うんだこれ
451:デフォルトの名無しさん
17/08/15 08:22:05.26 nyBipa/m.net
なんか循環参照がどうとか言う時に使う
452:デフォルトの名無しさん
17/08/15 08:37:37.53 X4XuSaPF.net
weak_ptrってかシンプルなreference_ptrみたいなのがほしい
453:デフォルトの名無しさん
17/08/15 10:08:07.69 JqN6tr9G.net
それなら生ポで良いじゃん
454:デフォルトの名無しさん
17/08/15 15:03:52.07 cAweUVNO.net
話題に便乗して。
new,delete満載の既存のコードをスマポに置き換えてくコツみたいのってあります?
作り直したほうが早いのかな
455:デフォルトの名無しさん
17/08/15 18:45:11.19 tu7eHngw.net
shared_ptrか生ポの入ったvectorを基底クラスにアップキャストするスマートな方法おしえてください
割と使うくせに良い方法が思いつかない
456:デフォルトの名無しさん
17/08/15 19:01:49.84 Q70B1fQS.net
>>448
p = malloc()
を
p = std::make_shred<てきとー>() に置き換えて delete() を消す…
457:デフォルトの名無しさん
17/08/15 23:43:12.59 VOm+amDT.net
アップキャストは特に何もしなくても必要になれば勝手に安全にアップキャストされるから
アップキャストするスマートな方法って質問の意図が良くわからない
というか、安全に勝手にアップキャストされるのは静的型のメリットの一つだし
458:デフォルトの名無しさん
17/08/16 00:01:22.48
459:2E64Am1a.net
460:デフォルトの名無しさん
17/08/16 00:25:49.33 2E64Am1a.net
なにかstd::の中に便利なものが用意されているかもしれないが
template< typename _t, typename _u >
void copy( std::vector<_t> &dst, std::vector<_u> &src )
{
auto size = src.size();
dst.resize( size );
auto dst_ptr = dst.data();
auto src_ptr = src.data();
for( size_t i = 0; i < size; ++i )
{
dst_ptr[ i ] = src_ptr[ i ];
}
return;
}
このような感じの適当なテンプレートでも作って対応したらどうですかね
もうちょっと汎用性を持たせることも出来るけど、std::listとかまず使わんし
vector専用ってことで良いんじゃないかな
461:デフォルトの名無しさん
17/08/16 00:44:05.66 2E64Am1a.net
あ~でもデフォルトのアロケータにしか対応しないのはアレか
template< typename _t, typename _u >
void copy_vector( _t &dst, _u &src )
か
template< typename _t, typename _u, typename _v, typename _w >
void copy( std::vector<_t, _u> &dst, std::vector<_v, _w> &src )
の方が良いのかね
462:片山博文MZ
17/08/16 00:49:08.01 N/6IcKLl.net
x.assign(y.begin(), y.end());
463:デフォルトの名無しさん
17/08/16 01:52:38.36 wWWqM4+K.net
典型的なautoの弊害コードだな。
464:デフォルトの名無しさん
17/08/16 15:14:24.51 mnlpMbS3.net
strcmp で長さ0の文字列同士を比較した場合の結果は規定されてますか?
465:デフォルトの名無しさん
17/08/16 16:09:03.15 53LlWcIm.net
>結果は規定されてますか?
Yes
ISO/IEC 9899:2011 7.1.1/1では終端ヌルはstringの一部なので同じと見なされるだろう
ISO/IEC 14882:2014 21.8のstrcmpはCの規格丸投げなので同じだろう
466:457
17/08/16 16:17:21.15 mnlpMbS3.net
ありがとうございます
467:デフォルトの名無しさん
17/08/16 19:58:01.86 SkaUp3/b.net
>>454
こういうtemplateやtypenameが入り混じったc++のソースってc#好きの俺には耐えられん。ごちゃごちゃしていて見た目が美しく無いよね。
468:デフォルトの名無しさん
17/08/16 20:00:25.84 SkaUp3/b.net
ああ、454さんを批判する意図は無いのでお間違いなく。
469:デフォルトの名無しさん
17/08/16 21:21:06.13 64ASz8nj.net
int main() {
std::deque<int> deq(10);
const std::deque<int>::size_type size = deq.size();
for (int i = 0; i < static_cast<int>(size); ++i) { deq[i] = i; }
std::cout << deq.front() << std::endl;
}
配列のサンプルコードで
const std::deque<int>::size_type size = deq.size();
こういう記述を良く見るんですが、
int size = deq.size();
では駄目なケースとかあるんですか?
470:デフォルトの名無しさん
17/08/16 22:14:04.28 1Ba2PBWP.net
テンプレートのウザイ仕様です
型に依存したコードにならざるをえないのに、
使えと強要するような型定義
471:デフォルトの名無しさん
17/08/16 22:15:53.93 1Ba2PBWP.net
ていうか、キャストしてるから動作は同じだな
472:デフォルトの名無しさん
17/08/16 22:45:16.00 zl8YLx97.net
それより
auto size = deq.size();
for (int i = 0; i < size; i++ );
で比較の部分に警告が出るのを何とかして欲しい
473:デフォルトの名無しさん
17/08/16 22:48:56.53 TFzMtZDz.net
なぜ、decltype(size)とすら書かないのか…
474:デフォルトの名無しさん
17/08/16 22:54:21.64 zl8YLx97.net
for (decltype(size) i {}; i < size; i++);
ごめん、生理的に無理
475:デフォルトの名無しさん
17/08/16 22:56:56.26 HDO3jlPo.net
>>467
じゃあ、やめときな
生理的にあわない言語だったんだよ
さようなら
476:デフォルトの名無しさん
17/08/17 02:50:59.58 POHMQxDJ.net
どっちもsize_tじゃアカンの?
477:デフォルトの名無しさん
17/08/17 03:45:02.07 sil69yD8.net
この手の話をする時間が勿体ない
c++の言語仕様に悩む時間が無駄
俺も頃合みて捨てるわ
478:デフォルトの名無しさん
17/08/17 03:47:16.62 6E9r52D/.net
組み込み、OS、ドライバを書く言語ではなくなったな。
479:はちみつ餃子
17/08/17 03:49:09.87 K5IWxEsn.net
>>469
あかんよ。
この場合、 deq の型はたぶん deque を想定してるんだと思うけど、
deq.size() の返却値が size_t である保証はないはず。 (他のコンテナでも同様)
この型はあくまでも deque::size_type なので、
まあ一般的には size_t と同じになるだろうけど厳密に言えばそれをあてにするのはよろしくない。
480:デフォルトの名無しさん
17/08/17 06:22:12.53 zzoRHhsR.net
sizeとdeq.size()が同じ型である必要はない
sizeがdeq.size()の値を保持出来れば何でもいい
charでもビットフィールドでも
481:デフォルトの名無しさん
17/08/17 07:08:05.04 6E9r52D/.net
グダグダ感が半端ないな。そりゃ全てを捨ててJavaやC#を作りたくなるわ。
でもJavaやC#がC++と同じ道を歩んでて笑える。
482:462
17/08/17 08:47:14.10 XAlxh4c7.net
とりあえず万全を期すためにってやつみたいですね。
レスありがとうございました。
483:デフォルトの名無しさん
17/08/18 08:12:05.04 Df++WDQ/.net
[var1 var2] = func();
みたいに返り値2つにする方法ってないですか
484:デフォルトの名無しさん
17/08/18 08:19:11.14 cQGhZEXD.net
二つを含んだ構造体やクラスを返す
引数にアドレスや参照を渡してそこに書いてもらう
グローバル変数経由で返す
ファイル経由で返す
...
485:デフォルトの名無しさん
17/08/18 08:25:33.13 jeMQJBsl.net
>>476
std::tupleでググれ
486:デフォルトの名無しさん
17/08/18 08:40:55.93 nZKbkzFD.net
いいかげんCとC++分けようぜ
487:デフォルトの名無しさん
17/08/18 09:18:42.99 tz1eiY37.net
>>476
有ります
488:デフォルトの名無しさん
17/08/18 09:21:26.56 tz1eiY37.net
きっと昨日Visual C++をバージョンアップして
できるようになったのが嬉しかったに相違ない
489:デフォルトの名無しさん
17/08/18 11:50:59.94 CFJX4XlT.net
初心者歓迎スレなんだから、>>480みたいな小学生の悪ふざけみたいなレスはやめよう。
すでに真っ当な回答も出ているのに。
490:デフォルトの名無しさん
17/08/18 13:03:51.12 Df++WDQ/.net
>>477-478
ありがとうございます
tuple使おうと思います
491:デフォルトの名無しさん
17/08/18 13:07:19.75 jeMQJBsl.net
>>483
ついでにstd::tieもググっとくといいかも
492:デフォルトの名無しさん
17/08/18 21:34:14.61 dvMMsT1N.net
初歩的な質問で申し訳ないのですがC言語のおすすめの開発環境はなんでしょうか
調べてみたら結構種類があって自分で選ぶことができないです