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
没有理由这不应该编译。 您的向量不是const,然后您可以在const或可变上下文中使用它。
与此相同的方式:
绑住您绑定相同的对象或没有任何发病率。 您应该看一下动物园里的狮子,窗户后面的访客无法触摸他,而教练员可以喂他,但仍然是同一位狮子。
是的,这是正确的。 const引用可以绑定到非const对象。当然是这样的,因为如果函数无法修改它,为什么非const对象会护理,哪个是确保的呢? (至少,它可以确保对象不会通过该特定参考进行修改,尽管可以通过另一个非const reference修改该对象。
但是,反向并非如此。您不能将非const引用绑定到const对象。 const对象实际上确实在乎一个函数是否会修改它,而非const refoce则允许。