gpt4 book ai didi

C++ 在类的 const 方法中将 char 数组分配给 T* 的方法

转载 作者:行者123 更新时间:2023-11-30 03:56:52 25 4
gpt4 key购买 nike

我想在堆栈上使用一些内存来存储一些对象(它出现在一个小型 vector 优化库中)。因此,我的课是

template <typename T, int n>
class SmallVector {
private:
T* begin_;
T* end_;
T* capacity_;
alignas(T) char data_small_[n * sizeof(T)];
public:
...
}

为了检查是否使用了 small_data_ 缓冲区,我定义了函数

bool is_data_small_used() const {
return begin_ == reinterpret_cast<T*>(data_small_);
}

不幸的是,它不起作用。铿锵版本

Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

给我以下错误信息:

./il/container/SmallVector.h:44:25: error: reinterpret_cast from 'const char *' to 'il::Vector<double> *' casts away qualifiers
return begin_ == reinterpret_cast<T*>(data_small_);

Intel 编译器也是如此。我找到的唯一解决方案是做

begin_ == (T*) data_small_

这不是很 C++。在 C++ 中是否有执行此操作的“正确方法”?

最佳答案

错误消息表明问题发生在 const 成员函数内。在这种情况下,this 被认为指向一个 const 对象,因此 data_small_ 的类型为 const char[N]

一个简单的解决方法是写:

return begin_ == reinterpret_cast<T const *>(data_small_); 

另一个是:

return reinterpret_cast<char const *>(begin_) == data_small_;

C 风格的转换之所以有效,是因为该转换可以一起执行 reinterpret_castconst_cast,而 reinterpret_cast 本身不能丢弃常量

关于C++ 在类的 const 方法中将 char 数组分配给 T* 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28287502/

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