一、先弄清楚:C++ 里有哪些'字符串'?
在 C++ 中,和'字符串'相关的常见类型主要有:
- C 风格字符串(C-style string)
- 本质:以
'\\0'结尾的char数组 - 例:
char s[] = "hello";
- 本质:以
std::string(C++ 标准库字符串)- 本质:封装好的动态字符串类,自动管理内存
- 例:
std::string s = "hello";
- 宽字符/Unicode 相关的:
wchar_t、char16_t、char32_t、std::wstring、std::u16string、std::u32string等- 这些在处理多语言/Unicode 时会用到,这里先不展开。
日常开发中,绝大部分情况都用 std::string,只有与底层 API、C 接口打交道时,才不得不使用 C 风格字符串。
你看到的代码片段:
string groups[6][6]{};for(auto& s : allowed){ groups[s[0]-'A'][s[1]-'A']+= s[2];}
这里用的是 std::string 的二维数组:std::string groups[6][6]。在 C++ 中,string 是 std::string 的别名(using std::string; 之后)。
二、std::string 的常见初始化方式
1. 默认初始化 / 值初始化
std::string s1;// 默认初始化,内容为空字符串 "" std::string s2{};// 值初始化,效果同上,也是 ""
你看到的:
string groups[6][6]{};
这行的含义是:
- 声明一个 6×6 的
std::string数组 {}表示值初始化,把每个元素都初始化为'空字符串'
等价于:
string groups[6][6];// 在这种情况下,同样会默认构造出 36 个空字符串

