在“”运算符中从字符串转换为const char * + size_t

时间:2016-03-09 08:38:04

标签: c++ c++11

我正在阅读“”运算符,发现一些奇怪的代码片段,我不明白。

我不明白从字符串“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";

1 个答案:

答案 0 :(得分:1)

operator ""将程序源中的字符串文字转换为另一种类型,在本例中为int,基于解析二进制数字的字符串表示形式。

C ++中字符串文字的类型是const char * - 指向表示字符串内容的char数组的常量指针。你还得到一个size_t,告诉你字符串有多长,因为你不能仅仅从指针中告诉你。

(C和C ++中字符串的标准是放置一个空字节\0来标记字符串的结尾,但发现它不是免费的,有时它们会被误删,因此,当你可以时,它总是更容易传递指针和长度。

标准字符串类std::string可以用字符串文字构造,但与C#和Java等语言不同,它们绝对不是同一类型。你得到了很多错觉,因为std::string有各种转换操作符和重载,允许你以你期望的方式或多或少地与字符串文字无缝地工作。

总而言之,没有转换 - 字符串文字 const char *size_t告诉你它有多长。