Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

https://wg21.link/std https://github.com/dotnet/csharplang

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

// print C++23 std::println( "Hello, {} world! ", " C++23 "); C++ C# printライブラリが やっときた

Slide 8

Slide 8 text

三方比較は無い // IcomparableのCompareTo()で実現 // Null合体演算子 var name = txt ?? “Default”; // Null条件演算子 int? len = dog?.Name?.Length; // Null合体代入演算子 list ??= new List(); // 三方比較演算子での比較 C++23 auto result = a <=> b; // optional C++17 auto name = txt.value_or("Default"); // expected C++23 auto len = dog .and_then([](auto& c){ return c.Name;} ) .and_then([](auto& n){ return std::expected(n.length());}); // optional if ( !list.has_value()){ list = std::vector();} C++ C#

Slide 9

Slide 9 text

C++ C#

Slide 10

Slide 10 text

C++ C# 別案で[[maybe_unused]]を使う方法も あるけど警告抑止程度

Slide 11

Slide 11 text

R“( This is an “Apple”.)”; // 軽量な読み取り専用ビュー C++17 std::string_view sv = // より汎用的 C++20 C++ C#

Slide 12

Slide 12 text

C++ C#

Slide 13

Slide 13 text

C++ C#

Slide 14

Slide 14 text

// 遅延評価の実体化 // 遅延評価の実体化 // パターンマッチング C++23未採用 auto enhanced = [](int x, int y){ return inspect(x) { > 0 if (y > 0) => x + y, _ => 0 };}; C++ C#

Slide 15

Slide 15 text

T>(T C++ C#

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

// 全て標準ライブラリに含まれている C# // 自作

Slide 19

Slide 19 text

C# C++ではこのような高レベルの 抽象化は用意されていない

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

C++ C#では参照が返る (例えばList生成時)

Slide 23

Slide 23 text

C++ C#では public static Complex operator +(Complex a, Complex b) => new Complex(a.first + b. first, a.second + b. second); など個別に実装が必要

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content