c++ - any_cast std::any 指向特定指针类型的指针

标签 c++ pointers casting any

我想要std::map<string, any> *var1指向与 std::any *var2 相同的内存地址/值因为我知道 var2指向 map<string, any> .

以下似乎有效:

std::map<string, any> *var1 = any_cast<std::map<string, any>>(var2);

还好吗?问题是即使 var2 也不会发出坏 Actor 的信号实际上不是 std::map<string, any>*但其他东西,但如果它仍然有效。

我做的对吗?

std::map<string, any> *mapptr;
std::any realmap = std::map<string, any>({{"key", "value"}, {"key2", 5}});
std::any *ptrtomap = &realmap;
mapptr = any_cast<std::map<string, any>>(ptrtomap);
// Interesting part below
realmap = 6;
mapptr = any_cast<std::map<string, any>>(ptrtomap);

将变量的类型更改为整数后,any 指针指向我仍然可以将该指针转换为 std::map 类型的指针.

什么???

最佳答案

尝试运行这段代码

#include <stdio.h>
#include <map>
#include <string>
#include <any>

using namespace std;

int main()
{
    map<string, any> *amap;
    any realmap = std::map<string, any>({{"key", "value"}, {"key2", 5}});
    any *ptrtomap = &realmap;
    amap = any_cast<map<string, any>>(ptrtomap);
    printf("Pointer real map: %x\n", amap);

    // Interesting part below
    realmap = 6;
    amap = any_cast<map<string, any>>(ptrtomap);
    printf("Pointer invalid map: %x\n", amap);
    return 0;
}

它输出例如

Pointer real map: 11cfd00
Pointer invalid map: 0

所以非法转换返回了一个空指针。编译器无法检测到无效的转换

关于c++ - any_cast std::any 指向特定指针类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57429709/

相关文章:

c++ - 如何调试nodejs的二进制模块?

c++ - 动态转换的运行时检查

c++ - 将返回值转换为模板类型

c - 何时转换 size_t

c++ - 如何从文本文件加载链表?

c++ - GetPrivateProfileInt- 只读取默认值

c++ - Linux/阿尔萨 : Callback when frame is written to sound card

java - 尝试将对象实例写入 ObjectOutputStream 时出现 NullPointerException

c++ - 指向类成员的函数指针生成编译器错误

c - 查找指向数组的指针的大小