1

看不懂下面代码的意思,请帮帮我,谢谢。

在以下代码中:

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

资源

4

5 回答 5

2

一样

int tx = x;

“一个 int 构造函数”

于 2013-07-18T10:46:51.603 回答
2

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

int tx = x;
于 2013-07-18T10:59:01.657 回答
2

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

double sin(2);
于 2013-07-18T11:20:04.563 回答
1

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

我将举几个例子:

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

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

于 2013-07-18T11:53:33.557 回答
0

整数交易(x);解释。

诠释 x(5); 变量 x。我们正在创建变量时对其进行初始化。

int x = 5;// 在此语句中,我们将 5 分配给变量 x。x 在这种情况下已经声明。我们只是更新它的值。

于 2013-09-28T21:04:22.687 回答