参数通过标准化
Argument passing standardization
我的C++项目越来越庞大。在某些情况下,我只是为了自己的方便而通过引用传递论点,在某些情况下我不会。下面是一个示例:
struct foo{
foo(int &member){
this->member = &member;
}
private:
int *member;
};
当我不想创建int
变量的两个实例时,我正在使用这种模式。我不必实现get
或modify
方法来操纵其值。相反,我可以在不访问 foo 对象的情况下更改变量。但是,有时我使用不同的方法来管理成员变量:
struct foo{
foo(int member){
this->member = member;
}
void modify_member(){
this->member = 6;
}
int get_member(){
return this->member;
}
private:
int member;
};
我不确定在同一结构中混合这两种管理成员的方法是否是一种好的做法。我应该规范化它吗?因此,例如给定结构中的每个函数都将使用"按值传递"方法?
你的第一种情况是灾难的秘诀。你最终会得到悬空的指针和一卡车的未定义行为。
您的第二种情况是封装的糟糕尝试。没有必要。只需使用int
.这将减少代码库的大小。
代码应该易于阅读和更改,即不会破坏程序的方式。示例 1 将导致代码,您几乎无法知道foo
实例在哪里被更改。不要忘记已经提到的所有其他问题。
示例二是可以的。通常,提供 getter 和 setter 允许您稍后添加约束,例如检查值范围。所以我建议使用它们,除非你有充分的理由不这样做。它还使重构更容易。
在函数中传递参数时:根据经验,在基元类型的情况下使用按值传递:int、double 等。传递对象时,请使用常量引用foo(const MyClass &myClass)
。
class MyClass {
public:
MyClass(const MyOtherClass &member1, int member2){
this->member1 = member1;
this->member1 = member1;
}
// other functions, getters, setters omitted...
private:
MyOtherClass member1;
int member2;
};
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 参数通过标准化