gpt4 book ai didi

c++ - 与 const_cast 混淆了

转载 作者:行者123 更新时间:2023-11-28 07:49:57 25 4
gpt4 key购买 nike

Sample_Program-1

#include<iostream>
using namespace std ;

int main(){
const int i = 9;
int *j = const_cast<int*>(&i); //Ok
int *j = const_cast<int*>(i); //Error
}

Sample_Program-2

#include<iostream>
using namespace std ;

int main(){
const int i = 9;
int j = const_cast<int&>(i);//Ok
int j = const_cast<int>(i);//Error
}

我刚刚学习了一些 C++ 概念并遇到了上述两个概念。谁能解释一下我在上面的 2 个示例程序中标记为错误的概念?

最佳答案

1) 您正在将 (const int*) 转换为 (int*)。因此,由于 const 修饰符,您无法更改放置在该地址的值(指向内存中某个地址的指针)。当您将其转换为 (int*) 时,编译器将允许更改该地址的数据。

2) 您正在尝试将 (const int) 转换为指向 int (int*) 的指针。 (int) 和 (int*) 是不同的类型。这与要求 const_cast 将字符串转换为 float 相同。 const_cast 运算符不能更改变量的类型。要制作此类内容,您应该查看 static_cast 或 reinterpret_cast。

3) 您将 const int 转换为对 int 的引用并将值赋给 int(您只是将值复制到一个新变量)。这可能不是您想要的,因为在这种情况下更改 j 不会更改 i。您可以创建对 int 而不是 j 的引用,然后您可以更改 i 的值。

4) 我不明白你想在这里做什么。 const_cast 的想法是移除对象上的 const 保护。所以这个操作只能在指针和引用上进行。您不需要任何转换即可将 const int 复制到 int。但是在获取指针或引用并移除保护之前,您无法更改 i 的值。

结论。删除 const 是一种糟糕的编程风格。假设您编写了一个库,其中函数具有 const int* 参数。你的图书馆的用户会确信他的 int 不会改变,但你改变了它并且他丢失了他需要的数据。

关于c++ - 与 const_cast 混淆了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14041741/

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