Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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++ - Fatal编程技术网

C++ 使用常量引用和常量变量声明常量文字字符串

C++ 使用常量引用和常量变量声明常量文字字符串,c++,C++,我必须用常量文本字符串命名窗口。所有的名字都会被引用,所以我需要用变量来缓存它们。我的问题是 我是否需要将变量声明为常量引用,如下所示 const string& srcWnd = "Source Window"; 而不是 const string srcWnd = "Source Window"; ? 有什么区别吗?我看不出两者之间有什么显著区别,但我建议使用普通的字符串(选项2): 使用推荐人不会赢得任何东西。如果使用引用,代码会变得更加模糊,因为通过使用依赖的引用。如果有人记不

我必须用常量文本字符串命名窗口。所有的名字都会被引用,所以我需要用变量来缓存它们。我的问题是

我是否需要将变量声明为常量引用,如下所示

const string& srcWnd = "Source Window";
而不是

const string srcWnd = "Source Window";
?


有什么区别吗?

我看不出两者之间有什么显著区别,但我建议使用普通的
字符串(选项2):


使用推荐人不会赢得任何东西。如果使用引用,代码会变得更加模糊,因为通过使用依赖的引用。如果有人记不清楚生命周期扩展规则,他们可能需要查找这些规则,以确保代码有效。

我看不出两者之间有任何显著差异,但我建议使用普通的
字符串(选项2):


使用推荐人不会赢得任何东西。如果使用引用,代码会变得更加模糊,因为通过使用依赖的引用。如果有人不清楚地记住生命周期扩展规则,他们可能需要查找这些规则以确保代码有效。

定义“需要”-这两种规则都将构造
string
对象,您要问的确切区别是什么?就您而言,这两行是相同的。如果您正在构造
std::string
类实例,那么数组烘焙字符串文本的内容将始终被复制。既然我们在这里讨论的是窗口名称,那么它们真的必须是
std::string
(假设
string
上面有
std::string
)吗?因为如果您关心效率/避免复制,那么您可能首先要做的是不要让它成为
std::string
..@artificialhairlessarmit ok,然后按照下面的答案中建议的
const std::string
方法。请注意,全局
std::string
几乎必然意味着您正在加载时将字符串从字符串文本对象复制到
std::string
所拥有的缓冲区中。如果名称应该是
std::string
,这很可能很好…定义“需要”-这两个都将构造
string
对象,那么您要问的确切区别是什么?就您而言,这两行是相同的。如果您正在构造
std::string
类实例,那么数组烘焙字符串文本的内容将始终被复制。既然我们在这里讨论的是窗口名称,那么它们真的必须是
std::string
(假设
string
上面有
std::string
)吗?因为如果您关心效率/避免复制,那么您可能首先要做的是不要让它成为
std::string
..@artificialhairlessarmit ok,然后按照下面的答案中建议的
const std::string
方法。请注意,全局
std::string
几乎必然意味着您正在加载时将字符串从字符串文本对象复制到
std::string
所拥有的缓冲区中。如果名称预期为
std::string
,那么无论如何,这很有可能很好…
const string srcWnd = "Source Window";