C 11 在 [over.built] 中定义了内置运算符,并指定这些运算符参与重载决策,但不用于其他目的。因此,您不能拥有指向它们的函数指针。
为了解决这个问题,标准在 [function.objects] 中引入了函数对象。这些对象可以在其operator()函数中衰减为其相应的运算符:
函数对象可以用作函数指针参数,如用户1034749提供的响应中所示。
对于标准库运算符,您可以将它们用作函数指针,尽管您需要引用它们各自的模板实例。编译器需要足够的提示来推断出正确的模板。下面是一个示例:
<code class="cpp">#include <iostream> #include <string> using namespace std; template<class Test> Test test_function(Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &)) { return FPtr(a, b); } int main() { typedef basic_string<char> String; String a("test"), b("test2"); cout << test_function(a, b, &operator+); return 0; }</code>
在此示例中,运算符作为 test_function 的函数指针提供。请注意,如果省略 test_function 的模板参数,则在某些编译器(如 MSVC 2012)中推导将失败。
以上是你能得到一个指向 C 中内置标准运算符的函数指针吗?的详细内容。更多信息请关注PHP中文网其他相关文章!