来自 cpp首选项的用户定义的 const char* 文字示例

User defined const char* literal example from cppreference

本文关键字:文字 char 定义 cpp 首选项 用户 来自 const      更新时间:2023-10-16

在cpp首选项上有这个例子(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

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

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

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

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

在示例代码中,您会看到:

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

这意味着整数文本将转换为const char[]。然后,用户定义的文本会接受这一点。由于它是const char*operator<<只会打印直到它到达,没有像通常打印出整数文字(如std::cout << 0xBADFOOD;(时那样的特殊处理。