我遇到了以下问题:
重载函数运算符
a。需要一个带有重载运算符的类。
b。需要一个带有重载()运算符的类。
c。允许您创建在语法上类似于函数的对象。
d。通常使用带有参数的构造函数。
答案为(a),而据我的理解,正确答案应为(c)。我的逻辑是,运算符()可以在类以及结构中重载。因此,这排除了选项(a)和(b)。而且,当operator()重载时,创建的对象基本上将像函数一样起作用。
例如,如果我们考虑以下因素:
struct A {
void operator()(char c) { }
};
int main() {
A a;
a('z'); // operator() is invoked, hence works like function
}
请让我知道我在哪里错了。这个问题困扰了我一段时间。谢谢
答案 0 :(得分:1)
struct
和class
都创建C ++类的类型。这样逻辑就失败了。
像大多数选择题一样,它是垃圾。
“函数运算符”-模棱两可。也许是指“函数调用”运算符。或强制转换为指针的运算符。 http://eel.is/c%2B%2Bdraft/over.call作为猜测。所以我会去的。
c。允许您创建在语法上类似于函数的对象。
什么是“赞”?任何对象在语法上都不能与函数名称相同。函数名称在C ++中确实是很奇怪的野兽。任何程度的相似性或差异性都可以证明或反驳这个答案。胡说八道。
a。需要一个带有重载运算符的类。
好的,是的;我不知道一种重载函数调用而不重载类上的运算符的方法(或者使用lambda,这对我来说就是做到这一点)。
b。需要一个带有重载()运算符的类。
最正确的。换句话说,就是false。
template<auto x>
using k=std::integral_constant<std::decay_t<dexltype(x)>,x>;
然后
void foo(){}
k<foo> not_foo;
not_foo
没有重载operator()
,但是可以说not_foo()
是函数调用的重载。
但是,它确实具有重载的隐式强制转换为函数指针。在执行函数调用时可以选择哪个。
所以b可能是假的。
这个问题使头发分裂而没有精确性。消防教练,请更好的教练。