我看到有人在C ++类中编写这样的代码:
int foo ( int dummy )
{
this->dummy = dummy;
}
我们应该使用这样的代码,它会导致问题吗?
我试图编译这样的东西,似乎有效。
@Update:
我发布的主要是关于名称dummy
和内部变量this->dummy
,以及是否导致问题
答案 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)