gpt4 book ai didi

c++ - 将模板化 T 定义为指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:46 28 4
gpt4 key购买 nike

我想使用这段代码定义一些通用指针(?但不是空指针):

class A
{

template<typename T>
using ptr = T*;

using ubyte = uint8_t;

public:

const ptr<ubyte>
getColor1() const {
return &colors[0];
}

const ubyte*
getColor2() const {
return &colors[0];
}


private:

ubyte colors[4];
};

但是,getColor1() 不会编译。这两个函数有什么区别?

海湾合作委员会说:

error: invalid conversion from 'const ubyte* {aka const unsigned char*}' to 'A::ptr<unsigned char> {aka unsigned char*}' [-fpermissive]|

更新:

删除的答案说我可以这样做:

//option 1
template<typename T>
using const_ptr = const T*;

//option 2
const ptr<ubyte>
getColor() //remove cv-qualifier
{
return &colors[0];
}

从选项1,

现在构造成const constconst const是什么意思?

从选项2,

为什么只删除 cv-qualifier 就可以编译?

最佳答案

const ptr<ubyte>const (ubyte *)相同这const ubyte (*)相同.您正在尝试返回 const指向非常量的指针 char ,编译器不允许这样做,因为您已经声明了函数本身 const ;所有成员变为const因为那个。如果没有 const_cast,编译器不会自动将 const 转换为非常量.

为了让区别更清楚,第一个是指向非常量 char 的常量指针第二个是指向 const char 的非常量指针.第一个允许指向的字符改变,即使指针本身不能改变。由于函数被标记为 const它不能返回任何允许修改其成员的内容。

最好的解决方法:

ptr<const ubyte>
getColor1() const {
return &colors[0];
}

关于c++ - 将模板化 T 定义为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161420/

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