【发布时间】:2011-01-12 05:48:25
【问题描述】:
在以下代码中,Visual Studio 编译器不会引发断言,但使用 XCode 为 iPhone 编译时会引发断言:
class X
{
public:
virtual void A() {}
};
X x;
void main()
{
// Define a valid member function pointer to X::A.
void (X::*p)() = &X::A;
assert(p != 0);
}
这是编译器中的错误吗?在这种情况下如何检查空指针?
【问题讨论】:
-
@Mahesh:我认为这不能回答他的问题。他并不是说
assert导致他的程序在为 iPhone 编译时终止。他在问为什么没有在 Visual Studio 下提出断言。 -
@Mahesh:问题不在于断言的行为,而在于被测试的表达式被编译器错误地评估了。
p != 0必须根据标准评估为真。 -
main永远不会返回void,永远不会返回int。 -
@Merlyn:
assert(true)在调试和发布模式下都是无操作的。里面的表达式为真,由标准保证。
标签: c++ function pointers member virtual-functions