将相同的对象作为const和非const引用传递

gli*_*nka 4 c++ const

下面的代码用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;
}
Run Code Online (Sandbox Code Playgroud)

我知道函数定义没有任何内在错误,但是当test使用相同的对象调用时v,我有点期待一个警告,即我将一个对象作为a const和非const引用传递.

Vla*_*cow 6

没有问题,因为编译器将这两个参数视为不同的引用.要了解代码,请考虑以下示例

int i = 10;
const int &cr = i;
int &r = i;

r = 20;

std::cout << cr << std::endl;
Run Code Online (Sandbox Code Playgroud)