这是函数调用还是变量声明?

时间:2013-07-18 10:44:35

标签: c++ function variables

我无法理解以下代码的含义,请帮帮我,谢谢。

在以下代码中:

FrameDetect::Point FrameDetect::tracer(LabelData *ldata, int x, int y, int &pos, int lbl)
{
    for (int i=7; i>=0; i--)
    {
        int tx(x);
        int ty(y);
        nextPoint(tx, ty, pos);
        if (tx>0 && ty>0 && tx < bimg->width() && ty < bimg->height())
        {
            const int &l( ldata->at(tx, ty) );
            if (bimg->at(tx, ty) == ccolor && (l == 0 || l == lbl))
            {
                return Point(tx, ty);
            }
            if (bimg->at(tx, ty) == bcolor)
            {
                ldata->at(tx, ty) = -1;
            }
        }
        pos = (pos + 1)%8;
    }
    return Point(-1, -1);
}

int tx(x);是函数调用还是变量声明?谢谢你的帮助。

Source

5 个答案:

答案 0 :(得分:2)

相同
int tx = x;

“一个int构造函数”

答案 1 :(得分:2)

这意味着声明一个名为int的{​​{1}}类型变量。调用构造函数tx初始化tx(x),其值为tx。代码也可以这样写:

x

答案 2 :(得分:2)

这是一个变量声明。它不能被解析为函数声明,因为括号中的表达式不能命名类型 它也不能是函数调用 - 语法无效。你不能写

double sin(2);

答案 3 :(得分:1)

这是一个复制构造函数。在c ++中,当您声明一个没有参数的变量时会出现混淆。在那种情况下,你省略括号

我将举几个例子:

void afunction_thatDoesNothing(int x)
{
   int aFuncDecl();     //1: function declaration
   int aVariable;       //2: default construction of int
   int aValue1 = x;     //3: constructing with x
   int aValue2(x);      //4: constructing with x
   int aFuncDecl2(int); //5: declaration of a function taking an int
}

上面唯一存在声明与初始化歧义的情况是情况1 - 在您的代码中,您为构造函数提供了一个值类型表达式(情况4),并且它不能被误解为声明。

答案 4 :(得分:0)

int tx(x); 解释

int x(5);变量x。我们在创作时就开始了变异。

int x = 5; //在这个语句中我们将5分配给varible x。在这种情况下已经声明了x。我们只更新它的价值。