C++ 为什么valarray assignment没有根据文档调整受让人的大小?

C++ 为什么valarray assignment没有根据文档调整受让人的大小?,c++,assignment-operator,valarray,C++,Assignment Operator,Valarray,代码: 对于任务: v0.size: 4 v1.size: 0 v0[0]: 2 Segmentation fault 我认为建造师: v1 = v0; 因为你使用的是旧的C++。 从C++11开始,目标的大小将调整为与源匹配。 这就是为什么一些投稿人无法重现您的问题(另外,UB有不可预测的结果)。这也是为什么(尽管免责声明,这只适用于C++11可能很好)。[此问题现已解决。] [C++11:23.6.2.3]valarray分配[valarray.assign] valarray&oper

代码:

对于任务:

v0.size: 4
v1.size: 0
v0[0]: 2
Segmentation fault
我认为建造师:

v1 = v0;

因为你使用的是旧的C++。 从C++11开始,目标的大小将调整为与源匹配。
这就是为什么一些投稿人无法重现您的问题(另外,UB有不可预测的结果)。这也是为什么(尽管免责声明,这只适用于C++11可能很好)。[此问题现已解决。]

[C++11:23.6.2.3]
valarray分配[valarray.assign]

valarray&operator=(const-valarray&v)

1
*此
数组的每个元素都分配了参数数组中相应元素的值。如果
v
的长度不等于
*this
的长度,则在执行赋值之前调整
*this
的大小,使两个数组的长度相同,就像调用
resize(v.size())
一样

2后置条件:
size()==v.size()

但是,在C++03中,您的代码具有未定义的行为。
这就是为什么您的旧工具链会出现分段错误。这也是为什么当这个问题在2003年被提出时,它被认为是无效的,因为当时的实现实际上是一致的

[C++03:23.3.2.2]
valarray分配[valarray.assign]

valarray&operator=(const-valarray&v)

1
*此
数组的每个元素都分配了参数数组中相应元素的值。如果参数数组的长度不等于
*此
数组的长度,则结果行为是未定义的


您使用的是什么平台、编译器、版本、标准库实现等?很好。你确定这是你的输出吗?文本甚至与您传递给
cout
@Bryant的字符串不匹配。显示的输出与代码不对应。@Praetorian:一定是我的实现或其他什么。我在Centos机器上,但我的组织使用的是非常旧的库,等等。g++--版本g++(GCC)4.4.7 20120313(Red Hat 4.4.7-11)等等,我很困惑。有人曾经提出过这一点,但得出的结论是,这是符合标准的。要么这是错误的,要么cppreference.com页面是错误的。(或者在过程中的某个地方发生了一个变化,而这个变化没有反映在cppreference.com页面上)希望我能ping。这是在文章中设置澄清格式的最佳方式。我编辑了它。认为这是正确的格式,因为它与范围构造函数描述的格式相匹配。(所以你现在应该编辑你的答案)更改了样式,现在看起来像是内联版本的差异显示我有使用
valarray
的代码,我一直在使用
gnu++98
c++03
。我真希望我能给你买杯啤酒。@Praetorian/LRiO很高兴看到你在没有帮助的情况下被修好了!
v1 = v0;
valarray<T>& operator=( const valarray<T>& other );
$ g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)