我有这段代码:
ClassName objName;
objName(1);
我该如何理解?第一行是否使用不带任何参数的构造函数创建了一个对象(称为objName
并属于ClassName
类)?然后第二行调用带有一个整数参数的构造函数?那么,这意味着,实际上,在第二行,我们会销毁旧对象并创建一个新对象?
答案 0 :(得分:3)
第一行就像你说的那样;它创建一个ClassName
类型的对象并将其称为objName
。它使用默认构造函数构造(不带参数)。
第二行是为该类调用重载的operator()
。这允许它像函数一样被调用。参数1
正被传递给该重载运算符。
以下是一个例子:
struct foo
{
operator()(int x) { std::cout << x * 2 << std::endl; }
};
此foo
类型正在重载operator()
,需要int
。然后打印出传递的int
乘以2的值。以下是其使用示例:
foo f;
f(5); // Prints out 10
答案 1 :(得分:2)
objName(1);
这一行意味着ClassName为operator ()
重载。
答案 2 :(得分:1)
ClassName
是否有超载operator()(int)
?
这可以解释行为 - 在这种情况下,这只是函数调用