Pub*_*bby 4 c++ user-defined-literals c++11
函数可以与用户定义的文字一起使用吗?
如果是这样,可以做些什么恶作剧?这合法吗?
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
}
Run Code Online (Sandbox Code Playgroud)
根据C++ 2011年2月11日草案§2.14.8,用户文字类型是整数文字,浮动文字,字符串文字和字符文字.没有办法做函数文字类型.
用户定义的文字被视为对文字运算符或文字运算符模板的调用(13.5.8).要确定具有ud-suffix X的给定用户定义文字L的此调用的形式,使用非限定名称查找规则在L的上下文中查找其文字后缀标识符为X的literal-operator-id( 3.4.1).设S是此查找找到的声明集.S不应该是空的.
整数:
operator "" X (n ULL)
operator "" X ("n")
operator "" X <’c1’, ’c2’, ... ’ck’>()
Run Code Online (Sandbox Code Playgroud)
浮动:
operator "" X (f L)
operator "" X ("f")
operator "" X <’c1’, ’c2’, ... ’ck’>()
Run Code Online (Sandbox Code Playgroud)
串:
operator "" X (str, len)
operator "" X <’c1’, ’c2’, ... ’ck’>() //unoffcial, a rumored GCC extension
Run Code Online (Sandbox Code Playgroud)
字符:
operator "" X (ch)
Run Code Online (Sandbox Code Playgroud)