为什么
例如,考虑以下C++代码:
产生以下输出:
我期望它们两个都产生`0123`,或者都产生`4567`,但我不希望一个产生`0123`而另一个产生`4567`。
为什么会出现这种不一致性?
编辑:这个问题不是关于调用哪个默认构造函数,或者它们是否执行不同的操作。它们确实执行了不同的操作,并且调用了不同的构造函数。这个问题是关于为什么它们不做相同的事情。换句话说,这更像是一个哲学问题而不是技术问题。
std::string
构造函数仅依据其所构造的字符串类型不同而产生不同的输出结果?例如,考虑以下C++代码:
#include <iostream>
#include <string>
int main() {
char cstyle[] = "01234567";
std::string std = "01234567";
std::cout << std::string(cstyle, 4) << std::endl;
std::cout << std::string(std, 4) << std::endl;
return 0;
}
产生以下输出:
0123
4567
我期望它们两个都产生`0123`,或者都产生`4567`,但我不希望一个产生`0123`而另一个产生`4567`。
为什么会出现这种不一致性?
编辑:这个问题不是关于调用哪个默认构造函数,或者它们是否执行不同的操作。它们确实执行了不同的操作,并且调用了不同的构造函数。这个问题是关于为什么它们不做相同的事情。换句话说,这更像是一个哲学问题而不是技术问题。
std::string
(更准确地说,std::basic_string
)是在最初的C++标准化工作中设计的,作为C++98的一部分。在标准化工作开始之前,它并不存在。 - Pete Beckerstd::string
(也许是在有std::
之前),但我不记得那个层面上的细节,我怀疑其他人也不记得。我可以想出差异的原因(对 "不同不等于相同" 的扩展),但我不能说那些是实际的原因。请参见 Davis Herring 的答案。 - Pete Becker