我正在编写代码,代码的不同部分根据用户输入执行。如果我确定用户只输入一个字符,字符串或字符会占用更多内存吗?从一种方式到另一种方式还有其他优点吗?
编辑: 这是我的意思的一个例子:
using namespace std;
char operation;//or string
cout << "enter the operator (+/=):" << endl;
cin >> operation;
if (operation == '+') {
//do something
}
else {
//do something else
}
答案 0 :(得分:3)
char
只需一个字节
std::string
至少需要sizeof(std::string)
个字节,在现代PC上可能是24个字节。
在您的情况下,保存的内存很可能并不重要(因为保存将非常小,可能是23个字节),因此您应该坚持最佳描述您的意图。如果你需要一个字符,那么单个char
就有意义了。
答案 1 :(得分:2)
根据定义,什么占用更多内存,将单个字符存储为char或string?
char
是系统上最小可寻址存储器单元的大小。因此,没有任何对象可以占用更少的内存。
String是一系列字符。单个元素数组的内存与单个元素完全相同:
char c = 'a';
char str[] = {'a'};
assert(sizeof c == sizeof str);
但是,大多数字符串的使用要求字符串由空字符终止。只有一个字符串包含空终止符,并且适合单个字符数组:空字符串。
因此,除非用户输入的字符为null,否则字符串必须使用比单个字符更多的内存 - 如果需要将其终止为空。
如果您正在考虑std::string
,除了包含字符本身的缓冲区之外,还包含一些指针(大多数系统上的字节大于)。 (尽管可以优化实现,以便不为小字符串分配外部缓冲区)
一个人还有其他优势吗?
std::string
优于char
的主要优点是前者可以表示任意长度的字符串,而不是单个字符。