8 字面量
约 842 字大约 3 分钟
2025-06-22
stddefaultfloat可以将格式还原到十进制
double float_array[]{5.875, 1000, 0.117};
for (auto elem: float_array) {
cout << hexfloat << elem<< " = " << defaultfloat << elem << endl;
}
在C++17中可以在源代码中使用十六进制浮点字面量来表示浮点数
二进制整数字面量
C++14中定义了二进制整数字面量
单引号作为整数分隔符
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);
原始字面量
使转义字符失效
R"xxx(原始字符串)xxx"//语法
string str=R"(D:\hello\world\test.text)"
不在括号左右加字符就能使转义字符失效 括号左右两边的字符串只起描述作用,相当于备注,如果写左右两边的字符串要一样
原本输入路径需要输入两个\来转义成\
"D:\\hello\\world\\test.text"
如果在声明的字符串 内部有一个字符组合正好是)",这样原生字符串就会被截断 这时括号左右的字符就可以起到标识作用了
char hello_world_html[] = R"cpp(hello world "(bye bye C++)" good)cpp";
但是因为我们 添加了cpp这个分隔符,所以编译器能正确地获取字符串的真实范围,从而顺利地通过编译。
对于wchar_t、 char8_t(C++20标准开始)、char16_t和char32_t类型的原生字符串字面量也有支持。
char8_t utf8[] = u8R"(你好世界)"; // C++20标准开始
char16_t utf16[] = uR"(你好世界)";
char32_t utf32[] = UR"(你好世界)";
wchar_t wstr[] = LR"(你好世界)";
用户定义后缀
在C++11标准中新引入了一个用户定义后缀的概念,程序员可以通过自定义后缀将整 数、浮点数、字符和字符串转化为特定的对象。这个特性往往用在需要大量声明某个类型对象的场景中,它能够减少一些重复类型的书写,避免代码冗余
在整数和浮点数序列中,允许在其中插入‘分隔符(用以方便阅读,编译器会自动忽略)
int a=114'514;
double b=114'514.1919'810;
字面量运算符函数的语法和其他运算符 函数一样都是由返回类型、operator关键字、标识符以及函数形参组成的
retrun_type operator "" identifier (params)
所有的用户定义后缀必须以下划线开始,标准库的用户定义后缀不以下划线开始
void operator ""_r(const char* a,size_t b){
cout<<a<<endl;
cout<<b<<endl;
}
int main() {
"12345678"_r;
}
字面量运算符仅允许以下形参列表且不允许是用默认参数和C语言链接
( const char* )
( unsigned long long int )
( long double )
( char )
( size_t )
( wchar_t )
( char8_t )//C++20起
( char16_t )
( char32 _t )
( const char *,std::size t )
( const wchart*,std::size_t)
( const char8_t * , std::size_t )//C++20起
( const char16_t *,std::size_t )
( const char32_t *,std::size_t )
size_t就是long long int
C++14标准允许使用保留字作后缀
贡献者
版权所有
版权归属:PinkDopeyBug