首页 >后端开发 >C++ >C 中的隐式转换可以涉及多个用户定义的转换吗?

C 中的隐式转换可以涉及多个用户定义的转换吗?

Susan Sarandon
Susan Sarandon原创
2024-11-03 16:49:30528浏览

Can Implicit Conversions in C   Involve Multiple User-Defined Conversions?

C 隐式转换:澄清

最近,对先前有关 C 中替代转换的答案的评论引发了有关隐式转换准确性的问题。为了提供澄清,我们将检查以下代码段:

#include <string>

struct A {
    A( const std::string &amp; s ) {}
};

void func( const A &amp; a ) {
}

int main() {
    func( "one" );                  // error
    func( A("two") );           // ok
    func( std::string("three") );   // ok
}

最初,断言第一个函数调用会导致错误,因为不存在从 const char * 到 A 的直接转换。但是,存在从字符串到 A 的转换。利用此转换将涉及多个步骤,这通常是被禁止的。 g 4.4.0 和 Comeau 编译器支持这一断言。

经过进一步调查,C 标准 (12.3.4) 阐明了这一问题,指出最多有一个用户定义的转换 (构造函数或转换函数)可以隐式应用于单个值。此裁决与观察到的行为一致,并澄清了隐式转换的限制。

总而言之,单个值只允许进行一次隐式用户定义转换。在提供的代码中,调用 func("one") 失败,因为它需要多次隐式转换,这是不允许的。

以上是C 中的隐式转换可以涉及多个用户定义的转换吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn