C++字面量杂谈

14天阅读挑战赛

std::hexfloat可以将浮点数格式化为十六进制的字符串
std::defaultfloat可以将格式还原到十进制

#include 
int main()
{
 double float_array[]{ 5.875, 1000, 0.117 };
 for (auto elem : float_array) {
 std::cout << std::hexfloat << elem 
 << " = " << std::defaultfloat << elem << std::endl;
 }
}

十六进制浮点数的表示方法

以0x1.f40000p+9为例:其中0x1.f4是一个十六进制的有效数,p+9是一个以2为底数,9为指数的幂,也就是说0x1.f40000p+9可以表示为: 0x1.f4 * 2^9
正如十六进制(0x,0X)和八进制(0)都有固定前缀一样,二进制整数字面量也有前缀0b和0B

单引号作为整数分隔符

C++14标准还增加了一个用单引号作为整数分隔符的特性,目的是让比较长的整数阅读起来更加容易。单引号整数分隔符对于十进制、八进制、十六进制、二进制整数都是有效的,比如:

constexpr int x = 123'456;
static_assert(x == 0x1e'240);
static_assert(x == 036'11'00);
static_assert(x == 0b11'110'001'001'000'000);

原生字符串字面量

声明原生字符串字面量的语法很简单,即 prefix R “delimiter(raw_ characters)delimiter” ,这其中 prefix 和 delimiter 是可选部分
过去想在C++中嵌入一段带格式和特殊符号的字符串是一件非常令人头痛的事情。
最简单的原生字符串字面量声明是 R"(raw_characters)"
通过添加delimiter可以改变编译器对原生字符串字面量范围的判定,从而顺利编译带有 )" 的字符串

char hello_world_html[] = R"cpp(


 
 
 Hello World!


"(Hello World!)"
< / body >
< / html>
)cpp";

对于wchar_t、char8_t(C++20标准开始)、char16_t和char32_t类型的原生字符串字面量也有支持。要支持这4种字符类型,就需要用到另外一个可选元素prefix了。这里的prefix实际上是声明4个类型字符串的前缀L、u、U和u8。

char8_t utf8[] = u8R"(你好世界)"; // C++20标准开始
char16_t utf16[] = uR"(你好世界)";
char32_t utf32[] = UR"(你好世界)";
wchar_t wstr[] = LR"(你好世界)";

你可能感兴趣的:(C++学习,c++,开发语言,算法)