怎样区分 const char* 和字符串文字量

在一个面试中,猛然间一闪念,问到了 candidate 这个问题。无解……

 

stl 中使用到了很多 traits 技术,只要懂得 traits ,这个问题就太简单了!以下是代码示例:

软件工程中很多地方,如果采用直接的办法不能解决问题,增加一个间接层,问题即迎刃而解,type_traits 就是这样一种技术,这个代码示例是自包含的,除了 printf ,没有任何其它外部依赖。

 

 

 

为什么下面这样的代码不能work?

 

答案:C++的重载匹配规则:如果在非模板的候选中能找到一个"精确"匹配,就不会去找模板。"精确"的精确定义包含3大类,5种具体情况,按顺序如下:

Identity Conversion ---- 不需要任何转化,最精确,级别 1

Lvalue to Rvalue Conversion -- 左值到右值转化,  级别 2

Array to Pointer Conversion --- 数组到指针转化,  级别 3

Function to Pointer             --- 函数名到函数指针, 级别 4,这就是为什么很多时候我们不需要使用 &func_name 而直接使用 func_name

 

Quolification Conversion      --- cv qualify 少的可以转化到 cv qualify 多的,级别 5

 

这也就是为什么下面的代码可以 work:

 

char -> int 不是 exact match, 是 integeral promotion.

 

long -> int 不是 exact match, 是 integeral conversion.

 

 

 

posted on 2011-06-04 19:22  能发波  阅读(253)  评论(0)    收藏  举报

导航