为什么对字符串参数的const引用可以接受字符串字面值?如"hello"
一样的字符串字面值不是变量,为什么这段代码是有效的?
class CVector {
public:
int x, y;
CVector() {};
~CVector() { delete ptr; }
string* ptr;
void doSomething(const string& str) { ptr = new string(str); }
void print() { cout << "\n" << *ptr; }
};
int main()
{
result.doSomething("asdas");
result.print();
return 0;
}
首先,我认为将引用作为参数是为了避免拷贝过程并直接访问作为参数传递的变量(尽管我可能仍然正确)。但字符串文字"asdas"不是一个变量,那么为什么参数可以使用字符串文字作为参数?我的意思是,由于参数str是一个引用,它会成为该实体的别名,对吗?如果是这样,那么字面量是否变成了变量?参数列表是否应该包括string& str而不是const引用,这样字面量就会用于构造str?
常量引用不是会使引用的实体在引用存在时一直存活吗?如果是这样,那么你为什么要对一个字面量这样做?