我有一个Reference构造函数,它接收一个流作为参数。
Reference::Reference(std::istream& p_is)
{}
如果流非空,我必须使用Google Test检查单元测试。 我已经检查了Google我能做什么,但我找不到任何东西。
我的问题是:你知道怎么做,或者你有一些提示给我。
致以最诚挚的问候,
答案 0 :(得分:2)
必须始终初始化引用以引用有效的对象或函数。未绑定到有效对象或函数的引用会产生未定义的行为。如果需要传递空值,请使用指针,而不是引用。
答案 1 :(得分:0)
正如Obvlious船长所指出的,你不能引用无效的对象/功能。您可以将其作为指针传递,或者只调用构造函数if(!p_is.good())如果您不受Google Test的限制(对不起,我不熟悉Google Test的功能,所以我可能只是重复已经说过的内容)
答案 2 :(得分:0)
也许您应该重新考虑为什么您认为需要测试NULL引用。它更容易搞乱指针而不是引用。
例如,这是崩溃
int *p;
if(true)
{
int x;
p = &x;
}
*p = 3;//runtime error
但不能通过引用发生,因为必须为引用赋值,其值在同一范围内。
但是,有些情况下可能会发生崩溃并且检查有用:
int* p = 0;
int& ref(*p);
int i(ref); // access violation here
但是你可能想要检查指针,如
int* p =0;
if (p)
{
int& ref(*p);
int i(ref);
}
因此,如上所述,您负责在代码中初始化引用。如果你的初始化是指针的指针,如int& ref(*p);
,只需检查指针。
HTH