首页 > 后端开发 > C++ > 正文

C 中的单个操作可以应用多个隐式转换吗?

Linda Hamilton
发布: 2024-11-02 22:22:29
原创
993 人浏览过

Can Multiple Implicit Conversions Be Applied in a Single Operation in C  ?

C 中的隐式转换

在最近关于 C 中隐式转换的讨论中,出现了关于单个操作中多个转换的适用性的问题。为了阐明这个概念,让我们检查以下代码:

<code class="cpp">#include <string>

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 标准 (SC22-N-4411.pdf),第 12.3.4 节标题为“转换”:

”最多一个用户定义的转换(构造函数或转换函数)隐式应用于单个值。”

这意味着在给定的代码中,编译器不能隐式应用 A(const std: :string &) 以及从 const char* 到 std::string (然后转换为 A)到参数“one”的隐式转换。

因此,第一个函数调用的原始断言将结果错误是正确的。 C 标准明确规定只允许一种隐式用户定义转换,从而阻止编译器执行必要的步骤来满足函数的参数类型。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板