一码农 2022-02-08 17:09 采纳率: 68.8%
浏览 48
已结题

C++中如何在构造函数的初始化列表中用16进制字节数组对const std::vector<std::string>进行初始化?

我有一个类成员变量为const std::vectorstd::string类型,因为是const,所以只能在初始化列表中进行赋值,其中的string值不是可见的ASCII字符,需要通过16进制字节数组的方法来构造string,我的写法如下:

class TestVector {
public:
    TestVector();
    void print() {
        std::cout << mv[0] << std::endl;
        for (auto& v : mv) {
            for (auto& c : v) {
                std::cout << std::hex << std::setw(2) << std::setfill('0') << int(c)<<" ";
            }
            std::cout << std::endl;
        }
    }
private:
    const std::vector<std::string> mv;
};

TestVector::TestVector()
    :mv({
        std::string("123"),//这句打印正常
        std::string({0xAA, 0x38}, 2)//这句为空
        })
{

}

编译没有异常,可运行时为什么mv[1]为空?正确的写法是什么?求指教,谢谢

  • 写回答

3条回答 默认 最新

  • [PE]经典八炮 2022-02-08 18:11
    关注

    你这是什么意思?用string存储数值?嵌套的vector不行吗
    我不知道std::string(std::initializer_list<char>,size_t)这个重载函数的作用,但我知道std::string(std::initializer_list<char>)才是用来用初始化列表构造一个string对象的。修改后的代码如下:

    #include<iostream>
    #include<iomanip>
    #include<vector>
    class TestVector {
    public:
        TestVector();
        void print() {
            for (auto& v : mv) {
                for (auto& c : v) {
                    std::cout << std::hex << std::setw(2) << std::setfill('0') << int(c) << " ";
                }
                std::cout << std::endl;
            }
        }
    private:
        const std::vector<std::string> mv;
    };
    
    TestVector::TestVector()
        :mv({
            std::string("123"),//这句打印正常
            std::string({(char)0xAA, (char)0x38})//这句为空
            })
    {
    
    }
    
    int main()
    {
        TestVector v;
        v.print();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献