什么是“ClassName objName; objName(1);”意思?

时间:2013-04-05 09:56:04

标签: c++ syntax instantiation

我有这段代码:

ClassName objName;
objName(1);

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

3 个答案:

答案 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)

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