假设函数
bool foo(int& num) {
// do something and change the num
return true;
}
希望调用foo前后的num相同,而不关心foo中发生了什么。
您不应该传递参数"num";作为参考"&";。将其作为值传递:bool-foo(int num({…}foo((外的num将保持不变。
以下是关于通过引用传递的更多信息:https://www.w3schools.com/cpp/cpp_function_reference.asp
解决方案1:
复制参数值:
int prev_num = num;
foo(num);
num = prev_num;
解决方案2:使用包装
// Wrapper uses pass by value for num
bool fooWrapper(int num) {
return foo(num);
}
// Then later use the fooWrapper instead of foo:
fooWrapper(num);
你的问题是模糊的,以确定什么是正确的答案。
以下是我的猜测:
我假设您想要测试foo
在某些情况下不会改变参数的值:
struct Param
{
int value;
};
class MagicFoo : public testing::TestWithParam<Param>
{};
TEST_P(MagicFoo, ArgIsNotChanged)
{
auto x = GetParam().value;
ASSERT_TRUE(foo(x));
ASSERT_THAT(x, GetParam().value);
}
完整的现场演示