c++ - 类的预制实例

标签 c++ c++11

我有这样的类(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/

相关文章:

c++ - 访问指针句柄中对象的地址

c++ - 模板类内部模板类的外部类运算符

C++ 更快的字符串解析?

c++ - 输出结果不是我所期望的

c++ - Qt安装不会复制文件

c++ - C++ lambda或基于lambda基于签名的重载解析中的可选/忽略参数

C++ 库自由指针

c++ - 为什么这个 cppreference 摘录似乎错误地暗示原子可以保护关键部分?

c++ - 无法使指向结构的数组工作

c++ - 显式运算符 bool 错误