我最近发现在C++中你可以以一种奇怪的方式重载"函数调用"操作符,你需要编写两对括号来执行此操作:
class A {
int n;
public:
void operator ()() const;
};
Run Code Online (Sandbox Code Playgroud)
然后以这种方式使用它:
A a;
a();
Run Code Online (Sandbox Code Playgroud)
什么时候有用?
鉴于这样的类:
class Foo {
public:
Foo(int);
Foo(const Foo&);
Foo& operator=(int);
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
这两条线是完全相同的,还是它们之间有细微差别?
Foo f(42);
Foo f = 42;
Run Code Online (Sandbox Code Playgroud)
编辑:通过在原始问题中使Foo构造函数"显式",我感到困惑.我删除了,但欣赏答案.
我还添加了一个复制构造函数的声明,以明确复制可能不是一个简单的操作.
我真正想知道的是,根据C++标准,"Foo f = 42"会直接调用Foo(int)构造函数,还是会调用复制构造函数?
看起来fasih.ahmed有我正在寻找的答案(除非它是错的).