1 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 15:18:20.76
The C++ Standards Committee
http://www.open-std.org/jtc1/sc22/wg21/

Wikipedia
http://ja.wikipedia.org/wiki/C%2B%2B11

前スレ: C++11/C++0x 15
http://toro.2ch.net/test/read.cgi/tech/1321453654/

51 :デフォルトの名無しさん:2012/04/25(水) 21:53:17.91
volatileは、ポインターかアセンブリで特殊な
セグメントに設置した外部変数じゃないと意味ないから
外部変数をオブジェクトにするならPODじゃないといけないし、
コンテナは使えない

58 :デフォルトの名無しさん:2012/04/26(木) 10:08:51.40
>>51
マルチスレッドで共有しているオブジェクトとか…

134 :デフォルトの名無しさん:2012/05/05(土) 19:19:51.80
ところで
constexpr constructor
って初めて聞いたけど、どこで使うんだ?

148 :デフォルトの名無しさん:2012/05/05(土) 21:31:04.81
#include <iostream>
using namespace std;

struct X {
const int x;
X(const int& x): x(x) {}
X(const X&) = delete;
X& operator=(const X&) = delete;
X(X&& rhs): x(move(rhs.x)) {
cout << "called X(X&&)" << endl;
}
X& operator=(X&& rhs) {
cout << "called operator=(X&&)" << endl;
return *this = X(move(rhs));
}
};

int main()
{
X a = X(2);
cout << a.x << endl;
}

・・・誰が呼ばれたの?・・・

151 :デフォルトの名無しさん:2012/05/05(土) 21:53:02.43
>>148
C++相談スレか、初心者向けのスレに行けよ
C++03の仕様すら知らないのに背伸びするな

159 :デフォルトの名無しさん:2012/05/20(日) 12:17:02.83
>>151
ここは C++11/C++1y スレなので C++03 は関係ないし
右辺値参照を使っているレスに頓珍漢なこと言ってんじゃねえ

おまえこそ cfront 1.0 や ARM C++ の知識はあるのか

160 :デフォルトの名無しさん:2012/05/20(日) 13:06:41.48
>>159
は?一つ前の規格ぐらい把握してから来いっつうのは当たり前だろ。
なんでC++お勉強スレでも無いのにそんな一つ前の規格調べれば
わかる内容を、手とり足取り教えなきゃならん。
ここは、新規格部分の内容や影響を話し合う隔離スレだろうが。

>おまえこそ cfront 1.0 や ARM C++ の知識はあるのか
前規格と関係ないだろ理論的に考えられんのか?
そんな思考じゃデバッグも苦手だろプログラマーやめっちまえ

175 :デフォルトの名無しさん:2012/05/21(月) 00:25:24.06
RVOは戻り値最適化であって
ここでは関係なくね

177 :デフォルトの名無しさん:2012/05/23(水) 21:39:13.60
>>175
確かRVO以前の問題で
X object( 10 );と、X object = X( 10 );は
どちらかが構文糖だったはず。
どのコンパイラでもコピコンとか
別のコンストラクターは介入しない
ようになってたと思う。

178 :デフォルトの名無しさん:2012/05/23(水) 21:43:02.71
上の質問、何を気にしているかというと、

・ループの中身を別の関数で書いて
・thread数だけのプールにその関数をぶっこんで
・main内でthreadをjoinする

と書くことはできるだろうけど、
これだけのためにコードをわかりにくくする必要がないと思っていて、
この作業を抽象化したものがWikipediaで言われているthread poolだろう、
そして、それはOpenMPなみに直感的なものになるだろうと思うんだけど。

簡単にそういう高レベルな内容を実装できると思うならアイディアください。

200 :デフォルトの名無しさん:2012/05/25(金) 18:20:26.25
template <class T>
void f(T x){
  [&] {
    auto y = x;
    std::cout << (&x == &y) << std::endl;
  }();
}

int main()
{
  f(0);
}

gcc-4.7 だと true が表示されるんだけど、
これは正しい動作なのか、バグなのか。


202 :デフォルトの名無しさん:2012/05/25(金) 18:25:44.21
>>200
非明示的な型をautoで推論するとconst referenceが最優先されるからバグじゃない。

226 :デフォルトの名無しさん:2012/05/26(土) 20:38:45.93
template <typename T>
auto f = [](const T& x){return x*x;};
名付けて「テンプレートラムダ」

template using ... と似ててよくね?
ここまでやって本当の関数型言語と呼べるだよ(笑)。

229 :デフォルトの名無しさん:2012/05/26(土) 20:42:03.92
>>226
template <typename T> auto f = [](const T& x){return x*x;} + 1;
って書いたら結果どうなるんだよ

