函数对象应用时到底要写几个括号

img


函数对象这里为什么要写两个括号,直接在第一个括号里写参数是错的

img


但书上这个函数对象的例子就只写了一个括号,难道multiples函数对象不是和书上一样的类只是加了一个模板吗

第一个构造对象, 第二个调用对象的()运算符.

书里是先声明变量, 后调用.

函数定义里面两个括号,是因为前者是重载括号运算符,好比 operator+(a, b)这里的+是重载运算符,这不过这里是括号。
而函数定义里面的两个括号,前者是强制类型转换,后者就是一般的括号作为整体

【以下回答由 GPT 生成】

问题标题: 函数对象应用时到底要写几个括号?

函数对象在应用时需要根据不同的情况来决定写几个括号。

通常情况下,函数对象被当作一个普通的函数调用时,需要写两个括号。第一个括号内写函数对象的实例,第二个括号内写实际参数。这是因为函数对象实际上是一个类对象,需要通过实例化才能调用。

示例代码:

class MyFunctionObject {
public:
    int operator()(int a, int b) {
        return a + b;
    }
};

MyFunctionObject myFunc;
int result = myFunc(1, 2);

在上面的示例中,myFunc是一个函数对象实例,需要通过实例化后才能调用。

然而,对于某些特殊情况,函数对象可以直接当作一个函数调用,而不需要写第二个括号。这通常发生在函数对象重载了函数调用运算符 operator() 的情况下。重载后的函数调用运算符可以接受任意数量的实际参数,因此可以像调用函数一样写。

示例代码:

class MyFunctionObject {
public:
    void operator()() {
        cout << "Hello!" << endl;
    }

    void operator()(int a) {
        cout << "Hello " << a << "!" << endl;
    }
};

MyFunctionObject myFunc;
myFunc();       // Hello!
myFunc(3);      // Hello 3!

在上面的示例中,myFunc函数对象重载了函数调用运算符,因此可以像函数一样直接调用。

所以回答问题,函数对象在应用时需要根据具体情况来决定写几个括号,通常是两个括号,但对于重载了函数调用运算符的函数对象,则可以直接像函数一样写。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^