0

我有这个代码:

ClassName objName;
objName(1);

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

4

3 回答 3

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
于 2013-04-05T09:57:16.197 回答
2
objName(1);

此行暗示operator ()ClassName 已重载。

于 2013-04-05T09:57:18.413 回答
1

ClassName有过载吗operator()(int)

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

于 2013-04-05T09:57:27.380 回答