239 :デフォルトの名無しさん:2012/05/26(土) 21:33:12.85
http://codepad.org/TW17YYCe
せやろか?

252 :デフォルトの名無しさん:2012/05/26(土) 21:58:58.87
-std=??? や -ansi はそれだけで規格に厳密になるわけじゃなくて
-pedantic-errors をつけないと拡張機能が有効のまま

285 :デフォルトの名無しさん:2012/05/30(水) 22:50:04.77
この初期化ってC++03でいけたっけ?
std::vector<int> v{5,6,4,3,2,6,7,9,3};
某(ピヨピヨ)でサンプルに使われてるんだけど・・・。

287 :デフォルトの名無しさん:2012/05/30(水) 23:09:16.68
ここです
http://www2.research.att.com/~bs/

336 :デフォルトの名無しさん:2012/06/03(日) 12:27:04.88
具体的にテンプレートでどんなふうに使いたいの?

339 :デフォルトの名無しさん:2012/06/03(日) 12:37:13.03
>>336
実際自分で演算子定義して使ってたりすんだけどね

SelfType &ChangeLevel( const Type &level )
{
 if( !( 0 <= level && level <= 8 ) ) throw InvalidValueError<Type>( key );
 this->level = key;
return *this;
}
※浮動少数系の比較演算子にならい、どちらかが数字でないなら
  大小に関わらずfalseに倒れる
  文字列の変換コストが掛かるが、キャッシュしてるので
  2回目以降は速い。


341 :デフォルトの名無しさん:2012/06/03(日) 13:08:28.47
namespace ore
{
  class string: public std::string
  {
  public:
    // 比較演算以外は完全に std::string と互換で相互に変換可
    template <class ...Args>
    string(Args&& ...args): std::string(std::forward<Args>(args)...){}

    // 独自の比較オペレータ
    operator bool() const {
      if(this->empty()) return false;
      if(*this == "false") return false;
      try{ return !!std::stoi(*this); } catch(...){}
      return true;
    }
  };

  // ore::string 独自の演算子定義
  :
}


342 :デフォルトの名無しさん:2012/06/03(日) 13:17:17.12
>>341
突っ込みどころ満載ではあるが、それはともかく標準であることに意義があるんだよ。
自作なら既に出来てる。

345 :デフォルトの名無しさん:2012/06/03(日) 13:24:44.53
>>342
比較時に勝手に(しかも文字列が)変換される具体的な詳細なんて
合意がとれるわけない。

誰でも簡単に小労力で自分の好みに比較を実装できるんだから
好き勝手にやればいい

348 :デフォルトの名無しさん:2012/06/03(日) 13:32:48.03
>>345
インタプリター系言語だと何故合意がとれてるの?

2番目の理由だと、<tuple>とか不要じゃね
一行書けば誰でも作れるじゃん

351 :デフォルトの名無しさん:2012/06/03(日) 13:39:05.44
そして "0" == 0 でtrue/falseどっちを返しても非難gogoですね、わかります

352 :デフォルトの名無しさん:2012/06/03(日) 13:41:30.64
>>348
javascript のバージョンによって、ブラウザによって、
0 == "0" の意味は変わってきた(はず)

それはつまりコンセンサスが取りづらいということ。

363 :デフォルトの名無しさん:2012/06/03(日) 13:57:35.90
型安全じゃないだろ。
少なくともEffective C++にはそう書いてあるようにしか自分には読めなかったが…(不勉強であることは認める)

365 :デフォルトの名無しさん:2012/06/03(日) 13:59:54.11
>>363
あなたの型安全の定義を教えてもらえるかな?
私としては、実行時に型違反に伴うエラーが起きず
コンパイル時にチェックされることだと思ってるけど。

367 :デフォルトの名無しさん:2012/06/03(日) 14:06:21.70
>>365
型安全の定義はそのとおりだが、
10 == "10" という構文を許すためにはどちらかに自動の型変換が必要になる。
自動の型変換(コンストラクタにせよoperatorにせよ)そのものがC++では危険(必ずしも1対1に対応しないケースが往々にして生じる)なので、
この構文を許す機構が型安全でなくなる…というのがEffective C++の主張だったように思う。

369 :デフォルトの名無しさん:2012/06/03(日) 14:23:07.15
>>367
operator Type()の話じゃないの?

比較演算子とか他のオーバーロードとは別物だと思う。
>>339-340にも書いたと思うけど、文字と数値を比較して
文字列に数字以外が混じっていればfalse。これは、
doubleのNaNと同じ動作だから問題にはならない筈で
型安全に問題をきたす事は無いと思うよ。

