首页  >  文章  >  后端开发  >  C 中可以应用多个隐式用户定义转换吗?

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

Susan Sarandon
Susan Sarandon原创
2024-10-31 22:09:02971浏览

Can Multiple Implicit User-Defined Conversions Be Applied in C  ?

C 隐式转换:澄清

在最近的讨论中,C 中隐式转换的有效性受到质疑。具体来说,问题围绕是否允许多个隐式用户定义转换而展开。为了阐明这个问题,让我们检查以下代码:

<code class="cpp">struct A {
    A( const std::string & s ) {}
};

void func( const A & a ) {
}

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

如原始问题所述,第一个函数调用会导致错误,因为没有从 const char * 到 A 的转换虽然存在从字符串到 A 的转换,但应用此转换涉及多次转换,这是不允许的。 C 标准证实了这一点:

<code class="cpp">4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.</code>

在这种情况下,两个隐式转换(字符串到 const char 和 const char 到 A)的存在违反了此规则,导致编译器错误。因此,C 中禁止多个隐式用户定义转换的断言是准确的。

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

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