簡體   English   中英

理解 C++ 中的 const_cast

[英]Understanding const_cast in C++

我試圖理解const_cast

在下面的例子中, items_是一個私有成員變量。

getItems()方法是一個const方法,這意味着它不能修改成員變量items_

getItems()返回一個const vector引用,這意味着您不能修改成員變量items_

我的問題是,這里需要const_cast嗎? 我不這么認為,因為我不需要拋棄常數?

#include <iostream>

class test {  
  std::vector<Item> items_;
public:
  const std::vector<Item>& getItems() const;
};

const std::vector<mv::Item>& mv::Workloads::getItems() const
{
  return const_cast<std::vector<Item>&>(items_);
}

這不僅是不必要的,而且在那個地方顯然是錯誤的。

考慮從返回類型中刪除const時會發生什么:

/*const*/ std::vector<mv::Item>& mv::Workloads::getItems() const
{
return const_cast<std::vector<Item>&>(items_);
}

現在該方法返回對const對象的非常量引用! 注意,這個方法本身聲明為const ,因此thisconst在這種方法的情況下,也items_const 當在const test實例上調用該方法時,使用該方法返回的引用將導致未定義的行為。

從這個意義上說,如果您決定更改返回類型,則這里const_cast的唯一作用是潛在地消除重要的編譯器錯誤。

另一方面,在方法中(即返回一個const引用)沒有理由進行強制轉換。 items_const並且返回對它的const引用。

const_cast很有用,例如,當您確實知道您將const的對象實際上不是const ,可以避免const和非const方法的代碼重復,請參閱此處了解詳細信息。

PS :如果您確實想從const方法返回對成員的可變引用,則可以聲明成員mutable 也不需要const_cast 但是, mutable應該小心使用,通常一開始就不需要。

這不是必需的,只需返回_items

const 成員函數將對象本身 ( *this ) 視為 const,因此每個數據成員都被視為 const,允許從中構建和返回 const 引用。

#include <iostream>
using namespace std;
class test {

std::vector<Item> items_;
public:
const std::vector<Item>& getItems() const;
};
const std::vector<mv::Item>& mv::Workloads::getItems() const
{
return items_;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM