在C++中是否可以传递带有默认值的函数inout参数

问题描述 投票:0回答:2

让我打破如果标题令人困惑,我们可以用c++编写函数吗,像这样的东西,可能不完全像这样,语法可能不同

void FunctionTest(int param1, _Inout_ int& param2 = 10)
{
    param2 = 20;
}

int main() {
    int a = 100, int b = 200;
    FunctionTest(10);
    FunctionTest(a, b);
}

不必要,应该通过引用传递,可能其他替代方案也可以使用指针或任何其他方式。

c++ pass-by-reference
2个回答
0
投票

是的,您实际上可以使用辅助函数非常简洁地做到这一点:

template <class T>
T &as_lvalue(T &&o) { return o; }

void FunctionTest(int param1, int& param2 = as_lvalue(10))
{
    param2 = 20;
}

请记住,引用的对象只会存活到包含对

FunctionTest
的调用的完整表达式结束。这就是为什么带有默认值的非常量引用参数看起来很奇怪:如果您无法在结果消失之前检查结果,为什么还要提供输出参数呢?

如果你想创建一个函数,除了返回值之外,还可以提供额外的输出,也许更清晰的模式是一个(本机可为空的)指针参数和一个单独的引用重载: void FunctionTest(int param1, int *param2 = nullptr) { if(param2) param2 = 20; } void FunctionTest(int param1, int &param2) { return FunctionTest(param1, &param2); }



0
投票

您可以重载函数:

void FunctionTest(int param1,int& param2) { param2 = 20; } void FunctionTest(int param1) {} int main() { int a = 100, int b = 200; FunctionTest(10); FunctionTest(a, b); }

但是,我无法想象这是一个很好的重载用例,因为这两个调用执行的操作非常不同。

© www.soinside.com 2019 - 2024. All rights reserved.