c++ - 断言语句无法正常运行?

标签 c++

我无法理解断言语句的性质

我以为我的程序没有正常工作,但是当我让我的 main 打印出我的程序返回给我的返回值时,它正是我的断言语句应该接受的确切值。我不确定发生了什么。我将函数复制粘贴到另一个文件中,然后复制粘贴我的断言语句,这次不同的断言案例起作用(一些不起作用的案例现在起作用,而一些起作用的案例现在不起作用)。 当我通过调试器工作时,似乎断言语句导致了某个逻辑语句

有时不工作,当逻辑应该。我不明白为什么...有人可以向我解释一下吗?

最佳答案

问题是你在 removeDuplicatedValues 中修改传递的数组,所以首先 assert((removeDuplicatedValues(duplicates1, 5)) == 1); 断言成功但是当你使用同一数组调用下一个断言 assert((removeDuplicatedValues(duplicates1, 4)) == 1); 它将失败,因为重复项已从该数组中删除。因此,您应该重写您的测试以仅使用一次数组(或者甚至切换到专用的单元测试框架):

{
   string duplicates[7] = { "kek" , "hello" , "kek" , "daisy" , "bear" , "bear" , "bear" };
   assert((removeDuplicatedValues(duplicates, 5)) == 1); // ok
}
{
   string duplicates[7] = { "kek" , "hello" , "kek" , "daisy" , "bear" , "bear" , "bear" };
   assert((removeDuplicatedValues(duplicates, 4)) == 1); // ok
}

关于c++ - 断言语句无法正常运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48839952/

相关文章:

c++ - 如何为主机应用程序和任何使用的库使用单独的 CMake 目标?

c++ - 在 C++ 的构造函数 foo<T>() 中有一个模板是什么意思?

c++ - 从文件读取输入时如何使用 strtok?

c++ - C++ 应用程序如何使用比 RSS 内存更多的堆?

c++ - 带有自定义构造函数的自定义 STL 分配器

c++ - 如何以图形方式显示 .map 文件中的内存布局?

c++ - 自动向下转换指向派生对象的指针

c++ - 我想计算 char* word_list[] (C++) 中的字符串数量

C++ Chrono 判断一天是否是周末?

c++ - C++ 中常量函数和非常量函数的区别