Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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+中声明多个变量+,是否为所有这些变量声明了属性?_C++_Variables - Fatal编程技术网

C++ 在C+中声明多个变量+,是否为所有这些变量声明了属性?

C++ 在C+中声明多个变量+,是否为所有这些变量声明了属性?,c++,variables,C++,Variables,如果我定义以下三个对象: const string & textA = messages.at(0), textB = messages.at(1), textC = messages.at(2); textB和textC实际上是参考吗? 我是否必须将和放在textB和textC前面 谢谢 textB和textC不是参考。将&视为它属于变量,而不是类型 (刚刚用g++检查过)改用这个符号,您将看到发生了什么: const

如果我定义以下三个对象:

const string & textA = messages.at(0), 
               textB = messages.at(1), 
               textC = messages.at(2);
textB
textC
实际上是参考吗?
我是否必须将
放在
textB
textC
前面


谢谢

textB
textC
不是参考。将
&
视为它属于变量,而不是类型


(刚刚用g++检查过)

改用这个符号,您将看到发生了什么:

const string     &textA = .., // reference
                 &textB = .., // reference
                 textC = ..; // value
同样的事情也适用于指针:

const string     *textA = .., // pointer
                 *textB = .., // pointer
                 textC = .. ;// value
合二为一

const string     *textA = .., // pointer
                 &textB = .., // reference
                 textC = .. ;// value

每个变量前面都需要&。(指针也是如此。)另外,如果
at()
方法返回一个值(与引用相反),请注意这一点。在该声明引用该值后,该值无处可存储,因此临时值将立即被销毁。@GregHewgill噢,没有看到if这个词,sorry@GregHewgill:那不是真的。如果您使用对
常量&
的赋值来给临时名称,则该临时名称将一直保留,直到名称超出范围为止。@warl0ck:最好的办法是在同一语句中不包含多个声明。这就是为什么老前辈似乎更喜欢将指针声明为
int*x而不是
int*x@Adam:我希望这不会让我成为一个“老前辈”。。。至少我不觉得自己像一个!考虑到声明的工作方式,为什么有人会选择另一种方式呢?@Greg:关于这一点有很多讨论,因此,我把重点放在类型上,类型是
int&
。相关:@GregHewgill,s/old-timer/wise/;)我认为大多数人认为是*或是这个类型的一部分,所以把它与其他类型组合起来是很自然的。使用C语言已经15年了,我仍然这样认为,我觉得声明的工作方式是不直观的。@Xeo:这种讨论仍然让我感到有趣。这很简单,但是
int*var风格让我恼火。