c++存储引用返回的私有变量的正确方法
c++ Right way to store a private variable returned by reference
考虑这个类:
class example
{
inline const A& GetA()
{
return _a;
}
private:
A _a;
};
带有以下代码:
example Ex;
A& a = Ex.GetA();
_a将通过引用返回,而不复制a。
我的问题是,如果我按如下方式删除参考运算符,会发生什么:
example Ex;
A a = Ex.GetA();
a
是对_a
的引用还是将创建_a
的副本?
如果有一个可访问的副本构造函数,它将是一个副本,否则将出现编译错误。如果您将变量声明为一个引用,那么它只是一个引用。
在第二个示例中,您声明了一个局部变量(而不是引用),因此您将获得从函数返回的引用值的副本。
也就是说:不要这样做。通过非常数引用返回的公共非常数方法只比以复杂度为代价的具有公共成员的结构好一小步。只需将结构与公共成员和直接访问一起使用,或者正确封装数据。
您可以通过以下代码示例进行简单的检查:
#include <iostream>
class A {
public:
A() {
std::cout << "Creating A from default ctor" << std::endl;
}
A(const A &) {
std::cout << "A copy created!" << std::endl;
}
};
class Example {
public:
inline A& getA() {
return _a;
}
private:
A _a;
};
int main() {
Example a;
A aa = a.getA();
return 0;
}
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 枚举环境变量的惯用C++14/C++17方法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 打印所有继承的类成员变量和方法
- C++方法中的引用变量
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 有没有一种通用的方法来实现不变量
- 有没有将变量名称转换为双指针的简短方法?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 比较C++变量的最有效方法
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 存储变量的更有效方法是什么?
- 对具有相同方法的不同类使用一个变量
- 如何使用另一个变量访问对象的变量/方法
- C++,静态局部变量(方法)与全局(文件)变量有什么区别
- Awesomium允许我在JS中调用/使用c++变量/方法吗?