当我们希望它访问该类的私有成员时,我们将非成员函数作为类的朋友.这赋予它与静态成员函数相同的访问权限.两种选择都会为您提供一个与该类的任何实例无关的函数.
什么时候必须使用朋友功能?什么时候必须使用静态函数?如果两者都是解决问题的可行方案,那么我们如何权衡它们的适用性呢?是否有一个默认情况下应该首选?
例如,当实现一个工厂创建foo
只有私有构造函数的类的实例时,工厂函数应该是foo
(你会调用foo::create()
)的静态成员还是应该是友元函数(你会调用create_foo()
)?
可能的重复:
你在哪里使用朋友功能与静态功能?
C++:静态成员函数
什么时候在C++中使用静态成员函数是否合适?请给我一个真实世界的例子.
我知道,给定一个类,比如std :: array,它有一个成员函数,比如size(),我们可以通过"."调用该成员函数,也就是说,在下面的代码中,
array<int,5> myarray;
int s=myarray.size();
Run Code Online (Sandbox Code Playgroud)
s将是表示myarray大小的整数.当成员函数也可以由命名空间运算符"::"调用时,会发生棘手的事情.例如,我知道以下代码行是有效的:
auto t=chrono::high_resolution_clock::now();
Run Code Online (Sandbox Code Playgroud)
然后,使用我们最初用于数组的语法有什么问题?
chrono::high_resolution_clock myclock;
auto t=myclock.now();
Run Code Online (Sandbox Code Playgroud)