下面的代码会在c++中引起问题吗?

Would the following code causing problems in C++?

本文关键字:问题 c++ 代码      更新时间:2023-10-16

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

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

我们用那样的代码好吗?会不会出问题?

我试着编译一些像这样的东西,它似乎工作。

@update:我张贴这主要是关于名称dummy,和内部变量this->dummy,如果它的问题导致

这对于成员函数来说是非常好的,除了您缺少return语句。dummy将遮蔽成员变量,因此您使用this->来引用成员。

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

对于比简单的set函数更复杂的东西不要这样做,因为它会令人困惑。

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

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

依我看,最好是用一些东西来表示它是一个类成员。有些人直接用mDummy,有些人用m_Dummy,还有些人直接写dummy_。

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

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

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

你的使用没有错,但是代码需要返回一个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;
}

成员变量size被分配给size

  1. 不要这么做,太混乱了!