相关疑难解决方法(0)

断言动态消息?

在我的程序中,我想使用显示错误消息的断言.除了众所周知的C和C++的解决方法之外,还有BOOST提供的"真实"解决方案BOOST_ASSERT_MSG( expr, msg )(另请参见带有消息的assert())

但是静态消息对我来说还不够,我还想有时候显示失败的变量,例如在类似的情况下

BOOST_ASSERT_MSG( length >= 0, "No positive length found! It is " << length )
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我想将消息"string"格式化为stringstream或者ostream允许我轻松地显示自定义类型(假设我已经定义了相关的格式化函数).

这里的问题是BOOST_ASSERT_MSG默认情况下要求char const *不兼容.

有没有办法重新定义/重载assertion_failed_msg(),使用流作为消息将起作用?怎么样?
(我的天真方法失败了,因为编译器首先要对operator<<("foo",bar)消息本身做一个...)

c++ boost assert

10
推荐指数
2
解决办法
5836
查看次数

为什么这段代码会产生一个引用逗号运算符的警告?

在回答这个问题时,我遇到了这个代码......

#include <iostream>

int main()
{
    int const income = 0;
    std::cout << "I'm sorry your income is: " < income;    // this is line 6
}
Run Code Online (Sandbox Code Playgroud)

...其中包含拼写错误.第<<6行的第二个(预期)操作符被意外写为a <.

除此之外,使用GCC 4.3.4或4.4.3 编译代码会产生警告:

prog.cpp: In function ‘int main()’:
prog.cpp:6: warning: right-hand operand of comma has no effect
Run Code Online (Sandbox Code Playgroud)

我的问题:为什么会产生特别警告?它指的是哪个逗号运算符?

注意:我并不是主张<cout声明中故意使用单曲. 我只是偶然发现了这个警告,同时试图找出我已经链接到的另一个问题的答案,并且好奇为什么编译器会生成它.

c++ cout comma-operator

8
推荐指数
1
解决办法
3310
查看次数

将assert()与消息一起使用

是否有可能在断言错误上写一条消息?

例如,使用#include <assert.h>,我只能写:

void foo(int a, int b) {
  assert (a != b);
}
Run Code Online (Sandbox Code Playgroud)

然而,在一个错误我想看到的价值ab.我怎样才能做到这一点?

c c++ assert

0
推荐指数
2
解决办法
2157
查看次数

标签 统计

c++ ×3

assert ×2

boost ×1

c ×1

comma-operator ×1

cout ×1