问答

把函数定义写在类的友元声明处,这个函数的作用域在哪里?

作者:admin 2021-06-22 我要评论

无论如何也调用不了这个函数。 可以举个简单的例子。 #include iostreamclass A{ friend void f(){ std::cout"HelloWorld!"std::endl; }};int main(){ // 无法调...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

无论如何也调用不了这个函数。

可以举个简单的例子。

#include <iostream>

class A{
    friend void f(){ std::cout<<"HelloWorld!"<<std::endl; }
};

int main()
{
    // 无法调用 f()

    return 0;
}

与其解释这个例子,我更想知道定义在友元声明处的函数,其所在作用域的具体规则!

###

class.friend/7:

A function can be defined in a friend declaration of a class ...

Such a function is implicitly an inline function. A friend function defined in a class is in the (lexical) scope of the class in which it is defined. A friend function defined outside the class is not ([basic.lookup.unqual]).

###

如果我没记错的话,友元声明和函数真正的声明,定义是独立的。c++ primer友元部分讲的比较清楚,友元+模板类的规则也有,用的时候可以看下。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 把函数定义写在类的友元声明处,这个函

    把函数定义写在类的友元声明处,这个函

  •  emscripten 里面 export函数改如何编

    emscripten 里面 export函数改如何编

  • Gateway路由转发503,是路由配置问题?注

    Gateway路由转发503,是路由配置问题?注

  • antd 想要datepicker只能选择每一年的

    antd 想要datepicker只能选择每一年的

腾讯云代理商
海外云服务器