大佬教程收集整理的这篇文章主要介绍了c – 带有函数签名的Const关键字,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iostream> using namespace std; class alloc { }; template <typename T,typename Alloc = alloc> class vector { public: void swap(vector<T,Alloc> &v) { cout << "swap()" << endl; } }; template <typename T,typename Alloc> void swap(const vector<T,Alloc> &v1,const vector<T,Alloc> &v2) { v1.swap(v2); } int main() { vector<int> x; vector<int> y; swap(x,y); return 0; }
然后我删除const关键字.
void swap(vector<T,vector<T,Alloc> &v2)
我得到输出交换()
为了调试此问题,请使用std删除,并在需要标准库行为的位置添加std ::.幸运的是,只有一个这样的地方,即模板类中的交换函数:
void swap(vector<T,Alloc> &v) { std::cout << "swap()" << std::endl; }
现在尝试再次编译到see the error,以防止使用COnst交换:
当你的程序使用时,当你的函数不适用时,你可以选择使用自己的交换函数选择std::swap
.这正是它所做的,没有任何警告,因为它假设它是你想要它做的.
该错误还告诉您如何使const限定向量被接受:将const添加到vector :: swap的参数中,如下所示:
void swap(const vector<T,Alloc> &v) const { std::cout << "swap()" << std::endl; }
以上是大佬教程为你收集整理的c – 带有函数签名的Const关键字全部内容,希望文章能够帮你解决c – 带有函数签名的Const关键字所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。