【发布时间】:2018-10-29 02:06:39
【问题描述】:
考虑 std::string 和容量
std::string aString = "12345678901234567890";
std::cout << aString.capacity() << std::endl; // capacity is 20
aString.clear();
std::cout << "size: " << aString.size() << std::endl;
std::cout << aString.capacity() << std::endl; // capacity is 20
aString.shrink_to_fit();
std::cout << aString.capacity() << std::endl; // capacity is 15?
std::string newString;
std::cout << newString.capacity() << std::endl; // capacity is 15?
最小容量是 15 个字符吗?有没有办法把它缩小到字符串的实际大小?
【问题讨论】:
-
考虑到今天的主要实现都使用短字符串优化,我不确定你会得到什么好处。
-
您在此处观察到的一切都是实现定义的行为,并且因编译器而异。因此,这绝对没有任何用处。这个特定编译器的实现可能涉及所谓的“短字符串优化”,它允许将最多 15 个字符的字符串存储为
std::string本身的一部分,而不是动态分配。但是,正如我所说,这是一个内部编译器实现行为,你不能依赖它。 -
@SamVarshavchik 这就是我所担心的。 Fwiw,它是 gcc 4.8,-std=gnu++11
-
这并没有解决问题,但是您真的需要
std::endl需要的额外内容吗?’\n’结束一行。 -
我在这里看不到任何需要“担心”的东西。这是一个相当常规的字符串实现。