今天早上我在我的一个图书馆找到了这个:
static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
tvec3::Min(a,b,out);
out.w = min(a.w,b.w);
}
Run Code Online (Sandbox Code Playgroud)
我期望编译器错误,因为此方法不返回任何内容,并且返回类型不返回void.
想到的唯一两件事是
在调用此方法的唯一位置,不使用或存储返回值.(此方法应该是void- tvec4返回类型是复制和粘贴错误)
tvec4正在创建一个默认构造,这看起来有点不同,哦,C++中的其他所有东西.
我还没有找到解决这个问题的C++规范部分.参考文献(ha)表示赞赏.
更新
在某些情况下,这会在VS2012中生成错误.我没有缩小具体细节,但它仍然很有趣.
我正在使用Google的测试框架Google-Mock编写关于Eigen矩阵的测试,正如另一个问题中已经讨论的那样.
使用以下代码,我能够添加一个自定义Matcher以匹配给定精度的特征矩阵.
MATCHER_P2(EigenApproxEqual, expect, prec,
std::string(negation ? "isn't" : "is") + " approx equal to" +
::testing::PrintToString(expect) + "\nwith precision " +
::testing::PrintToString(prec)) {
return arg.isApprox(expect, prec);
}
Run Code Online (Sandbox Code Playgroud)
这样做是通过他们的isApprox方法比较两个特征矩阵,如果它们不匹配,Google-Mock将打印相应的错误消息,其中包含矩阵的预期值和实际值.或者,它应该至少......
采取以下简单的测试用例:
TEST(EigenPrint, Simple) {
Eigen::Matrix2d A, B;
A << 0., 1., 2., 3.;
B << 0., 2., 1., 3.;
EXPECT_THAT(A, EigenApproxEqual(B, 1e-7));
}
Run Code Online (Sandbox Code Playgroud)
此测试将失败,因为A并且B不相等.不幸的是,相应的错误消息如下所示:
gtest_eigen_print.cpp:31: Failure
Value of: A
Expected: is approx equal to32-byte object <00-00 00-00 00-00 …Run Code Online (Sandbox Code Playgroud)