经过与const和非const Refere的相同对象

问题描述 投票:0回答:2
以下代码使用G ++ v4.8.1编译并输出

45

,但是根据标准保证其汇编吗?其他编译器会抱怨吗?

#include <iostream> #include <vector> void test(const std::vector<int>& a, std::vector<int>& b) { b[0] = 45; } int main() { std::vector<int> v(1,0); test(v, v); std::cout << v[0] << std::endl; }

我知道函数定义没有任何固有的错误,但是当用相同对象调用
test

时,我有些期望警告说,我将一个对象传递给了一个a

v
和non-
const
参考。
	
没有问题,因为编译器将这两个参数视为不同的引用。要理解代码考虑以下示例

const
c++ reference constants
2个回答
9
投票

没有理由这不应该编译。 您的向量不是const,然后您可以在const或可变上下文中使用它。
与此相同的方式:

2
投票

绑住您绑定相同的对象或没有任何发病率。 您应该看一下动物园里的狮子,窗户后面的访客无法触摸他,而教练员可以喂他,但仍然是同一位狮子。

是的,这是正确的。 const引用可以绑定到非const对象。当然是这样的,因为如果函数无法修改它,为什么非const对象会护理,哪个是确保的呢? (至少,它可以确保对象不会通过该特定参考进行修改,尽管可以通过另一个非const reference修改该对象。

但是,反向并非如此。您不能将非const引用绑定到const对象。 const对象实际上确实在乎一个函数是否会修改它,而非const refoce则允许。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.