我有这样的类(class):
class result{
public:
int a;
int b;
int c;
};
a,b,c
可以填入任意整数。然而,有一些著名的案例我会过多地使用它们,例如 (a=b=c=0) 的零案例或 (a=b= c=1) 和其他一些。
所以我想要一种简单的方法来获取这些实例,当我想要其中一个实例时无需创建新对象并手动填充它(实际情况包含比 3 个整数复杂得多的情况)。
我目前做的是这样的:
class result{
public:
int a;
int b;
int c;
static result get_zero(){
return result{0,0,0};
}
static result get_idenity(){
return result{1,1,1};
}
};
主要是:
auto id=result::get_identity();
这是实现我想要的目标的好方法吗?有没有一种惯用的方法可以做到这一点?
最佳答案
如果对象在返回后可以修改,那么是的,这是正确的方法,因为您不能共享单个对象。
NRVO ( http://en.cppreference.com/w/cpp/language/copy_elision ) 和移动语义消除了与按值返回对象相关的任何成本。
如果您知道这些对象永远不会改变,您可以返回一个 result const &
并让对象本身成为您类的静态成员。到那时,您甚至在技术上不需要 getter/setter,因为静态成员是公共(public)的并且已经标记为 const。
class result{
public:
int a;
int b;
int c;
static result const zero_result{0,0,0};
static result const & get_zero(){
return result::zero_result;
}
static result const identity_result{1,1,1};
static result const & get_idenity(){
return result::identity_result;
}
};
不过不要忘记在 .cpp 文件中为静态数据成员分配内存:
result const result::zero_result;
result const result::identity_result;
关于c++ - 类的预制实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571145/