トップページ⇒tech
983コメント246KB

C++14/C++1y

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/28(月) 01:00:22.34
The C++ Standards Committee
http://www.open-std.org/JTC1/SC22/WG21/

Wikipedia
https://en.wikipedia.org/wiki/C%2B%2B14

C++11/C++1y 18
http://toro.2ch.net/test/read.cgi/tech/1365073520/
0002デフォルトの名無しさん2013/10/28(月) 08:53:28.04
18 ブギ、未来を俺にくれ
0003デフォルトの名無しさん2013/10/28(月) 11:29:11.92
>>2
残念だ、その未来に君はもういないんだよ...
0004デフォルトの名無しさん2013/10/28(月) 19:27:47.38
このスレ、通し番号入ってないけど、良いの?
0005デフォルトの名無しさん2013/10/28(月) 19:40:29.79
14はどうせすぐ来年だし過去ログが必要になるようなスレでもないからなければないでべつにいいと思うよ
0006デフォルトの名無しさん2013/10/28(月) 19:40:53.14
C++11のスレは終わった
0007デフォルトの名無しさん2013/10/28(月) 20:04:57.00
C++学園の人々:飛躍と混沌の14年の巻

○軽量コンセプトさん
あのコンセプトさんが生まれ変わって帰ってきた!
しかしかつてのコンセプトさんに比べると大幅に能力が下がっており、
一部ではstatic_assertさんの変装ではないかと噂されている。入学はもう少し先になる予定。

○attributeさん
久々に任せられたのは「でぷりけーてど」なる呪詛とともにD組送りにする能力。
今日も死んだ魚のような目を輝かせながら生徒達を地獄へ送る。

○constexprさん
いきなり「勝手に『てーすーしき』を名乗るのは許さないからね!」とライブラリ科に向かって言い放ち
学科の多くの生徒達とファンの土器屋を困惑させた。
あと「りかーしぶ」はやっぱりめんどくさいので普通の女の子に戻るらしい。

○ラムダさん
もはや当たり前に受け入れられて引っ張りだこの人気者。かつて服で騒がれてたのは何だったのか。
少し几帳面すぎて融通が利かないのが不評だったので、autoさんに空気の読み方を教えてもらった。

○関数さん
靴のサイズを気にしなくていいラムダさんが羨ましくなったので、autoさんにサイズの決め方を教えてもらった。
せっかくだからラムダさんと同じ服を着たいと言っているのだが、「君はベテランなんだから我慢しなさい」と
周りの大人が許してくれないようだ。

○decltypeさん
新たに姉のautoさんとの合体技も覚えて本人はノリノリだが…
服の違いで性格が変わる悪癖も直っておらず、合体技もやや前衛的で、なんだか最近黒いオーラが見えると噂されている。

○autoさん
型なんかもう全部autoでいいんじゃねえかなと思わせるような八面六臂の大活躍。
不動の学園アイドルの座を射止めた彼女をD組から睨み続けるregisterさんとは目を合わせてはいけない。
0008デフォルトの名無しさん2013/10/28(月) 20:05:29.04
○数値リテラル三姉妹(十進さん、八進さん、十六進さん)
一部の教師のゴリ押しで、ケタクギリなるおかしなアクセサリーを付けさせられることになった。
汚い見た目は主にユーザー定義リテラルさんのせいらしく、恨み節が止まらない。

○二進リテラルさん
数値リテラル姉妹の四女。前の入試では「君は別にいらないから」と入学拒否されたものの
じゃあユーザー定義リテラルさんに代わりやってもらおうかとなったとたんに
急遽入学が決まった。本人は困惑している。なおケタクギリは彼女も付けさせられる予定。

○ユーザー定義リテラルさん
入学してしまったものは仕方ないので、ライブラリ科は受け入れ準備を渋々始めている。
数値リテラル姉妹とのトラブルで陰口を叩かれたり、complexさんのお手伝いのときに
if姐さんを危うく怒らせそうになったりしながらもたくましく生き延びているようだ。がんばって!

○文字列リテラルさん
ついこの間「ゆーてぃーえふ」を操る髪飾りを手に入れた。髪飾りなしでも使えるのだが、そしたら
英語の先生が急にブチ切れたのでビックリして泣き出してしまった。

○拡張for文さん
汚い制服を引きずりながら「Rangeちゃん…Rangeちゃんさえ来てくれれば…」とうわごとを繰り返す毎日。
早く彼女を助けてあげて下さい。

