149得票2回答
运算符重载:成员函数 vs 非成员函数?

我读到过,将重载运算符声明为成员函数是不对称的,因为它只能有一个参数,而自动传递的其他参数是this指针。因此,不存在标准来比较它们。另一方面,作为friend声明的重载运算符是对称的,因为我们传递了两个相同类型的参数,因此它们可以进行比较。 我的问题是,当我仍然可以将指针的lvalue与引...

46得票7回答
Effective C++ 条款23:更喜欢非成员和非友元函数而不是成员函数

在考虑类设计时,特别是函数应该是成员函数还是非成员函数的问题上,我查阅了Effective c++中的第23条建议:优先使用非成员非友元函数。首先看到其中以Web浏览器为例的内容,感觉有些道理,但是书中所称的"方便函数"(指非成员函数)改变了类的状态,不是吗? 那么,我的第一个问题是,这些...

33得票3回答
未命名命名空间中的自由函数相较于具有私有成员函数的类有哪些好处?

在一个匿名命名空间中拥有一个自由函数并将所有变量作为参数传递,相对于拥有一个不带任何参数的私有类成员函数并直接访问成员变量,有什么优势呢? class A { int myVariable; void DoSomething() { myVariable = ...

32得票4回答
使用Doxygen记录C++函数

我有一个项目,我正在使用Doxygen来生成文档。类的文档已经很好了,但我还有一些非成员函数用来创建对象等。我也希望对它们进行文档化,但无论我尝试什么方法,Doxygen都不会从我放在函数上面的注释中生成文档。为什么Doxygen不会为全局命名空间中的函数生成文档,我需要做什么才能让它工作?

22得票2回答
C++赋值运算符可以作为自由函数吗?

我正在尝试类似这样的东西:Foo & operator=(Foo & to, const Bar &from); 但是我遇到了这个错误:E2239 'operator =(Foo &, const Bar &)' must be a member fun...

19得票6回答
Python中的非成员函数与成员函数

我对Python相对较新,并且很难将该语言的特性与我在C ++和Java背景下养成的习惯结合起来。 我目前遇到的问题与封装有关,具体而言是Meyer的“Effective C++”中第23项最好概括的一个想法: 优先使用非成员非友元函数而不是成员函数。 暂时忽略缺少friend机...

15得票5回答
为什么我们需要静态成员函数,而自由函数可以做同样的事情呢?

在阅读了sbi和Eli Bendersky在这个问题中的回答之后,我开始思考静态成员函数的用途。 一个类的友元自由函数不应该能够做到静态成员函数所能做的任何事情吗?如果是这样,为什么/何时应该优先选择静态成员函数而不是友元自由函数呢?

14得票1回答
非成员函数中使用'this'的方式无效

我一开始把所有的代码都写在同一个.cpp文件里,后来发现这个类变得越来越大,于是我决定把它分成.h和.cpp两个文件。 gaussian.h文件:class Gaussian{ private: double mean; double standard...

13得票2回答
自由函数的部分模板特化 - 最佳实践

作为大多数C++程序员应该知道的,自由函数的部分模板特化是不允许的。例如,以下代码是非法的C++代码: template <class T, int N> T mul(const T& x) { return x * N; } template <class T&...

12得票3回答
类与命名空间之争,还是类和命名空间共存?

既有类又有命名空间? 这个问题是关于一个我越来越多地使用的模式:为相关概念同时创建类和命名空间。我认为这主要是由于C++语言工件的影响,但不完全如此。 我想最重要的问题是:这样做好吗?为相关概念同时创建类和命名空间? 更低级别的问题: 如何做到最好?在命名空间内嵌套类?namespac...