返回enum或通过引用传递enum
return enum or pass enum by reference?
我有一个过程,它执行一些任务,但根据其输入,以两种略有不同的方式执行。具体来说,它扩展了后缀树中的一个后缀;如果后缀在节点处结束,情况很简单,但当后缀在叶边缘内结束时,需要做一些额外的工作。我提到这个细节是为了解释为什么我把这两种行为包含在一个函数中(它反映了Dan Gusfield对Ukkonen后缀树构造算法的描述的"规则2":http://www.stanford.edu/~mjkay/gussfield.pdf).
不管怎样,一旦函数完成了这项工作,调用方就需要知道遵循了这两种情况中的哪一种。我认为枚举是共享这些信息的好方法,因为它使用例显式(而不是任意将用例映射到bool或int)。
TLDR:要与调用方共享信息,我应该通过引用此过程传递枚举还是返回枚举?我觉得通过引用传递枚举更好,因为它避免了"有副作用的函数",但我想知道是否有通常"正确"的方法。或者,这真的意味着我应该用两个单独的程序取代我的单一程序吗?
在我看来,返回枚举更有意义,因为它是调用函数的结果。如果将值传递给函数,并且函数应该修改该值,那么使用引用将更有意义。
您可以在C++标准库中的unordered_map
的insert
方法中看到类似的示例:
template <class P>
std::pair<iterator, bool> insert( P&& value );
该方法返回一个布尔值(在一对中),说明该值是否插入到映射中。这实际上是一个与你正在处理的案件非常相似的案件。
我认为最好将枚举作为函数的结果返回,因为它更可读,编写起来更简单:
MyEnum res = myfunc();
然后
MyEnum res;
myfunc(res);
我觉得通过引用传递枚举更好,因为它避免了"有副作用的函数"
事实恰恰相反。。。一般来说,如果你修改你的论点,那会产生副作用。
没有理由不归还任何东西。
枚举存储在内存中时只是整数值,编译器强制检查用于枚举的值的范围。已经说过,整数数据类型通过值返回是有效和安全的。
除非函数真的返回多个值,否则调用者不需要将枚举作为引用传递并返回结果。
YourEnum result
result = MyFunc()
PS:我通常遵循的规则是,如果返回的数据是简单或复杂的数据类型,那么决定是否应该返回值,或者让调用方传递指针/引用并返回值。)
- enum是C++中的宏变量还是整数变量
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- 是否可以从int转换为enum类类型
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 返回enum或通过引用传递enum
- 在 QT 中,错误:ISO C++禁止转发对'enum'类型的引用
- 通过引用传递带有枚举类的enum