C++ c+中函子定义的语法+;?
我有一个例子函子减速为C++ c+中函子定义的语法+;?,c++,syntax,C++,Syntax,我有一个例子函子减速为 #include <iostream> class myFunctorClass { public: myFunctorClass (int x) : _x( x ) {} int operator() (int y) { return _x + y; } private: int _x; }; int main() { myFunctorClass addFive( 5 );
#include <iostream>
class myFunctorClass
{
public:
myFunctorClass (int x) : _x( x ) {}
int operator() (int y) { return _x + y; }
private:
int _x;
};
int main()
{
myFunctorClass addFive( 5 );
std::cout << addFive( 6 );
return 0;
}
#包括
类myFunctorClass
{
公众:
myFunctorClass(intx):\ux(x){}
int运算符()(int y){return\ux+y;}
私人:
int_x;
};
int main()
{
myFunctorClass addFive(5);
std::cout这只是myFunctorClass
的构造函数的定义。也许正是:x(x)
部分让你感到困惑。myFunctorClass(intx){}
对你有意义吗?:\ux(x)
部分是一个成员初始化列表,表示成员\ux
应使用参数x
的值初始化,该参数是类的构造函数。它正在初始化数据成员(在:)。并且构造函数的函数体为空。您正在使用类构造函数成员初始值设定项列表将您的成员\ux
初始化为x
,该成员作为5
传递给myFunctorClass addFive(5);
myFunctorClass(int x):\ux(x){
是构造函数。它是在实例化类的对象时执行的函数
:\ux(x)
部分是一个初始化列表。这意味着它使用值初始化成员(在本例中,值x
用于初始化\ux
),或初始化父类
在这种情况下,代码在功能上等于
myFunctorClass (int x) {
_x = x;
}
注意,这种等价性并不总是正确的。初始化、赋值和复制/移动构造之间有细微的区别。它是一个构造函数,get。而且函子没有减速,所以“函子减速”不是一个很有意义的术语。它将私有成员\u x初始化为调用构造函数时指定的值。因此,在您的情况下,甚至在构造函数实际运行之前,\u x就被初始化为5或6。它可能只是用于构造函数,也可能用于其他函数定义。@Erogol初始化器列表仅用于const构造函数。它在其他任何地方都没有意义。初始化列表只能在构造函数中使用。顾名思义,它只是第一次初始化成员或父类。这对于const
成员尤其有用,因为它们不能被重新分配,或者父类本身具有构造函数参数。