将所有常量定义为const引用?

时间:2016-04-02 22:54:43

标签: c++

是否有定义常量的最佳实践?这是一个小例子:

#include <vector>

struct mystruct {
    std::vector<double> data;
    mystruct() : data(100000000,0) {};
};

int main(){
    mystruct A;
    int answer = 42;

    const mystruct& use_struct_option_1 = A; // quick
    const mystruct use_struct_option_2 = A; // expensive

    const int& use_answer_option_1 = answer; // good practice?
    const int use_answer_option_2 = answer; // ubiquitous
}

显然,以这种方式初始化use_struct_option_2是昂贵的,因为mystruct的复制构造函数被调用,而初始化use_struct_option_1的方式更快。 但是,这同样适用于整数等类型吗?

从我已经锁定的代码中我可以看出

const int use_answer_option_2 = answer;

更常见
const int& use_answer_option_1 = answer;

哪一个更好?

1 个答案:

答案 0 :(得分:2)

这些做不同的事情。例如,在int情况下:

answer = 43;
cout << use_answer_option_1 << '\n';     // 43
cout << use_answer_option_2 << '\n';     // 42

换句话说,选项2制作副本,选项1制作副本。

决定是否要制作副本(即,是否要查看参考中反映的原始初始化程序的更改)。 mystruct案例是相同的。