三方比較は無い
// 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);
など個別に実装が必要