c++字符字面值常量
// by 鸟哥 qq1833183060 字符字面量
#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
void printCode(auto c){
int len=sizeof(c);
std::cout<<std::hex;
std::cout<<"code:";
unsigned char* p=(unsigned char*)&c;
for(int i=0;i<len;i++){
unsigned char code=*(p+i);
if(code==0){
std::cout<<std::setfill('0')<<std::setw(2)<<"0"<<" ";
}else{
std::cout<<std::setfill('0')<<std::setw(2)<<(int)code<<" ";
}
}
std::cout<<std::endl;
}
int main()
{
auto a='a'; //窄字符字面量或普通字符字面量,例如 'a' 或 '\n' 或 '\13'。这种字面量具有 char 类型
auto b=u8'a'; // UTF-8 字符字面量,例如 u8'a'。这种字面量具有 char (C++20 前)char8_t (C++20 起) 类型,且其值等于 c-字符 的 ISO 10646 码位值,只要码位值能以单个 UTF-8 编码单元表示
auto c=u'a'; //UTF-16 字符字面量,例如 u'字'。这种字面量具有 char16_t 类型,且其值等于 c-字符 的 ISO 10646 码位值,只要该值能以单个 UTF-16 编码单元表示
auto d=U'a'; //UTF-32 字符字面量,例如 U'字'。这种字面量具有 char32_t 类型,且其值等于 c-字符 的 ISO 10646 码位值。
auto e=L'a'; // 宽字符字面量,例如 L'β' 或 L'字'。这种字面量具有 wchar_t 类型,且其值等于 c-字符 在执行宽字符集中的值。若 c-字符 在执行宽字符集中无法表示(例如在 wchar_t 为 16 位的 Windows 上的非 BMP 值),则字面量的值是实现定义的。
std::cout<<sizeof(a)<<' '<<sizeof(b)<<' '<<sizeof(c)<<' '<<sizeof(d)<<' '<<sizeof(e)<<std::endl;
printCode(a);
printCode(b);
printCode(c);
printCode(d);
auto aa='字';
auto bb=u8'字';
auto cc=u'字';
auto dd=U'字';
auto ee=L'字';
std::cout<<sizeof(aa)<<' '<<sizeof(bb)<<' '<<sizeof(cc)<<' '<<sizeof(dd)<<' '<<sizeof(ee)<<std::endl;
printCode(aa);
printCode(bb);
printCode(cc);
printCode(dd);
printCode(ee);
}
运行结果:
1 1 2 4 4
code:61
code:61
code:61 00
code:61 00 00 00
4 1 2 4 4
code:97 ad e5 00
code:97
code:57 5b
code:57 5b 00 00
code:57 5b 00 00
有问题可加qq群1032082534讨论
来源:CSDN
作者:鸟哥01
链接:https://blog.csdn.net/sinat_18811413/article/details/104118150