我一直在使用:
string letters = THESAMELENGTH; // Assign for allocation purposes.
原因是,如果我:
string letters[THESAMELENGTH.length()];
我收到一个非常量的表达投诉。
但如果我:
string letters[12];
如果指南 const 字符串更改大小,我有需要更改每个实例的风险。
但是当我不使用这些条目时分配一个字符串似乎很愚蠢,我只希望我新分配的字符串与之前分配的 const 字符串长度相同,然后填充不同的值。
你如何建议我优雅而安全地做到这一点?
原文由 Georgina Davenport 发布,翻译遵循 CC BY-SA 4.0 许可协议
string
类/类型存在的部分原因是您不必担心尝试管理其长度。 (char
数组的问题。)如果你有一个
const std::string tmp
那么你不能在它已经被初始化之后给它分配任何东西。例如:如果您真的想将字符串保持为特定大小,无论其内容如何,您都可以始终
resize
您的string
变量。例如:现在您的
word
字符串的长度/大小MAX_STRING_LENGTH
并且超出末尾的任何内容都会被截断。此示例来自 C++ 参考
您不能只在编译时询问字符串 变量 的长度。根据定义,不可能知道 变量 的值,或者任何给定程序的 _状态_,而它没有运行。这个问题只在运行时才有意义。
其他人已经提到了这一点,但是您对
string letters[12];
的理解似乎存在问题。这为您提供了string
类型的数组,即您可以获得 12 个完整字符串(例如单词/句子/等)的空间,而不仅仅是字母。换句话说,你可以这样做:
所以你的
letters
变量应该重命名为更准确的东西(例如words
)。如果您真的想要字母(例如单个字符串上的完整字母表),您可以执行以下操作:
这完全取决于您需要做什么,但这可能是一个不错的选择。
免责声明: 请注意,我不建议您这样做。您应该让
string
管理自己的长度。例如,如果string
值实际上比您的限制短,那么您会导致您的变量使用的空间/内存比需要的多,如果它更长,您仍然会截断它。恕我直言,这两种副作用都不好。