我认为以下代码应该会产生一个错误:
#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类型的变量不存在)。
有人能解释一下为什么代码能够成功编译吗?
提前致谢。
void pr(std::string &aStr)
,则无法按照标准暗示构建临时对象? - Sebastian Hoffmannstd::string
引用,这样编译器就会拒绝任何试图传递char *
或char const *
的东西。我可能会使用typedef使切换参数类型相对快速和容易。 - Jerry Coffin