c – 为什么通用引用不保持其参数的常量?
发布时间:2020-12-16 09:22:43 所属栏目:百科 来源:网络整理
导读:参见英文答案 Why is `const T` not sure to be const?????????????????????????????????????2个 templatetypename Tvoid f(T n){ ++n; // ok to modify a const object,why?}templatetypename Tvoid g(){ int n{}; fconst T(n);}int main(){ gint();} 如上
参见英文答案 >
Why is `const T&` not sure to be const?????????????????????????????????????2个
template<typename T> void f(T&& n) { ++n; // ok to modify a const object,why? } template<typename T> void g() { int n{}; f<const T&>(n); } int main() { g<int&>(); } 如上面的代码所示.我的问题是: 为什么通用引用不保持其参数的常量? 解决方法
确实如此.在您的示例中,您尝试将const应用于引用类型本身,而不是int.如果在类型后面写const,你可以看到它更清晰:
const T& == T const& == int& const&. 由于const在应用于引用类型时不会更改任何内容,因此它将被忽略. 事实上,如果你写了int& const没有模板,你会得到一个编译错误.但是在模板中允许它,因为在某些情况下很难避免这种类型. 另一种看待这种情况的方法是用指针替换引用.如果您这样做,您将获得以下类型: const T* = T const* = int* const* 此类型是指向可变(非常量)int的不可变(const)指针的指针. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |