假设我有一个struct(或类)动态数组,它的长度和构造函数:
struct array {
int l;
int* t;
array(int length);
};
array::array(int length) {
l=length;
t=new int[l];
}
Run Code Online (Sandbox Code Playgroud)
我假设到目前为止所有内容都是合法的:这就是我写它的方式(尽管它可能不是唯一的方法),但是我看到了下面的代码,它似乎有点起作用:
struct array {
int l;
int* t = new int[l];
array(int length);
}
array::array(int length) {
l=length;
}
Run Code Online (Sandbox Code Playgroud)
它看起来很糟糕,所以我想知道这是出于纯粹的运气和未定义的行为,还是有一些内部规则可以使这段代码正常工作.
我试图在C++中获取引用(我想我已经在Java和Javascript中得到它,但转换比我想象的更难).这是一段代码,其结果我不明白:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> x;
x.push_back(1);
std::vector<int> y;
y.push_back(2);
std::vector<int>& r=x;
r.push_back(3);
std::vector<int>& s=r;
s.push_back(4);
s=y;
r.push_back(5);
s.push_back(6);
std::cout<<"x: ";
for(int i: x) {std::cout<< i<< " ";} std::cout<<"\n";
std::cout<<"y: ";
for(int i: y) {std::cout<< i<< " ";} std::cout<<"\n";
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出(使用g ++ 4.9.2):
x:2 5 6
y:2
我不明白这一点:元素1,3,4的变化是什么?我原以为x为1,3,4,5,y为2,6.拥有整数向量的事实是否会产生影响?