○Traversalさん
元Rangeさん。「お前わかりにくいから」と改名させられ、大変わかりにくくなった。
拡張for文さんが精神を病んでいく様を辛そうに眺めている。
0009デフォルトの名無しさん2013/10/28(月) 20:07:00.27
○asyncさん
入学早々D組行きを宣告された悲劇の子。
ときどき当てても反応しないと、ある先生が職員会議でもらしたばっかりに大問題になり
とても通学できない重病だと判断されたらしい。かわいそうに。

○動的配列さん
入学が延期された。C99クラスにはとっくに通ってるんだから早くしろと怒っているらしい。
双子の妹のdynarrayさんも入学延期中。

○optionalさん
入学が延期された。「どうせ私はoptionalだしー」と本人はあっけらかんとしている。

○exempt_ptrさん
shared_ptrさん達の引き立て役として呼ばれた末妹。アホの子。,
「sharedおねーちゃんはさんしょうカウンターですごいんだぞー」と自慢しているが
もちろん本人は何もわかっていない。入学はもう少し先になりそう。

○禿
校長先生。動的配列さんを自分好みに魔改造すべく企んでいるという噂。
0010デフォルトの名無しさん2013/10/28(月) 20:54:50.41
面白いなあ。誰かラノベ書くしかw
0011デフォルトの名無しさん2013/10/28(月) 20:59:46.67
俺のC++達の妹は友達が少ないがこんなにかわいいわけがない
0012デフォルトの名無しさん2013/10/28(月) 21:08:09.18
C++学園キターーーー!!
0013デフォルトの名無しさん2013/10/28(月) 21:18:30.11
俺がC++学園に底辺サンプルとして拉致された件
0014デフォルトの名無しさん2013/10/28(月) 21:44:22.38
動的配列さんはC99クラスには通ったけどC11でクラスになじめず保健室登校(Optional feature)になってしまった
今では、いない子扱いされてる
0015デフォルトの名無しさん2013/10/28(月) 22:06:46.90
>>11
待て、そのfriendは危険すぎる!
0016デフォルトの名無しさん2013/10/28(月) 22:10:47.27
俺のC++コードが修羅場すぎる
0017デフォルトの名無しさん2013/10/28(月) 22:11:38.77
やはり俺のコードは間違っている
0018デフォルトの名無しさん2013/10/28(月) 22:20:04.27
俺の脳内選択肢が、C++11を全力で邪険にしている
0019デフォルトの名無しさん2013/10/28(月) 22:23:47.67
みんなC++のことが大好きで仕方ないんだね
0020デフォルトの名無しさん2013/10/28(月) 22:25:27.00
私が書けないのはどう考えてもC++の言語仕様が悪い
0021デフォルトの名無しさん2013/10/28(月) 22:32:24.16
プログラマーにしようと校長先生そっくりの禿を錬成してみたら、
俺がアスペになっていました
0022デフォルトの名無しさん2013/10/28(月) 22:51:47.32
>>20
それな。
0023デフォルトの名無しさん2013/10/28(月) 22:58:44.74
お前ら俺の同類ばっかかよw
0024デフォルトの名無しさん2013/10/28(月) 23:31:49.72
俺の教室にC++はいない
0025デフォルトの名無しさん2013/10/29(火) 01:49:56.28
Cぷらぷら!
0026デフォルトの名無しさん2013/10/29(火) 02:07:44.15
とりあえずいままで出番がなかった auto さんが大活躍してくれればおれは他どうでもいいや
0027デフォルトの名無しさん2013/10/29(火) 02:27:33.39
>>26
なるほどなるほど要するに

auto exp = [](){ /* 適当 */ };
auto eq = [](){ /* 適当 */ };
auto ne = [](){ /* 適当 */ };
auto r = exp ? eq : ne;
auto p = find_if(range, r);

みたいに、if文は三項演算子とラムダ式に、ループ文はアルゴリズム関数とラムダ式にして
書けばいいんだろ?1行で書くのが偉いんだよな?身の回りで最近見掛けるわ。

死ねばいいのに
0028デフォルトの名無しさん2013/10/29(火) 02:44:41.64
さすがにその場合expとeqはloop型にするだろ……常識的に考えて……
0029デフォルトの名無しさん2013/10/29(火) 02:46:32.24
bool型のtypoだ。疲れてるんだな
0030デフォルトの名無しさん2013/10/29(火) 15:34:51.26
>>27
const 付けない奴は死ねばいいのに
0031デフォルトの名無しさん2013/10/29(火) 15:55:45.92
ラムダ式を書き連ねて合成して伸ばして等間隔に刻んでサッと茹でて丼に盛って複雑な関数を作る
って書き方は、その関数の生成が実行時になる現在だと悪い冗談だけど、constexprが一般化して
コンパイル時に回るようになったら、思いの他流行りそうな気がしてる。

