书里是先声明变量, 后调用.
函数定义里面两个括号,是因为前者是重载括号运算符,好比 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
函数对象重载了函数调用运算符,因此可以像函数一样直接调用。
所以回答问题,函数对象在应用时需要根据具体情况来决定写几个括号,通常是两个括号,但对于重载了函数调用运算符的函数对象,则可以直接像函数一样写。
【相关推荐】