【问题标题】:Is this a function call or a variable declaration?这是函数调用还是变量声明?
【发布时间】:2013-07-18 10:44:35
【问题描述】:

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

在以下代码中:

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

【问题讨论】:

  • 语言是什么??
  • 它看起来像 C++。该方法称为tracer,它是FrameDetect 类的成员。它返回一个Point,它也是FrameDetect 的成员。回答他们的问题:这是一个函数声明,所以不是。
  • 为什么要投反对票?这是个好问题。
  • @sje397:谢谢,我去看看。

标签: c++ function variables


【解决方案1】:

同理

int tx = x;

"一个 int 构造函数"

【讨论】:

  • 看起来像作者的意图,但它应该被解析为函数声明
  • @SpongeBobFan 不,请参阅 Tadeusz Kopec 的回答了解为什么不这样做。
  • 感谢您的快速回复。
【解决方案2】:

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

double sin(2);

【讨论】:

    【解决方案3】:

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

    int tx = x;
    

    【讨论】:

    • 基本类型没有构造函数。
    • @soon - 我认为他们可以:stackoverflow.com/questions/11117450/…
    • @sje397,构造函数是一个成员函数。 int 有成员函数吗? :)
    • @soon - 大辩论在这里:stackoverflow.com/questions/5113365/… ... 我想这取决于你是想相信 SO 还是 Bjarne 自己 :)
    • @sje397,我当然相信 Bjarne 和 SO,但在大多数情况下,我相信标准。而且我找不到任何有关基本类型构造函数存在的信息。但你也是对的 - 讨论很大,我认为我们不应该在这里辩论,所以,这是我在这里的最后评论。祝你有美好的一天!
    【解决方案4】:

    这是一个复制构造函数。在 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),它不能被误解为声明。

    【讨论】:

      【解决方案5】:

      int tx(x); 解释。

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

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

      【讨论】:

        猜你喜欢
        • 2022-08-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 2019-09-23
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多