近い将来、関数言語かぶれ死ね!黙れロートル!というやり取りがされるのかな?とw
0032デフォルトの名無しさん2013/10/29(火) 21:40:46.16
>>31
今でも実行時じゃ無いだろ
0033デフォルトの名無しさん2013/10/30(水) 17:29:16.93
gccのトランポリンコードと勘違いしてんじゃねーの
0034デフォルトの名無しさん2013/10/31(木) 07:24:44.05
bool,int,float A(true,0,0.0);

A = true;
A = 1;
A = 2.0;

if( A )
return true;

if( A == 1 )
return true;

if(A == 1.0)
return false;

if(A==2.0)
return true;
0035デフォルトの名無しさん2013/11/03(日) 20:36:07.95
vectorにunique_ptrを入れていろいろやってみているんですけど、これ結構不便ですよね?
Range-based forを使おうとするとconstがなんたらかんたらでエラーが出るし、
無理に代入しようとするとmoveが起きて、元のスマポの中身が空っぽになる

イテレータでunique_ptrのポインタでも何でもいいからうまく回す方法ないですか?
0036デフォルトの名無しさん2013/11/03(日) 20:47:46.81
お前のコードが悪いんだと思うよ
0037デフォルトの名無しさん2013/11/03(日) 20:49:31.55
ttp://ideone.com/GlMvnm
コードとエラーの内容張れよ
0038デフォルトの名無しさん2013/11/03(日) 20:53:17.11
http://ideone.com/OccVCn

すみません
こんなコードで、要するに一度内容を表示してからソートした後の内容を表示したいんです
中に入れるクラスはintとは限りません(簡単のためにintにしてあります)
0039デフォルトの名無しさん2013/11/03(日) 21:18:19.87
auto_ptrの破壊的セマンティクスからmoveセマンティクスに変わっただけで、コンテナに入れられたり
デリータを指定出来るところは改良されているが、そういう用途には適してないだろ
0040デフォルトの名無しさん2013/11/03(日) 21:41:06.77
>>39
そうですか・・・ありがとうございます
大人しくshared_ptrでも使う事にします
0041デフォルトの名無しさん2013/11/03(日) 23:47:10.45
for (auto& i : v)
std::cout << *i.get() << ' ';
こんな感じでコンパイル通るけど?
0042デフォルトの名無しさん2013/11/04(月) 00:15:07.83
例として出したコードではエラーにならず動いてるのになにを問題にしているのかがわからん
0043デフォルトの名無しさん2013/11/04(月) 00:20:30.67
for (auto i : v) にしたいってことか?
0044デフォルトの名無しさん2013/11/04(月) 00:26:44.23
constなんたらだの、代入だの、forにauto使わずconst参照じゃない型を書いたんじゃねーの
0045デフォルトの名無しさん2013/11/04(月) 00:50:55.31
>>41
gcc4.8.1ですがエラーになります

>>42
エラーにならないコードを書くと>>38になりました
でも実行結果がおかしいですよね

>>44
違います

moveコンストラクタがいつ動くのかしっかりと把握しないとunique_ptrは怖いですね
楽をするならshared_ptr一本です
0046デフォルトの名無しさん2013/11/04(月) 01:10:27.94
エラーになるコードをideoneに貼れば一発でここの住人が直してくれるって言ってるんだよ。
>でも実行結果がおかしいですよね
きちんとソートされているように見えますけれど。
>moveコンストラクタがいつ動くのかしっかりと把握しないとunique_ptrは怖いですね
ちょっと言ってる意味が分からないですね。
0047デフォルトの名無しさん2013/11/04(月) 01:27:35.47
>>46
低脳はちょっと黙ってて
0048デフォルトの名無しさん2013/11/04(月) 01:37:20.87
gcc4.6.4だと動くな
0049デフォルトの名無しさん2013/11/04(月) 01:38:22.51
4.7.3と4.8.2も動くな
0050デフォルトの名無しさん2013/11/04(月) 01:39:33.95
必死ww

動かないソースコードも貼ってないのに
0051デフォルトの名無しさん2013/11/04(月) 06:34:35.12
意地でもエラーを書かないあたりは釣りなんだろう
0052デフォルトの名無しさん2013/11/04(月) 10:47:57.30
お前が書いたコードが糞でFA
0053デフォルトの名無しさん2013/11/04(月) 10:50:49.09
遅れましたすみません
私の偽物が現れて荒らしているようで申し訳ありません

