gpt4 book ai didi

带有两个参数的 C++ CPPUNIT_ASSERT

转载 作者:行者123 更新时间:2023-11-30 05:19:59 24 4
gpt4 key购买 nike

在一些代码中我发现了下面一行:

CPPUNIT_ASSERT(1, val.getBytefield().size());

这真的比较两个参数是否相等吗?通常,我希望与 CPPUNIT_ASSERT_EQUAL 进行比较:

CPPUNIT_ASSERT_EQUAL(1, val.getBytefield().size());

测试编译并且断言在情况 1 中有效,但在情况 2 中无效。区别在哪里?

最佳答案

对我来说,这看起来像是损坏的代码,可能是进行了一些重构或其他编辑的结果。

CPPUNIT_ASSERT 宏接受一个参数——一个条件表达式——并断言该条件为真(,如果为假则失败)。

这段代码试图传递两个参数,但这里的逗号实际上不是用作参数分隔符,而是用作(有点晦涩)comma operator。 .逗号运算符计算其第一个操作数,丢弃结果,然后计算第二个操作数的结果。因此,初始 1 是一个不相关的空操作。代码等同于:

CPPUNIT_ASSERT(val.getBytefield().size());

这意味着它断言字节字段具有非零大小。

显然,这与您的第二段代码不同:

CPPUNIT_ASSERT_EQUAL(1, val.getBytefield().size());

断言字节字段的大小正好等于 1。

关于带有两个参数的 C++ CPPUNIT_ASSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40882885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com