Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么会有所谓的身份转换?_C++_Language Lawyer - Fatal编程技术网

C++ 为什么会有所谓的身份转换?

C++ 为什么会有所谓的身份转换?,c++,language-lawyer,C++,Language Lawyer,如果身份转换没有任何作用(每当我在标准中遇到它时,它只是告诉我不需要转换),为什么它是一件事?它的真正目的是什么 对其用法的解释 根据标准(n3690 13.3.3.1.1): 如第4条所述,标准转换顺序为 标识转换本身(即无转换)或由 其他四个类别的一到三个转换 13.3.3.1: 如果参数与参数匹配不需要转换 类型,隐式转换序列是标准转换 由身份转换组成的序列 : 否则,如果参数类型是聚合,则 根据聚合从初始值设定项列表初始化 初始化时,隐式转换序列是用户定义的 具有第二个标准转换序列an的

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

对其用法的解释

根据标准(n3690 13.3.3.1.1):

如第4条所述,标准转换顺序为 标识转换本身(即无转换)或由 其他四个类别的一到三个转换

13.3.3.1:

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

:

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



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

身份转换的目的是作为基本情况,让我们能够对转换进行推理,而不必挑出不需要转换的情况。

身份转换的目的是作为基本情况,让我们能够对转换进行推理,而不必单独进行推理在不需要转换的情况下,我想这只是标准语言中明确指定转换的一种方式。如果您在标准中提到身份转换的地方引用,这会有所帮助。这样就可以对转换进行一般性的推理,而无需在每句话中都添加“或无转换”作为特例。身份很重要,需要正式化。这正是你在数学中建立公理的方式:
∀x:0+x=x+0=x
我想这只是标准语言中明确指定转换的一种方式。如果您在标准中提到身份转换的地方引用,这会有所帮助。这样就可以对转换进行一般性的推理,而无需在每句话中都添加“或无转换”作为特例。身份很重要,需要正式化。这正是你在数学中建立公理的方式:
∀x:0+x=x+0=x
所以在我链接的参考文章中,如何值得指出“第二个标准转换序列是身份转换”?如果他们没有这样写,我会假设第一个和第二个标准转换是不需要的…@FacPam一个用户定义的转换序列是由一个初始标准转换序列,然后是一个用户定义的转换,然后是第二个标准转换序列定义的。说第二个标准转换序列是标识转换,与说用户定义的转换必须是链中的最后一个转换相同。@FacPam第一个标准转换可能不是标识。谢谢Johan@xskxzr您能提供一个示例,其中用户定义转换中的第一个标准转换不是身份转换吗?那太酷了!或者事实上,任何一个有着善良灵魂的人都可以给我看一个这样的例子,如果他们能找到:)那么在我链接的参考文章中,怎么值得说“第二个标准转换序列是身份转换”?如果他们没有这样写,我会假设第一个和第二个标准转换是不需要的…@FacPam一个用户定义的转换序列是由一个初始标准转换序列,然后是一个用户定义的转换,然后是第二个标准转换序列定义的。说第二个标准转换序列是标识转换,与说用户定义的转换必须是链中的最后一个转换相同。@FacPam第一个标准转换可能不是标识。谢谢Johan@xskxzr您能提供一个示例,其中用户定义转换中的第一个标准转换不是身份转换吗?那太酷了!或者事实上,任何有善良灵魂的人都可以给我举个例子,如果他们能找到的话:))
struct A { int m1; double m2;};
void f(A);
f({'a','b'});  // calls f(A(int,double)), user-defined conversion