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を確認します。