gpt4 book ai didi

c++ - 模板忽略了常量(为什么?)

转载 作者:可可西里 更新时间:2023-11-01 18:08:17 25 4
gpt4 key购买 nike

有人知道,为什么要编译?

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 引用分配给非常量引用的错误吗?

最佳答案

问题在于,如果 T 类型是 int&,那么 const T 类型就不是 const int& ,但是 int & const。在模板替换和 typedef 结果中忽略引用上的非法顶级常量。

另一方面,如果 Tconst int,则 T&const int&

关于c++ - 模板忽略了常量(为什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com