我正在做一个小实验来测试共享指针和指针本身引用的数据的常量。我写了以下代码:
#include <iostream>
#include <vector>
#include <memory>
#include <type_traits>
using std::cout;
using std::endl;
using std::vector;
using std::shared_ptr;
auto testfun(const shared_ptr<const vector<int>> &vec){
cout<<std::is_const<const shared_ptr<const vector<int>>&>::value<<endl; // not const?
cout<<std::is_const<decltype(vec)>::value<<endl; // not const?
cout<<std::is_const<decltype(*vec)>::value<<endl; // not const?
cout<<std::is_const<decltype(&vec)>::value<<endl; // not const?
}
int main(){
const vector<int> myvec = {3,3,3,3,3,3};
const shared_ptr<const vector<int>> vec =
std::make_shared<const vector<int>>(myvec);
cout<<std::is_const<decltype(vec)>::value<<endl; // is const
testfun(vec);
return 0;
}
此代码的输出为:
1
0
0
0
0
有人可以解释为什么最后四张支票不符合const的条件吗?我特别好奇为什么std::is_const<decltype(vec)>
没有const
类型特征。