为什么对字符串参数的 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 引用而不是 const 引用组成,以便将文字用于构造str
?
只要引用还活着,常量引用就不会使被引用的实体保持活动状态吗?如果是这样,您为什么要对文字这样做?