STL学習ノート(三)——C++98の経典言語特性
2375 ワード
C++98の古典的な言語特性
1.非タイプテンプレートパラメータ
bitsetはbit個数を実パラメータとし、異なるタイプ間で値を付けたり比較したりすることはできません.例:
2.テンプレートパラメータのデフォルト
クラステンプレートには、デフォルトの実パラメータを持つことができます.例:
3.キーワードtypename
typenameは、次に続くタイプを示すために使用されます.
4.メンバーテンプレート
a)クラスのメンバー関数はテンプレートであってもよいが、メンバーテンプレートは虚関数であってはならない.
b)メンバーテンプレートの特殊な形式は、オブジェクトがコピーされたときに暗黙的なタイプ変換を与えるテンプレート構築関数である.
5.ネスト型クラステンプレート
6.基礎タイプの明確な初期化「明確な構造関数呼び出しが、実パラメータを与えない」という構文では、基礎タイプは初期値0に設定されます.
7.main()定義式ここでmain関数の「正しく移植性がある」定義形式は2つしかないことを強調します.
1.非タイプテンプレートパラメータ
bitsetはbit個数を実パラメータとし、異なるタイプ間で値を付けたり比較したりすることはできません.例:
#include
std::bitset<1> flags1;
std::bitset<2> flags2;
std::bitset<3> flags3;
flags3.set(0, true);
flags3.set(1, false);
flags3.set(2, false);
flags3[2] = true;
int size = sizeof(flags3);
2.テンプレートパラメータのデフォルト
クラステンプレートには、デフォルトの実パラメータを持つことができます.例:
template >
class Test
{
// TODO:
}
Test test; // Test> test;
3.キーワードtypename
typenameは、次に続くタイプを示すために使用されます.
template
class Test
{
typename T::SubType * ptr; // typename SubType T .
}
例えば、Qタイプを使用して、上記のテンプレートをインスタンス化します.class Q
{
typedef int SubType;
}
Test test; // Q SubType .
4.メンバーテンプレート
a)クラスのメンバー関数はテンプレートであってもよいが、メンバーテンプレートは虚関数であってはならない.
b)メンバーテンプレートの特殊な形式は、オブジェクトがコピーされたときに暗黙的なタイプ変換を与えるテンプレート構築関数である.
template
class Test
{
template
Test(const Test& x);
// ...
}
int main()
{
Test t1;
Test t2(t1); // .
Test t3 = t1; // .
Test t4(t1); // .
// ...
return 0;
}
5.ネスト型クラステンプレート
template
class Test
{
template
class NestedClass
{
// ...
}
}
6.基礎タイプの明確な初期化「明確な構造関数呼び出しが、実パラメータを与えない」という構文では、基礎タイプは初期値0に設定されます.
int i; // .
int j = int(); // , 0.
int k{}; // (C++11 ), 0.
は、テンプレート関数に拡張されます.template
void f()
{
T x = T(); // x , 0.
//T x{}; // C++11 , 。
}
7.main()定義式ここでmain関数の「正しく移植性がある」定義形式は2つしかないことを強調します.
// style1.
int main()
{
// ...
return 0; // C++ “return 0;” , ( C).
}
// style2.
int main(int argc, char * argv[])
{
// argc , 1
// argv , .
// char * argv[] char ** argv.
// ...
// return 0; // C++ .
// :exit()、quick_exit()、terminate().
}