为什么会出现所谓的身份转换?

时间:2018-01-16 16:01:26

标签: c++ language-lawyer

如果身份转换没有做任何事情(每当我在标准中遇到它时,只是告诉它不需要转换),为什么它是一个东西?它的真正目的是什么?

其用法的实例

从标准(n3690 13.3.3.1.1):

  

如第4章所述,标准转换序列是   身份转换本身(即没有转换)或由   来自其他四个类别的一到三次转换。

13.3.3.1:

  

如果不需要转换来将参数与参数匹配   类型,隐式转换序列是标准转换   由身份转换组成的序列

cppreference

  

否则,如果参数类型是可以的聚合   根据聚合从初始化列表初始化   初始化时,隐式转换序列是用户定义的   具有第二标准转换序列的转换序列a   身份转换。

struct A { int m1; double m2;};
void f(A);
f({'a','b'});  // calls f(A(int,double)), user-defined conversion

“使用第二个标准转换序列进行身份转换” - 是否值得一提?

1 个答案:

答案 0 :(得分:2)

身份转换的目的是作为一个基本案例,并允许我们推断转换,而不必单独列出不需要转换的情况。