函数可以与用户定义的文字一起使用吗?
如果是这样,可以做些什么恶作剧?这是合法的吗?

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
}

最佳答案

根据 C++11 Feb 2011 Draft § 2.14.8,用户字面量类型是整数字面量、浮点字面量、字符串字面量和字符字面量。没有办法做一个函数字面量类型。



整数:

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++ - 用户定义的文字可以将函数作为参数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8100519/

10-15 04:47