相关疑难解决方法(0)

修改*this而不使用const_cast的Const方法

在我正在编写的程序中出现了以下模式.我希望它不是太做作,但它设法Foo在const方法中改变一个对象Foo::Questionable() const,而不使用任何const_cast或类似的东西.基本上,Foo存储参考FooOwner,反之亦然,并在Questionable(),Foo设法修改本身在一个const方法通过调用mutate_foo()关于它的主人.问题遵循代码.

#include "stdafx.h"
#include <iostream>
using namespace std;

class FooOwner;

class Foo {
    FooOwner& owner;
    int data;

public:
    Foo(FooOwner& owner_, int data_)
        : owner(owner_),
          data(data_)
    {
    }

    void SetData(int data_)
    {
        data = data_;
    }

    int Questionable() const;       // defined after FooOwner
};

class FooOwner {
    Foo* pFoo;

public:
    FooOwner()
        : pFoo(NULL)
    {}

    void own(Foo& foo)
    {
        pFoo = &foo;
    }

    void mutate_foo()
    {
        if …
Run Code Online (Sandbox Code Playgroud)

c++ const const-correctness mutable

9
推荐指数
2
解决办法
3272
查看次数

const_cast和UB

$ 5.2.11/7 - "[注意:根据对象的类型,通过指针,左值或指向数据成员的指针进行写入操作会导致const-qualifier68的const_cast)可能会产生未定义的行为(7.1. 5.1).]"

本节的措辞(C++ 03)对我来说是令人惊讶的.令人惊讶的是两件事.

a)首先,使用'可能'.为什么'可能'?标准中的其他地方对未定义的行为非常明确

b)为什么抛弃原始const对象的常量而不是直接'未定义的行为'.为什么要触发UB需要写入?

c++ const-cast undefined-behavior

5
推荐指数
2
解决办法
503
查看次数