您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
UDL(udl1014)
文字,定义,类型UDL(udl1014)
发布时间:2020-12-06加入收藏来源:互联网点击:
很多朋友想了解关于UDL的一些资料信息,下面是小编整理的与UDL相关的内容分享给大家,一起来看看吧。
用户定义文字(UDL)是从C++ 11开始的C++中添加的。虽然,C++为各种内置类型提供了文字,但是它们是有限的。
内置类型的文字示例:
// Examples of classical literals for built-in types.42 // int2.4 // double3.2F // float'w' // char32ULL // Unsigned long long0xD0 // Hexadecimal unsigned"cd" // C-style string(const char[3]")我们为什么要使用UDL?
让我们考虑以下示例,以了解UDL的需求。
long double Weight = 2.3; // pounds? kilograms? grams?// With UDL, we attach units to the values which has// following advantages// 1) The code becomes readable.// 2) Conversion computations are done at compile time. weight = 2.3kg;ratio = 2.3kg/1.2lb;要计算上述比率,必须将它们转换为相同的单位。UDL帮助我们克服了单位翻译成本。我们可以为用户定义类型定义用户定义文字,并为内置类型定义新形式的文字。它们有助于使代码中的常量更具可读。在编译时,编译器会将UDL的值替换为代码中定义的实际值。UDL不会节省太多的编码时间,但是可以将越来越多的计算转移到编译时以加快执行速度。
用户定义文字的示例:
"hello"s // string4.3i // imaginary101000111101001b // binary53h // hours234093270497230409328432840923849 // extended-precisionUDL被视为对文字运算符的调用。只支持后缀形式。文字运算符的名称是operator“”,后跟后缀。
范例1:
// C++ code to demonstrate working of user defined // literals (UDLs) #includeiostream #includeiomanip using namespace std; // user defined literals // KiloGram long double operator"" _kg( long double x ) { return x*1000; } // Gram long double operator"" _g( long double x ) { return x; } // MiliGram long double operator"" _mg( long double x ) { return x / 1000; } // Driver code int main() { long double weight = 3.6_kg; cout weight endl; cout setprecision(8) ( weight + 2.3_mg ) endl; cout ( 32.3_kg / 2.0_g ) endl; cout ( 32.3_mg *2.0_g ) endl; return 0; }输出:
36003600.0023161500.0646范例2:
#include iostream #include complex using namespace std; // imaginary literal constexpr complex double operator"" _i( long double d ) { return complex double { 0.0 , static_cast double ( d ) }; } int main() { complex double z = 3.0 + 4.0_i; complex double y = 2.3 + 5.0_i; cout "z + y = " z+y endl; cout "z * y = " z*y endl; cout "abs(z) = " abs(z) endl; return 0; }输出:
z + y = (5.3,9)z * y = (-13.1,24.2)abs(z) = 5在这里,constexpr用于启用编译时间评估。
限制:
UDL只能使用以下参数:
char const*unsigned long longlong doublechar const*, std::size_twchar_t const*, std::size_tchar16_t const*, std::size_tchar32_t const*, std::size_t但是返回值可以是任何类型。
本文到此结束,希望对大家有所帮助呢。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |