gpt4 book ai didi

c++ - 为什么必须将参数强制转换为 const?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:38 24 4
gpt4 key购买 nike

我的理解是参数声明中的 const 表示被声明的函数不会改变 const 值。那么,为什么这会对调用者传递的参数的常量性提出要求?

定义代码:

void Func(const Foo**);

main()
{
Foo* fooPtr;
Func(&fooPtr);
}

Visual Studio 2012 编译器产出:

> error C2664: 'Func' : cannot convert parameter 1 from 'Foo**' to 'const Foo**'
> Conversion loses qualifiers

但以下工作:

main()
{
Foo* fooPtr;
Func(const_cast<const Foo**>(&fooPtr));
}

基本理论是什么?

最佳答案

如果允许转换,那么它可以用来规避常量正确性:

const Foo const_foo;

void evil(const Foo** p) {
*p = &const_foo; // *p is 'const Foo*', so this assignment is allowed
}

int main() {
Foo* p;
evil(&p); // modifies p to point to const_foo
p->modify(); // BOOM! Modifying a constant object
}

你可以转换为const Foo* const*;这不允许您将 Foo* 更改为指向其他任何内容,因此不能破坏常量正确性。这比使用狡猾的类型转换并希望最好的要好;尽管您应该问问自己,如果您不想更改它,为什么不简单地按值传递指针。

关于c++ - 为什么必须将参数强制转换为 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307879/

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