首页 > 解决方案 > 为什么只有 32 个字节的 std::string 可以包含一个 62 个字节的字符串文字?

问题描述

我正在阅读的书发出警告

std::string 类型和字符串文字不是同一类型,可能会引起混淆。

然而,这本书没有任何附带的例子。

有人可以举一些例子来说明它们在哪些情况下不同吗?

我也做了一些调查。这是代码:

#include <iostream>
#include <string>
int main() {
    std::string str("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

    std::cout << sizeof(str) << std::endl; //1
    std::cout << sizeof(std::string) << std::endl; //2
    std::cout << sizeof("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") << std::endl; //3
    std::cout << sizeof(L"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") << std::endl; //4
    return 0;
}

输出结果如下:

32
32
62
248

我可以理解结果。

但有一件事我不明白。

为什么只有 32 个字节的 std::string 可以包含一个 62 个字节的字符串文字?

标签: c++stringstring-literals

解决方案


推荐阅读