我有这样的代码:什么是“ClassName objName; objName(1);”意思?
ClassName objName;
objName(1);
我应该如何理解呢?第一行是否使用不带任何参数的构造函数创建一个对象(称为并属于ClassName
类)?然后第二行调用带有一个整数参数的构造函数?那么,这意味着,事实上,在第二行我们摧毁旧物体并创建一个新物体?
我有这样的代码:什么是“ClassName objName; objName(1);”意思?
ClassName objName;
objName(1);
我应该如何理解呢?第一行是否使用不带任何参数的构造函数创建一个对象(称为并属于ClassName
类)?然后第二行调用带有一个整数参数的构造函数?那么,这意味着,事实上,在第二行我们摧毁旧物体并创建一个新物体?
第一行如你所说;它会创建一个ClassName
类型的对象,并将其称为。它的默认构造函数(不带参数)构造。
第二行是调用该类的超载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
objName(1);
此行意味着operator()
超载的类名。
ClassName
是否有超载operator()(int)
?
这将解释行为 - 在这种情况下,这只是函数调用