用户定义来自cppreference的const char * literal示例

时间:2018-03-15 13:44:30

标签: c++ c++11 user-defined-literals

在cppreference上有这个例子(http://en.cppreference.com/w/cpp/language/user_literal):

void operator"" _print ( const char* str )
{
    std::cout << str;
}


int main(){
    0x123ABC_print;
}

输出:     0x123ABC

我无法理解这究竟是做什么的。首先我认为0x123ABC只是被视为一个字符串,但0x123ABCHello_print没有编译。然后我认为operator<<被重载,因此它总是以十六进制形式打印,但123_print打印123。它还区分大小写:0x123abC_print打印0x123abC

有人可以向我解释一下吗?一方面它只需要整数作为参数,但另一方面它将它们视为字符串文字。

2 个答案:

答案 0 :(得分:3)

http://en.cppreference.com/w/cpp/language/user_literal

void operator"" _print(const char* str)表示您的文字被视为const char*然后打印出来,这就是它区分大小写的原因。

0x123ABCHello_print无效,因为0x123ABCHello不是数字,对于用户定义的字符串文字,您需要"0x123ABCHello"_print

答案 1 :(得分:2)

the example code中,您会看到:

12_w; // calls operator "" _w("12")

这意味着整数文字将转换为const char[]。然后由用户定义的文字接受。由于它是const char*operator<<只会打印到\0,因此在打印出std::cout << 0xBADFOOD;这样的整数文字时,通常没有特殊处理。< / p>