You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中通过变量拼接生成正确的变量引用?

解决C++中通过变量动态引用结构体实例的问题

你想通过变量itemNo的值动态访问item1、item2、item3这类结构体实例的name成员,但C++作为静态类型语言,不支持直接通过拼接变量名的方式访问对象。以下是几种可行的实现方案:

  • 使用数组存储结构体实例
    这是最简洁高效的方式,将所有结构体实例存入数组,通过索引直接访问:

    #include <iostream>
    #include <string>
    
    struct Item {
        std::string name;
        // 可添加其他成员变量
    };
    
    int main() {
        Item items[] = {{"物品1名称"}, {"物品2名称"}, {"物品3名称"}};
        int itemNo = 1; // 用户选择的编号,注意数组索引从0开始,需做减1处理
    
        std::cout << "你选择的物品是 " << items[itemNo - 1].name << std::endl;
        return 0;
    }
    
  • 使用std::map建立编号与实例的映射
    如果编号不连续或需要更灵活的键值对应关系,可采用map存储:

    #include <iostream>
    #include <string>
    #include <map>
    
    struct Item {
        std::string name;
    };
    
    int main() {
        std::map<int, Item> itemMap = {
            {1, {"物品1名称"}},
            {2, {"物品2名称"}},
            {3, {"物品3名称"}}
        };
    
        int itemNo = 2;
        std::cout << "你选择的物品是 " << itemMap[itemNo].name << std::endl;
        return 0;
    }
    
  • 使用switch-case分支处理(适合实例数量少的场景)
    若结构体实例数量不多,也可以通过分支语句逐个匹配:

    #include <iostream>
    #include <string>
    
    struct Item {
        std::string name;
    };
    
    int main() {
        Item item1 = {"物品1名称"};
        Item item2 = {"物品2名称"};
        Item item3 = {"物品3名称"};
    
        int itemNo = 3;
        std::string selectedName = "无效的物品编号";
    
        switch(itemNo) {
            case 1: selectedName = item1.name; break;
            case 2: selectedName = item2.name; break;
            case 3: selectedName = item3.name; break;
        }
    
        std::cout << "你选择的物品是 " << selectedName << std::endl;
        return 0;
    }
    

内容的提问来源于stack exchange,提问作者Chris Ingham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:35:44