不从成员函数C 存储返回值认为不良习惯

Is it considered bad practise to not store the return value from a member function c++

本文关键字:不良 习惯 返回值 存储 成员 函数      更新时间:2023-10-16

说我有一个返回整数的成员函数,在调用会员函数而不存储返回值的奇数情况下会被视为不良练习。

编辑。

一个示例将是将项目附加到向量并返回附加项目的索引的函数。

一个简化的示例。

#include <vector>
using namespace std;
vector<int> myVector; 
int AppendVector(int value)
{
    myVector.push_back(value);
}
int main()
{
    AppendVector(3);
    AppendVector(4);
    int indexOfValue = AppendVector(2);
    // do action on appended value 
}

否,这样做是很普遍的。有很多函数在忽略返回值的同时定期使用。

您可能使用或看到的一些示例:

  • std::printf返回书面字符的数量。
  • operator<<返回流,最终被丢弃
  • std::vector::erase在删除最后一个元素之后返回迭代器
  • std::map::insert返回迭代器和状态

对于返回值特别重要的情况,C 17添加了[[nodiscard]]属性。

c 17的主题,您必须使用特定于GCC的__attribute__((warn_unused_result))等编译器的内容。有关更多详细信息,请参见此答案。

这将完全取决于返回价值的含义,以及通过进行方法呼叫来实现的呼叫者。

编写呼叫代码的人绝对应该考虑他想处理的回报值(如果有的话(;一个常见的新手错误是忽略回报率,而不是检查回报率,因此无法采取适当的行动,例如如果返回值表明该方法的操作失败了。

您可能会看到一个半常见的成语是:

(void) someObject.Method();

(void(前缀无需做任何事情(编译器会忽略它(,但它确实是人类读者的指标,即写下该行的人是故意返回值,而不是不明白返回值。它不会改变程序的行为方式,但它确实使未来的读取器的源代码不知道他们是否正在考虑错误或忽略是故意的。