簡體   English   中英

以下是使用const_cast未定義的行為嗎?

[英]Is the following use of const_cast undefined behavior?

這是一個語言律師問題,而不是一個好的練習題。

以下代碼是有效還是未定義的行為? const對象最終調用非const函數,但它實際上並不修改對象的狀態。

struct Bob
{
    Bob() : a(0) {}

    int& GetA()
    {
        return a;
    }

    const int& GetA() const
    {
        return const_cast<Bob&>(*this).GetA();
    }

    int a;
};

int main()
{
    const Bob b;
    int a = b.GetA();
}

行為定義明確:

C ++標准,第5.2.11 / 7節[const cast]

[注意:根據對象的類型,通過指針,左值或指向數據成員的指針的寫入操作會導致const-qualifier的const_cast,這可能會產生未定義的行為。 - 尾注]

GetA()不會寫任何Bob成員,因此該程序不涉及未定義的行為。

我相信它是定義明確的,因為標准僅歸因於修改 const對象的未定義行為。 C ++ 11引用如下:

[expr.const.cast]5.2.11§7

[ 注意:根據對象的類型,通過指針,左值或指向數據成員的指針的寫入操作會導致const-qualifier的const_cast產生未定義的行為(7.1.6.1)。 - 尾注 ]

[dcl.type.cv]7.1.6.1§4

除了可以修改聲明為mutable (7.1.1)的任何類成員之外,任何在其生命周期內修改const對象的嘗試(3.8)都會導致未定義的行為。 ...

GetA()實際上並沒有修改任何對象,因此它沒有未定義的行為。

暫無
暫無

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

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