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
成员尤其有用,因为它们不能被重新分配,或者父类本身具有构造函数参数。