在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
答案 0 :(得分:5)
C ++中没有与C#out
参数一样严格的内容。您可以使用指针和引用来传回值,但编译器无法保证它们已在函数内分配。它们比ref
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
求助,而调用函数将获得数据。