怎样区分 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, 是 integeralpromotion.

long -> int不是 exact match, 是 integeralconversion.

你可能感兴趣的:(Const)