失ったC ++ 17



2016年3月5日に、ISO C ++委員会の次の会議がジャクソンビルで終了しました。 人々は、C ++ 17標準では何が入るのか、何が入らないのかを事前に決定しようとしていました。 もちろん、2017年はまだ終わっていないので、他の何かがリプレイされるかもしれません。 それにもかかわらず、C ++ 17を将来の形で概説したのはこのイベントであると考えられています。



猫を尾で引きずって寛容な表現を探しません。大惨事が待っています。 C ++ 11/14標準は非常に重要な進歩でしたが、それだけでした。 C ++ 17は、かつて「メジャー」リリースを約束していましたが、実際には重要なものは何も持ちません。 ちょっとしたシンタックスシュガー、標準ライブラリの小さなもの、そしてそれだけです。 この悲劇の反響はすでにHabréの反響に聞こえていましたが、それでも情報を一般化し、私たちがどこに向かっているのかを理解することにしました。





良いことから始めましょう。



C ++ 17の機能





ファイルシステム

素晴らしいもの! 15年前に標準に入った場合です。 実際、ファイルシステムを操作するための忌まわしい.NETクラスでも-バージョン1.1以降(これは2003年です)。 そしてここで私たちの手は、2016年にboost :: filesystemを借りることになりました。 まあ、ありがとう。



任意、オプション、string_view

最初の2つのことは別のライブラリですでに利用可能であり、string_viewは定数リンクとshared_ptrをマスターしていない人にとってはプラグのように見えます。 「ここにあなたが所有していない行があります、あなたはそれを読むことができるだけです」と言う3番目の方法。 まあ、わかりました。インターフェイスでは見栄えがよく、以前の2つの方法と比較して、何らかの基本的なパフォーマンスは得られません。



constexpr関数のラムダ

constexpr int AddEleven(int n) {
return[n]{return n+11;}();
}
static_assert(AddEleven(5)==16,"");

      
      







, . , constexpr-, , , constexpr-. . . , , , .





, , - « ». , , , - — Threading Building Blocks, «Parallel STL», Intel Cilk Plus - . — . , , . « 14- 15-»





- ?! ? , ++ , ? , - , -, , , -, ++17?



ranged-for ,

(). — , . — , . , , - «, begin() ».



*this

. this , , . , .



[[fallthrough]], [[nodiscard]], [[maybe_unused]]

. , . , , .



.



++17







« ». « ». : « , ». , , - . - « typeclass », - , - , - . , .





! , -, . , ++17. , ( 2012- ) Clang Microsoft. , ( ), , . , , — . , ? , , , . : ++17 , , , « » ( ).





- . , , . , .

int f()
{
  static int i = 0;
  synchronized {
    printf("before %d\n", i);
    ++i;
    printf("after %d\n", i);
    return i;
  }
}

      
      









« ». , . Bjarne Stroustrup Herb Sutter. , ?





,

pair p(2, 4.5);

      
      







pair<int,double> p(2, 4.5); 

      
      







! « ». auto , , , — . ?



Networking

2016- , ++ . 2020- ! , , ? ++ - . ( , , . .)





, : habrahabr.ru/post/278267



( )

, :

auto function(ArgType1 arg1, ArgType2 arg2, ArgType3 arg3)
 [[ pre: arg1 != 0]]
 [[ pre: arg1 < arg2]]
 [[ pre: global_predicate(arg3) ]]
 [[ post: return > 0 ]]
 [[ post: other_predicate(return, arg1) ]]
 -> ResultType;

      
      







- , , . « true, false (?) ». . , ++17, , . !



constexpr if

. , , (. ).



Reflection

, ++ . :



, ++17. 20- 50/50.





++, , . , , , . ++11 . ISO C++. ++17 . , , , . , , — . 17- . - , Clang , , bleeding-edge 17- . ISO C++ , — . - , , . — . - ISO C++, , !



All Articles