C++11ユーザ定義文字数
1838 ワード
ユーザー定義文字数
次の手順を見てみましょう.
出力は次のとおりです.
この新しい構文は、#include以降の3行のコードが、字面量オペレータliteral operatorと呼ばれるユーザー定義の新しいタイプのオペレータを定義していることを理解しやすい.この例では、この演算子は、例えば、1 mm=10−3 m、1 km=103 m、1 m=1 mの長さ単位を変換することができる.したがって、オペレータは各長さの単位が何メートルであるかを自動的に計算することができます.
この特性の試験を開始する前に,この字面量オペレータのパラメータの数とタイプの制限を理解すべきである.C++11規格によると、以下の署名のみが合法です.
最後の4つは、2番目のパラメータが文字列の長さとして自動的に推定されるため、文字列に役立ちます.例:
出力は8です.
上記の最初の署名は文字列と混同しないでください.元の字面量raw literalオペレータと呼ぶべきです.例:
出力値は12です.
字面量の戻り値は厳密に限定されていない.コンプライアンス・タイプの戻り値を完全に提供できます.例:
その出力はx 5 yであるべきである.
【転入先:https://www.devbean.net/2012/05/cpp11-literals/】
次の手順を見てみましょう.
#include
long double operator"" _mm(long double x) { return x / 1000; }
long double operator"" _m(long double x) { return x; }
long double operator"" _km(long double x) { return x * 1000; }
int main()
{
std::cout << 1.0_mm << '
';
std::cout << 1.0_m << '
';
std::cout << 1.0_km << '
';
}
出力は次のとおりです.
0.001
1
1000
この新しい構文は、#include以降の3行のコードが、字面量オペレータliteral operatorと呼ばれるユーザー定義の新しいタイプのオペレータを定義していることを理解しやすい.この例では、この演算子は、例えば、1 mm=10−3 m、1 km=103 m、1 m=1 mの長さ単位を変換することができる.したがって、オペレータは各長さの単位が何メートルであるかを自動的に計算することができます.
この特性の試験を開始する前に,この字面量オペレータのパラメータの数とタイプの制限を理解すべきである.C++11規格によると、以下の署名のみが合法です.
char const*
unsigned long long
long double
char const*, std::size_t
wchar_t const*, std::size_t
char16_t const*, std::size_t
char32_t const*, std::size_t
最後の4つは、2番目のパラメータが文字列の長さとして自動的に推定されるため、文字列に役立ちます.例:
std::size_t operator"" _len(char const*, std::size_t l)
{
return l;
}
int main()
{
std::cout << "ABCDEFGH"_len << '
';
}
出力は8です.
上記の最初の署名は文字列と混同しないでください.元の字面量raw literalオペレータと呼ぶべきです.例:
char const* operator"" _r(char const* s)
{
return s;
}
int main()
{
std::cout << 12_r << '
';
}
出力値は12です.
字面量の戻り値は厳密に限定されていない.コンプライアンス・タイプの戻り値を完全に提供できます.例:
std::string operator"" _rs(char const* s)
{
return 'x' + std::string(s) + 'y';
}
int main()
{
std::cout << 5_rs << '
';
}
その出力はx 5 yであるべきである.
【転入先:https://www.devbean.net/2012/05/cpp11-literals/】