2016-03-09 128 views
2

我正在阅读关于“”运算符,发现了一些奇怪的代码片段,我不明白。从字符串转换为const char * + size_t在“”运算符

我不明白从字符串“110011”到const char * s,size_t l的conervsion吗?

我期待这样的:

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

operator ""将程序源内的字符串文字转换为另一种类型,在此情况下为int,其基于解析二进制数字的字符串表示形式。

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

(C和C++中的字符串标准是将一个空字节\0标记为字符串的结尾,但发现它不是免费的,有时它们会被错误排除,所以它总是更容易当你可以传递指针和长度时)。

标准字符串类std::string可以从字符串文字构造,但与C#和Java等语言不同,它们绝对不是相同的类型。由于std::string具有各种转换运算符和重载,因此您可能会产生很多错觉,因此您可以按照预期的方式或多或少无缝地处理字符串文字。

因此,在总结,有没有转换正在进行 - 字符串文字真的一个const char *size_t告诉你它有多长。

相关问题