C++ C++;将数据分配给类似数组的初始化
为什么我们可以用C++ C++;将数据分配给类似数组的初始化,c++,C++,为什么我们可以用 int a[]={1,2,3}; 但我们无法将数据分配给现有阵列 a = {2,3,4}; ? 是否可以创建一个以常量数组为参数的函数,并调用它以在一行中分配变量 伪代码: int a[] = {1,2,3}; myfunc(a, (int){2,3,4}); void myfunc(int &array1, const int array2) { copy(array2,array1); } 因为C-array不能做到这一点。 C数组没有可用的赋值运算
int a[]={1,2,3};
但我们无法将数据分配给现有阵列
a = {2,3,4};
?
是否可以创建一个以常量数组为参数的函数,并调用它以在一行中分配变量
伪代码:
int a[] = {1,2,3};
myfunc(a, (int){2,3,4});
void myfunc(int &array1, const int array2)
{
copy(array2,array1);
}
因为C-array不能做到这一点。 C数组没有可用的赋值运算符。 理性纯粹是历史的。首先,当时的记忆非常有限。创建一个易于复制阵列的功能被认为是内存和时间的一个腰围,所以它不是一个优先事项。事实上,确保数组通过指针传递(更重要的是不通过值)更重要,这就是为什么C和C++中的数组会退化为指针值。当时大多数其他语言也没有这种能力。后来,向后可比性开始流行,而这种特征从未被引入 在可能的情况下,使用更现代的
std::array
std::数组a{1,3,4,-2};
a={-4,-2,0,0};
因为C-array无法做到这一点。 C数组没有可用的赋值运算符。 理性纯粹是历史的。首先,当时的记忆非常有限。创建一个易于复制阵列的功能被认为是内存和时间的一个腰围,所以它不是一个优先事项。事实上,确保数组通过指针传递(更重要的是不通过值)更重要,这就是为什么C和C++中的数组会退化为指针值。当时大多数其他语言也没有这种能力。后来,向后可比性开始流行,而这种特征从未被引入 在可能的情况下,使用更现代的
std::array
std::数组a{1,3,4,-2};
a={-4,-2,0,0};
是的,您可以编写一个函数模板来推断数组的大小
template<size_t N>
void myfunc(int (&a)[N], int const (&b)[N])
{
std::copy(b, b + N, a);
}
模板
void myfunc(整型(&a)[N],整型常量(&b)[N])
{
标准::副本(b,b+N,a);
}
请注意,这允许根据需要从brace init列表推导第二个参数。另外一个优点是,您不会弄错尺寸
现在您可以在一行中复制
int main()
{
int a[] = {1,2,3};
for (auto i : a)
std::cout << i; // 1 2 3
myfunc(a, {2,3,4});
for (auto i : a)
std::cout << i; // 2 3 4
myfunc(a, {2,3,4,5}); // error, as it should be
}
intmain()
{
int a[]={1,2,3};
用于(自动i:a)
是的,您可以编写一个函数模板来推断数组的大小
template<size_t N>
void myfunc(int (&a)[N], int const (&b)[N])
{
std::copy(b, b + N, a);
}
模板
void myfunc(整型(&a)[N],整型常量(&b)[N])
{
标准::副本(b,b+N,a);
}
请注意,这允许根据需要从brace init列表推断第二个参数。另一个优点是,您不会得到错误的大小
现在您可以在一行中复制
int main()
{
int a[] = {1,2,3};
for (auto i : a)
std::cout << i; // 1 2 3
myfunc(a, {2,3,4});
for (auto i : a)
std::cout << i; // 2 3 4
myfunc(a, {2,3,4,5}); // error, as it should be
}
intmain()
{
int a[]={1,2,3};
用于(自动i:a)
std::cout数组被视为常量指针,而常量不是assignable@asmmo事实并非如此。数组既不是[固有]常量,也不是[永远]指针。数组被视为常量指针,而常量不是assignable@asmmo事实并非如此。数组既不是[固有的]常量,也不是[永远的]指针。这并不能真正回答为什么。C++可以拥有它,为什么C没有它呢?但是,它并不能真正回答为什么。C++可以拥有它,为什么C没有它?有可能自动调整数组到不同数量的值吗?不。数组的大小是它的一部分。它必须在编译时知道,不能是C。在程序期间挂起。是否可以将数组自动调整为不同数量的值?否。数组的大小是其类型的一部分。它必须在编译时已知,并且在程序期间不能更改。