【发布时间】:2011-09-26 18:58:26
【问题描述】:
我可以使用assert 来强制执行类型定义吗?假设有一个变量double d,你怎么能用assert断言d是一个double呢?如果assert 不适用(我打赌不适用),还有其他选择吗?我特别希望在调试期间测试隐式类型转换,同时受益于assert 和#define NDEBUG 的功能。
附言 显然,我想将它用于任何类型定义,这里仅使用 double 作为示例。解决方案应该是跨平台兼容的,并且兼容C++03。
我喜欢在我的类设置器中添加错误检查。例如,假设有一个类 MyClass,它有一个私有成员变量 x:
void MyClass::setX(double input)
{
// assert x is double
x = input;
}
【问题讨论】:
-
assert() 用于运行时检查。对于数据类型,您可以使用更强大的工具 - 编译时检查。描述一个具体的场景,也许 SO 集体会想办法把它变成编译错误的情况。
-
无论在哪里定义
x,都将类型设为double。 -
@Gman,我喜欢在设置器中添加错误检查以确保稳健性。
-
我是 C++ 新手,你能告诉我在什么情况下 double 声明的参数可能是别的东西?谢谢
-
@NiklasR:他似乎想要断言 member 是否是别的东西。无法想象那会是怎样。
标签: c++ debugging casting assert