モダンC++とCでの代替手法

NamespaceとCの名前prefix

C++ namespaceはscopeを作り、C libraryはpublic identifierへprefixを付けます。

NamespaceとCの名前prefixとは?

C++ namespaceはscopeを作り、C libraryはpublic identifierへprefixを付けます。

大規模コードでsymbol collisionを防ぎます。

重要なポイント

  • 先にCの仕組みを理解します。
  • RAIIとvalue semanticsでownershipを表現します。
  • macroやcastよりtype-safeな抽象化を選びます。

CとC++のコード例

C
実行 →
main.c
#include <stdio.h>

int math_square(int value) {
    return value * value;
}

int main(void) {
    printf("%d\n", math_square(7));
}
期待される出力
49
C++
実行 →
main.cpp
#include <iostream>

namespace math {
    int square(int value) {
        return value * value;
    }
}

int main() {
    std::cout << math::square(7) << '\n';
}
期待される出力
49

CとC++の比較

C prefixは規約、C++ namespaceはcompilerが強制しaliasとqualified lookupも使えます。

C

Cはprefix、callback、macro、context構造体を使います。

C++

言語機能がscope付きtype-safeな抽象化を提供します。

練習課題

両方を実行して変更し、言語ごとの保証を確認します。

  • 最初にCの仕組みを書きます。
  • 手動cleanupをRAIIに置き換えます。
  • allocationとvirtual dispatchを確認します。