从 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
构造函数。
相关文章:
- cppcheck在const std::string[]上引发警告
- 使用 std::string () const 函数启动线程或未来
- c++ const mysqlpp::String ambiguous error
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 无法从'const std::string [3]'转换为'std::string'
- 从 std::string 转换为 const 无符号整数
- 为什么std::string没有(显式)const char*强制转换
- 如何使用 c++ 中的 int* count(const string&s)计算字符串中每个数字的出现次数?
- 将字符数组添加到 const string&in C++
- 为什么 stack<const string> 不能用 g++ 编译?
- 在函数中传递只读向量时,冗长真的值得吗?const vector<const string>&
- 为什么我不能从 const String& 方法返回 NULL?
- 返回对字符串对象的引用,错误:类型为 âconst string& 的引用初始化无效。C++
- 为什么我不能使用 "const string* sp = 0" 在构造函数中初始化
- Intel c++编译器- const string是可修改的
- c++头文件中的静态const string
- 错误:将"const string {aka const std::__cxx11::basic_string}"<char>作为"this"参数传递
- 将非常量向量传递给引用<string> const 向量<const string>?