370 :デフォルトの名無しさん:2012/06/03(日) 14:44:29.13
>>369
ああ、なるほど。
bool operator ==( int, string const & );
bool operator ==( string const &, int );
のような類を記述するってこと?それなら問題ない。
しかし、やはり標準には入れられない。
なぜなら、char*やstringの中に記述された数値列をどう扱うかは
人によって直感的でないから。
これはCording Standardsの主張だったはず。

372 :デフォルトの名無しさん:2012/06/03(日) 14:53:35.11
std::string::compare( int )を許すのなら、std::string::compare( double )も許す必要がある。
他にも数値型はある。std::std::complexや独自のものなど。
これらについての扱いをどうするのか考えなければならない。
さらに、compareだけ対応するのはおかしいので、assignやappend、その他にもこれを許す必要がある。
型*対応メソッドで爆発するから型変換をオーバーロードで(バキューン!)するのは現実的ではない。
だから型変換は別で行ったほうが良い。しかし、オーバーロードの関係上、型変換は明示的に行う必要がある。
明示的に行うということは、明示的に記述するのだが、
問題は、C++で型変換の記述がいまいち一本化されていないところ。
通常はコンストラクタで代用するが、基本型はクラスを持たないし、加えてC++はオープンクラスではないから、
後から拡張することが出来ない。
型変換はコンストラクタで一本化するとして、
後から拡張できるように、
コンストラクタをクラス外にも定義できるようにしてもらいたいところだね。

373 :デフォルトの名無しさん:2012/06/03(日) 15:00:20.51
>>370
了解。「Cording Standards」はこういう名前の文章があるの?
何かの一部に書いてあるの?

>>372
std::istringstreamが対応してる型だけでいいじゃん。
他は、各自対応すればいい。メンバー関数じゃないから拡張できる。

あと、assingやappendは数値型と互換性がないから意味が無いでしょ
元々、数値型と同じテンプレートが使えるってのがメリットなんだし。
数値型にできない事ができてもしかたない。

411 :デフォルトの名無しさん:2012/06/04(月) 21:37:26.28
0 + std::string("10") + std::string("100") == 110 // true
std::string("10") + std::string("100") == 10100 // true

529 :デフォルトの名無しさん:2012/06/30(土) 01:22:17.16
go langの型推論に感動した。
value := 0;
代入式にコロンつけりゃ推論してくれる
なぜC++もこの方式を導入しなかったんだ。

533 :デフォルトの名無しさん:2012/06/30(土) 03:42:26.61
autoあるしね

536 :デフォルトの名無しさん:2012/06/30(土) 16:46:55.89
>>533
autoじゃなくて、:=が良かったって話で。

547 :デフォルトの名無しさん:2012/06/30(土) 18:13:13.48
1言語狂信者が多いな、いつの間にRuby厨みたいなのが増えたんだ・・・

552 :デフォルトの名無しさん:2012/06/30(土) 18:22:44.85
いや一言語至上主義者が増えたな。
昔はC++関係は比較的そういう人が少ない傾向にあった。
複数の言語の中で気に入った言語があるのは良いことだが
他を排斥するようになったら終わりだ。

567 :デフォルトの名無しさん:2012/07/01(日) 21:53:08.56
>>529
そんなん、大昔の VB みたいにスペルミスのバグを防ぐために option explicit つけろってなるよ。
var value = 0; の方がずっといい。

568 :デフォルトの名無しさん:2012/07/01(日) 23:23:58.78
>>567
型推論と動的型付言語の違い分かってる?
VBのアレは、動的型付の禁止だぞ

572 :デフォルトの名無しさん:2012/07/03(火) 07:55:05.47
>>568
俺が何を言ってるのか分からないなら、
??option explicit スペルミス
でググってよ。
value := 0;
(略)
if ( hoge ) {
??valeu := 1;
}
のバグを見栄えで見つけるのが容易とは言い難いという話なんだけど。

575 :デフォルトの名無しさん:2012/07/03(火) 14:39:50.91
valu := 1; は auto valu = 1; ってことだろ
宣言なんだから

585 :デフォルトの名無しさん:2012/07/03(火) 20:02:01.05
scalaで型推論+自動変換でバリバリ持ち回られると激しく混乱してしまうのは
俺がバカなせい?

型推論使う時は明示的なキャストを、自動変換使う時は明示的な型宣言を
強制する方がソースコードは読みやすくなる気がするんだが・・・・・・

587 :uy ◆pdu1UZmweE :2012/07/04(水) 01:30:05.37
>>585
おめでとうございます
よく気づいたな

型推論(笑)をやっていったその先に何があるかというと
動的言語と同じ問題が静的言語でも発生するようになるだけだよ

