问号表达式与防御式编程
有类如下:
有比较函数如下:
int compare2(Widget const *l,Widget const *r)
{
/*do compare*/
}
int compare2(Widget const * const l,Widget const * const r)
{
/*do compare*/
}</code></pre>
显然,第二、三种版本的比较函数安全,在防御性编程的思想下,我们可以使用下面的问号表达式检查比较函数指针的类型
int main()
{
CHECK_CMP_FUNC_PTR(compare1); // error
CHECK_CMP_FUNC_PTR(compare2); // ok
CHECK_CMP_FUNC_PTR(compare3); // ok
return 0;
}