Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当我在C+;中为一个对象指定一个引用的值时会发生什么+;? #包括 无效测试(标准::字符串和s){ std::字符串p=s; std::cout_C++ - Fatal编程技术网

C++ 当我在C+;中为一个对象指定一个引用的值时会发生什么+;? #包括 无效测试(标准::字符串和s){ std::字符串p=s; std::cout

C++ 当我在C+;中为一个对象指定一个引用的值时会发生什么+;? #包括 无效测试(标准::字符串和s){ std::字符串p=s; std::cout,c++,C++,它创建引用值的副本,它不允许您使用p编辑s的内容,要使p充当引用并能够从p编辑s,您必须将其声明为引用: #include <iostream> void test(std::string &s) { std::string p = s; std::cout << p.length() << " " << p; } int main() { std::string s = "Hello world"; tes

它创建引用值的副本,它不允许您使用
p
编辑
s
的内容,要使
p
充当引用并能够从
p
编辑
s
,您必须将其声明为引用:

#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;
}

它创建引用值的副本,不允许您使用
p
编辑
s
的内容,要使
p
充当引用并能够从
p
编辑
s
,您必须将其声明为引用:

#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;
}
从而破坏了最初使用引用的目的

为什么它违背了引用的目的,您已声明
s
为引用,不是吗?不是
p
。因此,正如所述,它确实会复制
s
包含的值

从而破坏了最初使用引用的目的

为什么它违背了引用的目的,您已声明
s
为引用,不是吗?不是
p
。因此,正如所述,它确实会复制
s
包含的值

当我在C++中分配对象时,会发生什么? 你不能分配引用的值,或者至少你不应该这样想。引用不是指针。发生的是你分配了对象的值,因为引用就是通过不同名称访问的对象

处理引用的事实仅在声明时才真正相关。此函数中使用
s
的所有代码都使用
std::string
,而不是
std::string&

我的问题是,这条线做什么:

void test(std::string &s) {
它将您的
std::string
对象分配给
p
,不多也不少。换句话说,它的操作与此程序中的操作相同:

std::string p = s;
intmain(){
std::string s=“Hello world”;
std::字符串&s_,名称为s;
std::字符串p=s_,名称不同;
标准::cout
当我在C++中分配对象时,会发生什么?
你不能分配引用的值,或者至少你不应该这样想。引用不是指针。发生的是你分配了对象的值,因为引用就是通过不同名称访问的对象

处理引用的事实仅在声明时才真正相关。此函数中使用
s
的所有代码都使用
std::string
,而不是
std::string&

我的问题是,这条线做什么:

void test(std::string &s) {
它将您的
std::string
对象分配给
p
,不多也不少。换句话说,它的操作与此程序中的操作相同:

std::string p = s;
intmain(){
std::string s=“Hello world”;
std::字符串&s_,名称为s;
std::字符串p=s_,名称不同;

std::cout如果左值的复制构造函数是浅复制,则会被调用,具体取决于它的实现。不清楚您实际询问的是什么。如果写字符串上的复制被禁用,则会执行深度复制关于“浅”或“深”复制。它只是复制引用引用的对象。复制的语义是为被复制对象的类型定义的(在本例中,
std::string
)CoW将问题过度复杂化。听起来OP在问更多的问题,从引用初始化是否会创建引用(Python风格)或者不是。如果左值的复制构造函数是浅复制,则会被调用,具体取决于它的实现。不清楚您实际询问的是什么。如果写字符串上的复制被禁用,则会执行深度复制关于“浅”或“深”复制。它只是复制引用引用的对象。复制的语义是为被复制对象的类型定义的(在本例中,
std::string
)CoW将问题过度复杂化。听起来OP在问更多的问题,从引用初始化是否会创建引用(Python风格)也就是说,<>代码> STD::String 在这方面与代码> int /代码>相同。C++的一个优点就是这个一致性。<代码> int p= i/c>将创建一个新的<代码> int >代码>,用“代码> i>代码>的副本初始化,因此提问者不应该期望<代码> STD::String P= S/<代码>是任意D。换句话说, STD::String 在这方面与 INT/CUT>相同。C++的一个好东西就是这个一致性。<代码> int p= i/Cuth>将创建一个新的<代码> int >代码>,用“代码< i>代码>的副本初始化,因此提问者不应该期望<代码> STD::String P= S/<代码>是任意的。不同的