#include <iostream>
void test(std::string &s) {
std::string p = s;
std::cout << p.length() << " " << p;
}
int main() {
std::string s = "Hello world";
test(s);
return 0;
}
因此,函数test
会从我的s
函数接收对我的字符串main
的引用。
我的问题是,这一行做了什么:
std::string p = s;
它是否浅层复制引用并将其放入p
,从而首先破坏了使用引用的目的?
或者它(p
)只是作为参考吗?
答案 0 :(得分:2)
它创建了引用值的副本,它不允许您使用s
编辑p
的内容,以使p
充当参考并且能够从s
编辑p
,您必须将其声明为参考:
std::string& p = s;
答案 1 :(得分:1)
从而首先打破了使用引用的目的?
为什么它会破坏引用的目的,你已经声明s
作为参考,不是吗?不是p
。如上所述,它确实会复制s
包含的值。
答案 2 :(得分:1)
当我在C ++中为对象分配引用值时会发生什么?
您不能指定引用的值,或者至少您不应该考虑这样的术语。引用不是指针。会发生什么是您分配对象的值,因为引用是对象,通过不同的名称访问。
void test(std::string &s) {
您正在处理参考的事实仅在声明时才真正相关。此函数中使用s
的所有代码都使用std::string
,而不是std::string &
。
我的问题是,这一行做了什么:
std::string p = s;
它将std::string
对象分配给p
,不多也不少。换句话说,它与此程序中的相同:
int main() {
std::string s = "Hello world";
std::string &s_with_different_name = s;
std::string p = s_with_different_name;
std::cout << p.length() << " " << p;
}
或者,更简单地说,在此:
int main() {
std::string s = "Hello world";
std::string p = s;
std::cout << p.length() << " " << p;
}