参数通过标准化

Argument passing standardization

本文关键字:标准化 参数      更新时间:2023-10-16

我的C++项目越来越庞大。在某些情况下,我只是为了自己的方便而通过引用传递论点,在某些情况下我不会。下面是一个示例:

struct foo{
    foo(int &member){
        this->member = &member;
    }
    private:
        int *member;
};

当我不想创建int变量的两个实例时,我正在使用这种模式。我不必实现getmodify方法来操纵其值。相反,我可以在不访问 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;
};