c(GNU GCC g). “调用”函数没有()
该函数不工作,但编译好.
该函数不工作,但编译好.
更令人惊讶的是,这样的代码总是返回1 …
有没有解释?
我有机会得到所有的1?
#include <iostream> using namespace std; void pr () { cout << "sth"; } int main() { pr; cout << pr; // output: 1 cout << *pr; // output: 1 cout << ≺ // output: 1 }
解决方法
你实际上并没有在你的代码中调用pr,你将函数指针传递给cout.当被传递给cout时,pr被转换成bool.如果你把cout< boolalpha事先你会输出true而不是1. 编辑:
使用C 11可以写出以下超载:
使用C 11可以写出以下超载:
template <class RType,class ... ArgTypes> std::ostream & operator<<(std::ostream & s,RType(*func)(ArgTypes...)) { return s << "(func_ptr=" << (void*)func << ")(num_args=" << sizeof...(ArgTypes) << ")"; }
这意味着呼叫cout < pr将打印(func_ptr =< pr>的地址)(num_args = 0).该功能本身可以做任何你想要的显然,这只是为了证明,使用C 11的可变模板,你可以匹配任意arity的功能指针.这对于重载的函数和函数模板来说仍然无效,而不指定你想要的哪个重载(通常是通过一个转换).