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中文网其他相关文章!