我有这个代码:
ClassName objName;
objName(1);
我应该怎么理解?第一行是否使用不带任何参数的构造函数创建了一个对象(称为objName
并属于类)?ClassName
然后第二行调用带有一个整数参数的构造函数?那么,这意味着,事实上,在第二行我们销毁旧对象并创建一个新对象?
我有这个代码:
ClassName objName;
objName(1);
我应该怎么理解?第一行是否使用不带任何参数的构造函数创建了一个对象(称为objName
并属于类)?ClassName
然后第二行调用带有一个整数参数的构造函数?那么,这意味着,事实上,在第二行我们销毁旧对象并创建一个新对象?
第一行按你说的做;它创建一个类型的对象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
objName(1);
此行暗示operator ()
ClassName 已重载。
ClassName
有过载吗operator()(int)
?
这将解释行为 - 在这种情况下,这只是函数调用