gpt4 book ai didi

c++ - 为什么允许我从 const 成员函数调用 this->deviceContext->map()?

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:36 25 4
gpt4 key购买 nike

我不明白为什么允许这样做:

void Renderer::UpdateTextureFromArray(unsigned int* colors, unsigned int size, TextureData* textureData) const
{
D3D11_MAPPED_SUBRESOURCE ms;
this->deviceContext->Map(textureData->texture, 0, D3D11_MAP_WRITE_DISCARD, NULL, &ms);

memcpy(ms.pData, colors, sizeof(unsigned int) * size * size);
this->deviceContext->Unmap(textureData->texture, 0);
}

我将 UpdateTextureFromArray 函数设为常量,但我仍然可以对其成员调用非常量函数?

在这种情况下,将函数标记为 const 对我来说是一种不好的风格吗?

编辑:澄清一下,如果我有像这样的 const 函数,它是否对社会“撒谎”?在理想情况下,这段代码无法编译,对吧?

最佳答案

大概deviceContext是一个指针数据成员,所以const方法不能修改指针。但是允许修改指针指向的对象:

struct Bar {
void bar() {} // non const method
};

struct Foo {
Foo() : p(0) {}
void foo() const { p->bar();} // const method calling non-const method of Bar
Bar* p;
};

int main()
{
const Foo f;
f.foo(); // OK, Foo::p is not modified
}

关于c++ - 为什么允许我从 const 成员函数调用 this->deviceContext->map()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14991347/

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