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

Is this a function call or a variable declaration?

本文关键字:声明 变量 函数调用      更新时间:2023-10-16

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

在以下代码中:

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);是函数调用还是变量声明?谢谢你的帮助。

与相同

int tx = x;

"一个int构造函数"

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

double sin(2);

表示声明一个名为txint类型变量。调用构造函数tx(x)初始化tx,其值为x。代码也可以这样写:

int tx = x;

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

我将举几个例子:

void afunction_thatDoesNothing(int x){int aFuncDecl()//1:函数声明int aVariable//2:int的默认构造int aValue1=x//3:用x构造int aValue2(x)//4:用x构造int aFuncDecl2(int)//5:采用int的函数的声明}

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

int tx(x);解释

int x(5);一个变量x,我们在创建变量时初始化它。

int x=5;//在这个语句中,我们将5赋值给变量x.x,在本例中已经声明。我们只是更新了它的价值。