gpt4 book ai didi

c++ - 使用 const_cast 的自动类型推导不起作用

转载 作者:太空狗 更新时间:2023-10-29 20:20:06 25 4
gpt4 key购买 nike

在我的工作中使用const_cast在某些情况下是不可避免的。

现在我必须 const_cast一些非常复杂的类型,实际上我不想在 const_cast<Clutter> 中写下所有这些类型困惑表达式,尤其是如果 Clutter很长。

我的第一个想法是写 const_cast<>(myType) , 但我的编译器无法推断出 myType 的非常量类型.所以我想帮助我的编译器,我设计了以下编译方法。

#include <stdlib.h>
#include <iostream>

int main(int, char**) {
const int constVar = 6;
using T = typename std::remove_cv<decltype(constVar)>::type;
auto& var = const_cast<T&>(constVar);
var *= 2;
std::cout << &constVar << " " << &var << "\n"; // Same address!
std::cout << constVar << " " << var << "\n";
return EXIT_SUCCESS;
}

不幸的是,程序给出了输出 6 12而不是预期的 6 6 ,我真的不明白?

我的方法有什么问题?

最佳答案

来自 const_cast 的文档:

const_cast makes it possible to form a reference or pointer to non-const type that is actually referring to a const object or a reference or pointer to non-volatile type that is actually referring to a volatile object. Modifying a const object through a non-const access path and referring to a volatile object through a non-volatile glvalue results in undefined behavior.

所以你所拥有的是未定义的行为。

同样有趣的是来自 cv type qualifiers 的注释.

const object - an object whose type is const-qualified, or a non-mutable subobject of a const object. Such object cannot be modified: attempt to do so directly is a compile-time error, and attempt to do so indirectly (e.g., by modifying the const object through a reference or pointer to non-const type) results in undefined behavior.

关于c++ - 使用 const_cast 的自动类型推导不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53759384/

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