我希望实现一个简单的本地C++固定容量数组模板类,支持方便的基于范围的“for each”语法,并且开销最小。
我在支持const实例时遇到了问题。
使用以下实现:
template< class T, size_t Capacity >
class List
{
public:
List() { mSize = 0; }
const T* begin() const { return mItems; }
const T* end() const { return mItems + mSize; }
T* begin() { return mItems; }
T* end() { return mItems + mSize; }
private:
size_t mSize;
T mItems[ Capacity ];
};
并且这个用法:
const List< int, 5 > myInts;
for each( const int myInt in myInts )
{
continue;
}
I get this error:
error C2440: 'initializing' : cannot convert from 'const int *' to 'int *'
Conversion loses qualifiers
这种用法不会报错:
List< int, 5 > myInts;
for each( const int myInt in myInts )
{
continue;
}
而这个(不好的)实现没有抱怨:
template< class T, size_t Capacity >
class List
{
public:
List() { mSize = 0; }
T* begin() const { return const_cast< List* >( this )->mItems; }
T* end() const { return const_cast< List* >( this )->mItems + mSize; }
private:
size_t mSize;
T mItems[ Capacity ];
};
我不太理解内部发生了什么?std::vector<>是如何正确处理的?谢谢!
for
循环仅在VS 2012中添加。 - Blastfurnace