有没有从C++函数返回多个值的首选方法?例如,假设一个函数分割两个整数并返回商和余数.我经常看到的一种方法是使用参考参数:
void divide(int dividend, int divisor, int& quotient, int& remainder);
Run Code Online (Sandbox Code Playgroud)
一种变化是返回一个值并通过引用参数传递另一个值:
int divide(int dividend, int divisor, int& remainder);
Run Code Online (Sandbox Code Playgroud)
另一种方法是声明一个包含所有结果的结构并返回:
struct divide_result {
int quotient;
int remainder;
};
divide_result divide(int dividend, int divisor);
Run Code Online (Sandbox Code Playgroud)
这些方式中的一种通常是首选,还是有其他建议?
编辑:在现实世界的代码中,可能会有两个以上的结果.它们也可以是不同类型的.
在C++ 11中使用元组有什么好的用例?例如,我有一个定义本地结构的函数,如下所示:
template<typename T, typename CmpF, typename LessF>
void mwquicksort(T *pT, int nitem, const int M, CmpF cmp, LessF less)
{
struct SI
{
int l, r, w;
SI() {}
SI(int _l, int _r, int _w) : l(_l), r(_r), w(_w) {}
} stack[40];
// etc
Run Code Online (Sandbox Code Playgroud)
我正在考虑SI用一个替换结构std::tuple<int,int,int>,这是一个更短的声明,方便的构造函数和运算符已经预定义,但具有以下缺点:
get<0>(some_tuple))比访问struct元素(s.l)要冗长得多.最后两点由tie函数解决.鉴于这些缺点,元组的用例是什么?
更新事实证明VS2010 SP1调试器无法显示以下数组的内容std::tuple<int, int, int> stack[40],但它在使用结构编码时工作正常.所以这个决定基本上是一个明智的选择:如果你必须检查它的值,使用一个结构[特别是.像GDB这样的调试器很重要].
正如大多数程序员所钦佩并尝试遵循Literate编程的原则,但在C++中,我经常发现自己使用std::pair了大量的常见任务.但是std::pair,恕我直言,文学节目的邪恶敌人......
我的观点是,当我回到我一两天前编写的代码时,我看到一个std::pair(通常作为迭代器)的操作我不知道" 什么做了iter->第一个和iter->第二个意思? ? "
我猜其他人在查看他们的std::pair代码时有同样的疑虑,所以我想知道,有没有人想出一些好的解决方案来恢复识字时使用std::pair?