これでちゃんと通り、正常に動きました
ありがとうございました

for (int i = 0; i < N; i++)
v.push_back(std::unique_ptr<int>(new int(distribution(twister))));

for (auto& a : v)
std::cout << *a.get() << ' ';
std::cout << std::endl;

std::sort(std::begin(v), std::end(v), [](const std::unique_ptr<int>& u, const std::unique_ptr<int>& v) { return *u.get() < *v.get(); });

for (auto&a : v)
std::cout << *a.get() << ' ';
std::cout << std::endl;
0054デフォルトの名無しさん2013/11/04(月) 13:54:32.08
>v.push_back(std::unique_ptr<int>(new int(distribution(twister))));

氏ね
0055デフォルトの名無しさん2013/11/04(月) 14:42:05.87
これはひどい
0056デフォルトの名無しさん2013/11/04(月) 14:55:03.47
>>54
どこが死ぬに値するのか全然理解できませんが
0057デフォルトの名無しさん2013/11/04(月) 18:24:50.74
>>54
何がまずいんだっけ?
0058デフォルトの名無しさん2013/11/04(月) 18:55:08.12
デバッグしづらい
0059デフォルトの名無しさん2013/11/04(月) 19:28:11.61
複数の実引数の評価順で問題がでる場合と勘違いしてるか
右辺値をとってムーブするpush_backがあることを知らないかだろ
0060デフォルトの名無しさん2013/11/04(月) 19:37:32.08
emplace_back使うとか?
0061デフォルトの名無しさん2013/11/04(月) 20:16:45.13
敢えて言うならoperator newの後に
distributionが例外をスローすると困る?
0062デフォルトの名無しさん2013/11/04(月) 21:00:41.95
その場合は大丈夫でしょ
0063デフォルトの名無しさん2013/11/04(月) 22:32:27.25
正解は?
0064デフォルトの名無しさん2013/11/04(月) 22:33:23.35
問題ない
0065デフォルトの名無しさん2013/11/04(月) 23:13:12.62
変更に弱い(変更で問題を起こしやすい)コードではあるよな。
0066デフォルトの名無しさん2013/11/04(月) 23:38:13.41
emplace_back()を使うと実行結果がおかしくなるな
なんで?
0067デフォルトの名無しさん2013/11/04(月) 23:42:03.50
まず66のレスが馬鹿っぽいことから
原因は66のおつむにあるとみていいだろう
0068デフォルトの名無しさん2013/11/04(月) 23:43:36.95
>>66
std::cout << std::boolalpha << std::is_sorted(std::begin(v), std::end(v), [](const std::unique_ptr<int>& u, const std::unique_ptr<int>& v) { return *u.get() < *v.get(); }) << std::endl;

これでも付けてみろや
0069デフォルトの名無しさん2013/11/04(月) 23:59:18.15
そもそもintなんかvectorに直接突っ込めばいいだろ
わざわざunique_ptrなんか持ち出すまでもない
0070デフォルトの名無しさん2013/11/04(月) 23:59:58.20
大丈夫、みんなそう思ったけど敢えて突っ込んでない
0071デフォルトの名無しさん2013/11/05(火) 00:35:30.93
いやそこは突っ込みどころじゃないから
>>38
>中に入れるクラスはintとは限りません(簡単のためにintにしてあります)
0072デフォルトの名無しさん2013/11/05(火) 00:54:20.47
>>69
>>38

>中に入れるクラスはintとは限りません(簡単のためにintにしてあります)
0073デフォルトの名無しさん2013/11/05(火) 01:21:16.39
emplace_backの使い方は合ってるのか?
何書いてるのか知らんけど
0074デフォルトの名無しさん2013/11/05(火) 08:20:00.66
emlace_backはクラスにmoveコンストラクタが書いてないとコンパイル時にエラーになるな
0075デフォルトの名無しさん2013/11/05(火) 09:00:38.12
普通のコンストラクタだけで大丈夫だろ
0076デフォルトの名無しさん2013/11/05(火) 15:51:03.57
http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back

右辺値参照してるのに通るんかい
0077デフォルトの名無しさん2013/11/05(火) 19:50:58.39
emplace_backの&&はテンプレートパラメータに対しての指定だから右辺値参照と確定するわけじゃない
universal referenceでぐぐれ
0078デフォルトの名無しさん2013/11/05(火) 20:11:06.59
右辺値参照、時々なんとなく分かった気になるけど、暫くしてよく考え直してみると
分かった気がしただけでやっぱりイマイチよく分かってないことに気付く。死にたいorz
0079デフォルトの名無しさん2013/11/05(火) 20:29:50.06
詰まるところpush_back()とemplace_back()の違いは何よ

