来自 cppreference 的用户定义的 const char* 文字示例
User defined const char* literal example from cppreference
在 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
.
谁能给我解释一下?一方面它只接受整数作为参数,但另一方面它把它们当作字符串文字。
http://en.cppreference.com/w/cpp/language/user_literal
void operator"" _print(const char* str)
说明你的字面量取为const char*
然后打印出来,所以是case-sensitive。
0x123ABCHello_print
不起作用,因为 0x123ABCHello
不是数字,对于 user-defined 字符串文字,您需要 "0x123ABCHello"_print
在 the example code 你看到:
12_w; // calls operator "" _w("12")
这意味着整数文字被转换为const char[]
。然后,您的 user-defined 文字会接受它。因为它是一个 const char*
,operator<<
只会打印直到它命中 [=14=]
,没有像通常打印整数文字(例如 std::cout << 0xBADFOOD;
时那样的特殊处理。
在 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
.
谁能给我解释一下?一方面它只接受整数作为参数,但另一方面它把它们当作字符串文字。
http://en.cppreference.com/w/cpp/language/user_literal
void operator"" _print(const char* str)
说明你的字面量取为const char*
然后打印出来,所以是case-sensitive。
0x123ABCHello_print
不起作用,因为 0x123ABCHello
不是数字,对于 user-defined 字符串文字,您需要 "0x123ABCHello"_print
在 the example code 你看到:
12_w; // calls operator "" _w("12")
这意味着整数文字被转换为const char[]
。然后,您的 user-defined 文字会接受它。因为它是一个 const char*
,operator<<
只会打印直到它命中 [=14=]
,没有像通常打印整数文字(例如 std::cout << 0xBADFOOD;
时那样的特殊处理。