型推論のせいでタイプ数は減っても、
情報が目に見えなくなるから、可読性が落ちるのもそのひとつ
a := "test"

~数百行~

b := a  ←型推論   bの型なんてわかりゃしねえ

b := bb
c := cc ッ手やるべき場所を

b := cc
c := bb ッ手やってもエラーは起きない
結局これなら中途半端に型推論とかやらないで最初から動的言語使っていたほうがいい
しかしこれから数年間は、変な奴らが型推論型推論あげまくってるから、この中途半端な概念のゴミカス型推論を使いまくった
超超ゴミッカスソースコードが量産されていくんだろうなwwww、そして10~20年後にソース引き継ぐ奴が涙目になるじゃんやったね

639 :デフォルトの名無しさん:2012/07/26(木) 13:53:33.08
本家のGoコンパイラは、C/C++とcalling convention違うからな。
奴らの特殊なCコンパイラ使わないとCのライブラリをリンクできない。
そしてC++のコンパイラはない。
だからwebkitとかC++のライブラリをGoにラップしてポートするのは大変。
悪い言語じゃないと思うが、これじゃ普及は厳しいだろう。

644 :デフォルトの名無しさん:2012/07/26(木) 22:57:53.81
>>639
とは言え実装他にないわけだし
大差なくね?

646 :デフォルトの名無しさん:2012/07/26(木) 23:35:20.60
>>644
意味がわからん
kwsk

648 :デフォルトの名無しさん:2012/07/27(金) 20:17:06.06
>>646
Cとリンクできるコンパイラーしかないんだから、
言語上インターフェースが特殊だろうと関係ないんじゃなかろうか?
厳密にはコンパイラーが一個しか無いわけじゃないけど
同じパッケージで配布されるから実質1ソフトでしょ

658 :デフォルトの名無しさん:2012/07/28(土) 22:15:55.80
constexpr関数の中に書けてコンパイル時にエラーを出す assert があればいいのに、無いね。

659 :デフォルトの名無しさん:2012/07/28(土) 22:21:49.51
>>658
http://stackoverflow.com/questions/8626055/c11-static-assert-within-constexpr-function

664 :デフォルトの名無しさん:2012/08/02(木) 00:22:52.14
pair や tuple で返ってくるのを、
auto (v1,v2,v3) = hoge();
みたいに受け取れないかな。要は多値だけど。

initializer_list じゃなくて、returner_list とか。

689 :デフォルトの名無しさん:2012/08/05(日) 10:29:28.39
ベクトルや複素数や行列のように、
まとまった一つの数と見なすものを除けば、
式の評価値が複数になることって、
数学的にも無い概念だから、
あまり複雑に考えないほうが良いよ。

694 :デフォルトの名無しさん:2012/08/05(日) 14:29:56.86
解が解の公式の答えの事言ってるなら
std::vectorでよくね。
x.size() == 0; //解なし
x.size() == 1; //解1個
x.size() == 2; //解2個

716 :デフォルトの名無しさん:2012/08/08(水) 07:37:15.99
20.7.2.2.1 shared_ptr constructors

template<class Y, class D> shared_ptr(Y* p, D d);
8. ...The copy constructor and destructor of D shall not throw exceptions.
 The expression d(p) shall be well formed, shall have well defined behavior,
 and shall not throw exceptions.

なので、例外投げる削除子を shared_ptr に使ってはいけない。

719 :デフォルトの名無しさん:2012/08/08(水) 08:31:48.50
>>716-717
削除子の呼び出しが例外を投げるかどうかじゃなくて、 712 が聞いてるのは
削除子のコピーが例外を投げるかどうか、だろ。その規定は関係ないよ。

738 :デフォルトの名無しさん:2012/08/13(月) 20:29:38.11
decltype(*this)
ってできないんだね
子クラスの型情報を親クラスで処理したかったのに


756 :デフォルトの名無しさん:2012/08/16(木) 21:26:02.82
$ cat sizeof.c
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('a'));
return 0;
}
$ gcc sizeof.c && ./a.out
4
$ g++ sizeof.c && ./a.out
1

面倒な・・・w



757 :デフォルトの名無しさん:2012/08/16(木) 23:22:01.11
http://www.bohyoh.com/CandCPP/FAQ/FAQ00004.html
C と C++ で違ったのかよ

761 :デフォルトの名無しさん:2012/08/17(金) 01:29:47.81
横からだけど初めて知ったわー
むしろCの方が何故intにしようと思ったんだろう


http://toro.2ch.net/test/read.cgi/tech/1333433900/l50/../人気ブログランキングへ