下面的代码会导致C ++出现问题吗?

时间:2011-12-06 10:32:45

标签: c++ class

我看到有人在C ++类中编写这样的代码:

int foo ( int dummy ) 
{
   this->dummy = dummy;
}

我们应该使用这样的代码,它会导致问题吗?

我试图编译这样的东西,似乎有效。

@Update: 我发布的主要是关于名称dummy和内部变量this->dummy,以及是否导致问题

6 个答案:

答案 0 :(得分:5)

除了缺少return语句之外,对于成员函数来说这是完全正常的。 dummy会影响成员变量,因此您使用this->来引用成员。

int foo ( int dummy ) 
{
   this->dummy = dummy; // set member to argument
   return this->dummy;
}

对于比简单的集合函数更复杂的事情,不要这样做,因为它令人困惑。

int foo ( int dummy )  // Bad practise! Rename this param as the function isn't a setter
{
   this->dummy = dummy * 2 + 1; 
   return this->dummy;
}

答案 1 :(得分:1)

这样做是没有错的。如果您使用虚拟假设它来自类但它实际上来自参数,它可能会让人感到困惑。

IMO,最好使用某些东西来表示它是一个类成员。有些人只使用mDummy,其他m_Dummy,其他人只使用dummy _。

取决于你喜欢什么,但最重要的是你应该保持一致。

答案 2 :(得分:0)

代码不好。该函数定义为返回int但没有return语句。编译器可能只会对此发出警告,但是调用foo的函数可能会期望它返回一个有效值,但它不会返回,并且可能会发生错误。

答案 3 :(得分:0)

如果您传递的参数与成员变量的名称相同,则必须这样做。 但是,通过使用不同的名称来避免隐藏(成员)变量可能是更好的做法。有不同的编码风格,有些会使用dummy_,有些会使用mDummy或其他方式来命名成员变量。这使您的代码更容易混淆。

答案 4 :(得分:0)

你的使用没有任何问题,但是代码需要返回一个int作为它的int函数:)

当前类中的虚拟变量被赋值给传递的int,但是请记住它们是不同的但现在指向同一个东西,因此最好给它一个不同的名称,因为它在另一个中。

但是在某些变量类型下你可能会失去精度。

#include <stddef.h>

typedef struct intlist {
  int size;
  int i[1];
} intlist;

intlist *
makeintlist (int size)
{
  intlist *ilp = malloc (offsetof (intlist, i[size])); /* not C++ */
  ilp->size = size;
  return ilp;
}

成员变量大小分配给大小

答案 5 :(得分:-1)

  1. 那会有用。
  2. 不要这样做,这令人困惑!