繁体   English   中英

从const char *转换为const std :: string&

[英]Conversion from const char * to const std::string &

我认为以下代码应该生成错误:

#include <iostream>
#include <string>

static void pr(const std::string &aStr)
{
    std::cout << aStr << "\n";
}

int main(void)
{
    const char *a = "Hellu";

    pr(a);

    return 0;
}

但是gcc 4.1.2成功地编译了它。

是std :: string的构造函数阻塞了,创建了std :: string的实例吗?

我认为它不应该,因为引用只是变量的别名(在这种情况下,没有引用引用的std :: string类型的变量)。

是否有人解释为什么代码编译成功?

提前致谢。

是的,给定一个常量的引用,编译器可以/将合成一个临时的(在这种情况下类型为std::string )并绑定对该临时的引用。

但是,如果引用不是const对象,则不起作用 - 只有对const的引用才能绑定到这样的临时对象(尽管至少广泛使用的编译器允许非const引用绑定到引用以及)。

你遇到的是隐式转换。

以下是C ++标准的引用(SC22-N-4411.pdf)

1类对象的类型转换可以由构造函数和转换函数指定。 这些转换称为用户定义的转换,用于隐式类型转换(第4节),初始化(8.5)和显式类型转换(5.4,5.2.9)。

所以编译器只是按预期工作并调用你提到的std::string构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM