ASA*_*SAC -2 c++ templates const
编写模板化代码的想法是编写易于应用于某些泛型类型的通用代码T.
使用的想法const是将行为强加于对象.这不只是告诉用户他们如何能够或不能使用对象,而是告诉用户自己不能改变对象.
这两个想法似乎相矛盾,不是吗?如何编写通用代码,同时对泛型类型的常量进行假设?当然,在许多情况下,您可能会预测到您将永远不会使用不符合您的使用类型的类型来实例化您的代码const,但想象一下,如果您突然发现情况并非如此,则会感到恐惧,并且必须挖掘所有代码以删除错误放置const?
我们如何解决这个问题?我们不是用const模板化的代码写的吗?
const当然有它的位置.举个例子vector::operator[],这是一个双重过载:
T &operator[](size_t offset) 为您提供数据的可变引用.T const &operator[](size_t offset) const 给你一个const引用.当我使用a时vector<int>,我可能想要一个vector<int> const,如果它不是第二次重载,我无法访问其中的任何元素.
必须注意放置consts的位置,但它们也在模板代码中占有一席之地.