2015-11-17 52 views
0

以下两者有什么区别吗?有本地变量参考的C++

const int64 x = some_struct.x; 

const int64& x = some_struct.x; 

一个比另一个更好吗?我最近看到这个引用被用在某处,但不明白为什么有人会这么做。

+0

@JamesRoot你为什么要把它标记为重复?我的问题主要在于如果参考对POD有任何意义。我四处搜寻,找不到任何问题。如果您发现某些内容,请将其张贴并标记为重复。 – Undivided

+1

你将不得不问问原始程序员。没有明显的原因。 –

+0

@未经授权这真的很奇怪。我打算将它标记为重复,并决定它不是,所以我只是让它成为。无论如何,我不知道它为什么标记它。 –

回答

3

您可以将引用看作原始变量的别名。

some_struct.x = 1; 
const int64 x1 = some_struct.x; 
const int64& x2 = some_struct.x; 
std::cout << x1 << "," << x2 << std::endl; // should be "1,1" 

some_struct.x = 2; 
std::cout << x1 << "," << x2 << std::endl; // should be "1,2" 
0

第一种情况是从some_struct.x得到的值的副本,而第二种情况依然与其绑定。所以如果some_struct.x更改其值,x将不会受到影响,但&x将引用更改。

没有better,因为这取决于使用此代码的意图。

+0

如果我不打算改变some_struct.x的值,那么在引用的情况下编译器是否做了任何优化? – Undivided

+0

我猜想,如果'some_struct.x'没有改变,并且编译器可以推断出,那么代码将是相同的。如果传递some_struct,则可能是编译器需要生成额外的加载指令,如果它不能推断它没有改变。 – Devolus

+0

@未分类:在此特定示例中,可能不是。但只要你写'const int&x1 = some_ptr-> x;'那么它很可能。细微的区别是'some_ptr'可能会改变。如果你知道指针没有改变,但编译器不确定,那么引用可能是一个优化。 – MSalters