gpt4 book ai didi

c++ - const c++ 的正确使用

转载 作者:行者123 更新时间:2023-11-30 02:08:55 25 4
gpt4 key购买 nike

我有这个示例代码(如下),example1() 方法没有问题,example2() 类似但我必须强制 const_char 使其编译,尽管我认为不需要 example1() 方法,example2( ) 也不需要。

我的问题是,如何修改 add() 方法来使两者都能编译,或者我必须如何在 example2() 中正确调用 buffer.add() 而不强制使用 const_cast? add() 方法不修改项目,因此 const_cast 是不必要的。哪个是正确或合适的形式?

示例代码如下:

template <class Item>
class Buffer
{
public:
Item * _pItems;
int _nItems;
// ... constructor / destructors etc
void add( const Item & item ) // or maybe Item const & item
{
_pItems[_nItems++] = item;
}
};
class MyClass
{
public:
// data
};
void example1( const MyClass & item )
{
Buffer<MyClass> buffer;
buffer.add( item ); // WORKS, no problem
}
void example2( const MyClass & item )
{
Buffer<MyClass *> buffer; // NOW with pointers to MyClass
//buffer.add( item ); // ERROR: 'Buffer<Item>::add' : cannot convert parameter 1 from 'const MyClass' to 'MyClass *const &'
buffer.add( const_cast<MyClass *>( &item ) ); // forcing const_cast WORKS
}

最佳答案

你应该这样做:

Buffer<MyClass const*> 

因为 const MyClass 上的 &item 是 Myclass const* 而不是 MyClass*

关于c++ - const c++ 的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5922435/

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