在c ++中,你有像c#中的“out参数”吗?

时间:2012-02-05 16:45:44

标签: c++

在c ++中你是否有'out参数',如c#?

在c#中,方法签名为:

bool TryGetValue(int key, out OrderType order)

这个想法是在传递之前可能没有分配变量,但必须在退出方法之前分配。

MSDN out params链接:http://msdn.microsoft.com/en-us/library/aa645764(v=vs.71).aspx

5 个答案:

答案 0 :(得分:5)

C ++中没有与C#out参数一样严格的内容。您可以使用指针和引用来传回值,但编译器无法保证它们已在函数内分配。它们比ref

更接近C#out
// Compiles just fine in C++
bool TryGetValue(int key, OrderType& order) {
  return false;
}

答案 1 :(得分:5)

不,C ++中没有out参数强制您在退出函数之前分配给它。指针和引用更像是C#中的ref参数。

答案 2 :(得分:3)

如果你真的喜欢'out'关键字,你可以定义一个maro:

#define out

作为标记,虽然它对编译器没有影响。

就像有人会为C定义'public','private'关键字一样。

答案 3 :(得分:1)

您可以使用引用或指针来模拟参数,但更好的方法是使用元组(C ++ 11中的std::tuple或C ++ 98/03中的boost::tuple来返回多个函数的值。没有完整的元组,你就无法返回。

#include <tuple>

std::tuple<bool, OrderType> TryGetValue(int key) {
    OrderType ot;
    ...
    return std::tuple<bool, OrderType>(true, ot);
}

...

bool b;
OrderType o;
std::tie(b, o) = TryGetValue(k);

答案 4 :(得分:0)

这将是参考文献的一种用途:

bool TryGetValue(int key, OrderType &order)

然后你可以简单地向order求助,而调用函数将获得数据。