C++断言的奇怪行为,在练习任务中检查断言[关闭]

问题描述 投票:0回答:0

我有一个可通过链接访问的程序。 程序是我创建的练习运算符的学校作业。

问题是,当我编译 g++ -std=c++17 -Wall -pedantic -Wno-long-long -O2 -c test.cpp 时,程序对我来说工作正常并且断言正确通过。但是如果我把程序上传到学校的测试服务器,一些断言会失败,我不知道为什么。

有没有人知道如何处理这个问题,由于问题的性质,我已经通过链接提供了该程序,因为我不知道该依靠什么。但是,该程序很容易理解。 https://onecompiler.com/cpp/3z57kyaa7

例如(assert的输出,r=reference, s=student)学校服务器上的样例外观

Mismatched output: r={<-5..0>,<5..105>,<120..150>,<160..180>,<190..210>}, s={<-5. .210>}

编辑: 如果我注释掉第 396 到 399 行的 cout assert 语句,我注意到我的程序有一个奇怪的行为,它被错误地评估了。

// cout << a << endl;
// cout << b << endl;
  a += b;
// cout << a << endl;
  
  assert ( toString ( a ) == "{<-500..-300>,<-30..1001>,<2000..3000>}" );

但是如果我取消注释:

  cout << a << endl;
  cout << b << endl;
  a += b;
  cout << a << endl;
  
  assert ( toString ( a ) == "{<-500..-300>,<-30..1001>,<2000..3000>}" );

断言是正确的

c++ operator-overloading assert assertion
© www.soinside.com 2019 - 2024. All rights reserved.