用户定义的文字可以将函数作为参数吗?

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)

Moo*_*uck 7

根据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)

  • 对,函数名称是标识符,而不是文字.因此,用户定义的*文字*不适用于它们. (2认同)