2012-10-11 130 views
4

Possible Duplicate:
const reference can be assigned an int?const int&value = 12和const int value = 12之间的区别;

const int& value = 12; 

const int value = 12; 
编译时

之间的细微差别?怎么样?

+0

'const int&some_reference =(有些右值);'?这甚至工作吗? – cHao

+2

后者可以用作一个常量表达式,前者仅仅是一个延长生命周期的临时表达式。 – ildjarn

+0

@jogojapan:这解释了前者是什么(即为什么它是合法的以及它在做什么),但它不能解释前者和后者之间的实际差异(上述常数表达式就是一个例子)。 – ildjarn

回答

-1

请参阅this question的说明。

所以你可以这样写代码:

void f(const string & s) { 
} 

("foobar"); 

貌似我得到downvoted给了这样一个不完整的答案。但这个问题本质上与我联系的一个重复。

有更详细的信息来描述这个问题的区别。

0

第一个是const-reference分配的数字,第二个是const的左值分配的数字。在使用条款中,没有区别,因为用户不能修改“值”。
编译器显然不同地处理引用,通常引用是它声明的类型的某个对象的别名,在这种情况下,没有变量名称的数字被分配给引用。

1
int value = 12; 

这里'值'是值变量。

其中是int &用于创建其他变量的引用变量(别名)。像

int i; 
int& j=i; 

j和我指的是相同的内存位置。 it c++ concept.

但是无法为存储位置创建引用变量。所以我的想法下面的表达式是错误PROMT

int& i = 12; `Will not compile even.`  

关于常量

常量关键字用来创建一个只读变量。一旦初始化,变量的值就不能改变。考虑下面的代码:

const int x = 2; // const var can be initialized, not modified thereafter 
x = 10;   // error - cannot modify const variable 

错误:错误:只读变量“x”的

另外表达可使用常量的分配的类型的两侧。

const int value = 12; 
int const value = 12; 

两个表达式都是相同的(对于简单的非指针数据类型)。了解here 我们看到的最常见的地方是参考函数参数或返回值。

常量与参考变量

临时被创建,并且是合法的一个const参考绑定到它,但非法将其绑定到一个非const之一。

它就像:

const int& reference_to_const_int = int(20); //LEGAL 
     int& reference_to_const_int = int(20); //ILLEGAL 

一个const参考延伸的临时的生活,这就是为什么这个工程。这只是语言的一个规则。 (我从here得知)

+2

对不起,但这是不正确的。 'const int&val = 12;'是有效的,应该编译。请参阅http://stackoverflow.com/questions/10801894/const-reference-can-be-assigned-an-int – jogojapan

+0

@jogojapan编辑我的答案:谢谢 –

相关问题