【发布时间】:2012-10-27 17:35:50
【问题描述】:
有人知道,为什么会这样编译吗??
template< typename TBufferTypeFront, typename TBufferTypeBack = TBufferTypeFront>
class FrontBackBuffer{
public:
FrontBackBuffer(
const TBufferTypeFront front,
const TBufferTypeBack back): ////const reference assigned to reference???
m_Front(front),
m_Back(back)
{
};
~FrontBackBuffer()
{};
TBufferTypeFront m_Front; ///< The front buffer
TBufferTypeBack m_Back; ///< The back buffer
};
int main(){
int b;
int a;
FrontBackBuffer<int&,int&> buffer(a,b); //
buffer.m_Back = 33;
buffer.m_Front = 55;
}
我使用 GCC 4.4 编译。为什么它甚至让我编译这个?不应该出现我无法将 const 引用分配给非常量引用的错误吗?
【问题讨论】:
-
函数签名中忽略顶级 const-volatile 限定符。
-
AFAIK 常量引用不存在。您只能引用 const 对象(
const int&有效,int& const不存在)。但是,这并不能解决您的问题... -
构造函数的参数名称为什么要以
m为前缀?不是代表会员吗?它的目的不就是区分成员对象与函数局部对象和全局对象吗? -
m_ 代表成员是,是的,它是一个错误:-)
标签: c++ templates constructor constants default-constructor