2013-04-05 83 views
0

我有这样的代码:什么是“ClassName objName; objName(1);”意思?

ClassName objName; 
objName(1); 

我应该如何理解呢?第一行是否使用不带任何参数的构造函数创建一个对象(称为并属于ClassName类)?然后第二行调用带有一个整数参数的构造函数?那么,这意味着,事实上,在第二行我们摧毁旧物体并创建一个新物体?

回答

3

第一行如你所说;它会创建一个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 
2
objName(1); 

此行意味着operator()超载的类名。

1

ClassName是否有超载operator()(int)

这将解释行为 - 在这种情况下,这只是函数调用