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代码>风格让我恼火。