模板const正确性无法传递const对象指针

问题描述 投票:0回答:1

我有具有此定义的模板并这样称呼它。

// instantiation
template class MyClass<Object*>;

template<typename T>
void MyClass<T>::Update(const T)
{
  ...
}

// Calling
MyClass foo;
const Object* objPtr;
foo.Update(objPtr);

我收到错误:“无法使用

Object *
类型的左值初始化
const Object *
类型的参数”。我正在使用 Clangd

既然

T=Object*
为什么
const T
不等于
const Object *
? 我认为它已经解决了
Object* const
我该如何制作它,使其具有所需的功能,使其指向的对象保持不变,并且我不想将实例化更改为
const Object *

代码示例 https://onlinegdb.com/3hvU46x_Y

c++ templates
1个回答
0
投票

问题

const T
中的常量是顶级。这意味着对于
T= Object*
,我们将得到
const T
Object *const

现在,

objPtr
的类型是
const Object*
,它有一个低级常量。本质上,您试图将具有低级 const 的参数传递给具有顶级 const 的参数,这是不允许的。

© www.soinside.com 2019 - 2024. All rights reserved.