c – g“调用”函数不带括号(不是f(),而是f;).为什么总是返回1?
发布时间:2020-12-16 03:09:45 所属栏目:百科 来源:网络整理
导读:c(GNU GCC g). “调用”函数没有() 该函数不工作,但编译好. 更令人惊讶的是,这样的代码总是返回1 … 有没有解释? 我期望功能名称只是一个常规的指针,但似乎有点不同… 我有机会得到所有的1? #include iostreamusing namespace std;void pr (){ cout "sth";
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可以写出以下超载: 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的功能指针.这对于重载的函数和函数模板来说仍然无效,而不指定你想要的哪个重载(通常是通过一个转换). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |