函数可以和用户自定义字面量一起使用吗?
如果可以,那么可以做些什么有趣的事情呢?这是否合法?
void operator "" _bar(int (*func)(int)) {
func(1);
}
int foo(int x) {
std::cout << x << std::endl;
}
int main() {
foo(0); // print 0
foo_bar; // print 1
}
函数可以和用户自定义字面量一起使用吗?
如果可以,那么可以做些什么有趣的事情呢?这是否合法?
void operator "" _bar(int (*func)(int)) {
func(1);
}
int foo(int x) {
std::cout << x << std::endl;
}
int main() {
foo(0); // print 0
foo_bar; // print 1
}
operator "" X (n ULL)
operator "" X ("n")
operator "" X <’c1’, ’c2’, ... ’ck’>()
浮点数:
operator "" X (f L)
operator "" X ("f")
operator "" X <’c1’, ’c2’, ... ’ck’>()
字符串:
operator "" X (str, len)
operator "" X <’c1’, ’c2’, ... ’ck’>() //unoffcial, a rumored GCC extension
角色:
operator "" X (ch)
不行。
C++故意避免这种花招,因为如果在示例中没有立即定义foo_bar符号,它将非常难以理解。
您可以通过预处理器实现类似的功能。
#define bar (1)
int foo(int x) {
std::cout << x << std::endl;
}
int main() {
foo(0); // print 0
foo bar; // print 1
}
foo_bar
,它只是一个单一的词汇标记。它被解释为一个名为 foo_bar
的单个标识符,而不是 foo
后缀加上 _bar
。我不知道这是否有所帮助,但没有任何阻止你定义
PythonScript operator"" _python(const char*, std::size_t len) {...}
R"Py(
print "Hello, World"
)Py"_python;
我认为用户定义的字面量会成为嵌入脚本或SQL的好方法。
""
用户自定义字面量的参数始终是char*
和size_t
,不是吗? - Mooing Duck