いや

http://d.hatena.ne.jp/faith_and_brave/20080930/1222768173

こういう所に答えは書いてあるけどさ
いまいちピンと来ない
0080デフォルトの名無しさん2013/11/05(火) 20:33:10.05
思い切り重いクラスでもvectorに入れて速度比較してメリットを実感するしか方法はなさそうだ

universal reference 初めて聞いたわ
というかプログラミング言語C++11の日本語訳まだ出ないのか
英語版は持ってるけど目がチカチカする
ISO/IECもあるけど
0081デフォルトの名無しさん2013/11/05(火) 20:37:36.95
日本語が欲しいなら江添さん()のオナニー書がオヌヌメ。
0082デフォルトの名無しさん2013/11/05(火) 20:37:39.89
参照の縮約?
0083デフォルトの名無しさん2013/11/05(火) 20:39:16.27
>>81
C++11本書くから寄付くれって言ってた人?
有耶無耶にして逃げるのかと思ってたら、無事完成したのかw
0084デフォルトの名無しさん2013/11/05(火) 20:41:17.44
>>83
書きかけで公開したようだ
0085デフォルトの名無しさん2013/11/05(火) 20:52:53.78
>>84
なるほど、事実だけを端的に表現すると「完成はしなかった」ということかw
0086デフォルトの名無しさん2013/11/05(火) 22:01:44.75
ラストスパート中。まもなく一応の完成となる、と本人は言ってる。
0087デフォルトの名無しさん2013/11/05(火) 22:14:37.21
途中まで読んだんだけど、ひたすら規格書の仕様を
呪文のごとく垂れ流ししてるようなつまらなさ。
規格を読んでれば知ってることばかりだし
Exceptional C++とか禿本のように
読んでwktkするものではない。
0088デフォルトの名無しさん2013/11/05(火) 22:24:20.04
>>86
コア言語だけは完成、な
ライブラリは執筆の目途すら経ってないらしい
0089デフォルトの名無しさん2013/11/05(火) 22:27:01.58
そんだけのものでも、これページ数にしたら結構なもんやで
0090デフォルトの名無しさん2013/11/05(火) 22:51:11.87
>>87
いやそれでいいんだ
画面で見るのと本で読むのとではなぜか全然違う
0091デフォルトの名無しさん2013/11/06(水) 00:16:50.51
もともと日本語で読める標準C++(11)の規格の解説を書くというテーマだからそういうもの
0092デフォルトの名無しさん2013/11/06(水) 01:46:49.72
JISの事か
ゴニョ・・・・
0093デフォルトの名無しさん2013/11/06(水) 07:17:36.23
universal referenceてスコットメイヤーズの造語だった気がするけど
禿の本にも出てるんだっけ?
規格的にはreference collpasingだとか言ったと思う
0094デフォルトの名無しさん2013/11/06(水) 10:06:47.95
>>93
collapsing
0095デフォルトの名無しさん2013/11/06(水) 16:20:04.94
Varidec Templatesの使い所がいまいち分からないんだけど
うまくまとめてあるページない?
0096デフォルトの名無しさん2013/11/07(木) 19:03:11.05
型安全なprintfが作れます
0097デフォルトの名無しさん2013/11/07(木) 22:00:17.76
iostreamと同じで、真似してはいけない悪い見本ですね
0098デフォルトの名無しさん2013/11/07(木) 22:07:37.37
stream << 4 << "番目の素数は" << prime(4) << "です。" << 3.1415926 << "は円周率の近似値です。";
0099デフォルトの名無しさん2013/11/07(木) 22:33:00.72
>>95
本質的には引数の数が違うだけのテンプレートを手で書かなくても自動生成してくれるってだけだから

template<class T1> void f(T1 t)
template<class T1, class T2> void f(T1 t1, T2 t2)
template<class T1, class T2, class T3> void f(T1 t1, T2 t2, T3 t3)
...

みたいなコードを書いてたり書きたかったりした場面で使うだけ
0100デフォルトの名無しさん2013/11/07(木) 23:27:04.00
そんな説明じゃ わからんだろ
正しい使い方の例はstd::threadのコンストラクター
0101デフォルトの名無しさん2013/11/08(金) 00:21:50.94
03までで型の数の制限無し・・・は無理だから制限のゆるいtupleをどう実装するか考えれば
variadic templateのありがたみと使い所の一つは理解できるでしょ
■ このスレッドは過去ログ倉庫に格納されています