我正在阅读“”运算符,发现一些奇怪的代码片段,我不明白。
我不明白从字符串“110011”到const char * s的conervion,size_t l?
我期待的是:
int operator "" _b (const std::string) { .. }
或
int operator "" _b (const char * s) { .. }
userliteral.cpp
...
int operator "" _b (const char * s, size_t l)
{
int decimal {0};
...//conversion
return decimal;
}
的main.cpp
int bin2dez01 = "110011"_b; //<--- string "110011" to const char *s, size_t l ??????
std::cout << bin2dez01 << "\n";
答案 0 :(得分:1)
operator ""
将程序源中的字符串文字转换为另一种类型,在本例中为int
,基于解析二进制数字的字符串表示形式。
C ++中字符串文字的类型是const char *
- 指向表示字符串内容的char
数组的常量指针。你还得到一个size_t
,告诉你字符串有多长,因为你不能仅仅从指针中告诉你。
(C和C ++中字符串的标准是放置一个空字节\0
来标记字符串的结尾,但发现它不是免费的,有时它们会被误删,因此,当你可以时,它总是更容易传递指针和长度。
标准字符串类std::string
可以用字符串文字构造,但与C#和Java等语言不同,它们绝对不是同一类型。你得到了很多错觉,因为std::string
有各种转换操作符和重载,允许你以你期望的方式或多或少地与字符串文字无缝地工作。
总而言之,没有转换 - 字符串文字 是const char *
,size_t
告诉你它有多长。