c++中除了数组以外的所有东西都默认按值传递吗?
Everything but arrays in c++ are passed by value by default?
c++ 中的所有内容,包括 STL 容器,都是按值传递的。但例外是通过指针传递的数组。对吗?
为什么 C++ 中的数组 [eg: int a[5] ] 是通过指针传递的,而向量是通过值传递的? [默认]
编辑:好的,std::array
也可以按值传递,我不知道这一点。
代码:
void fun_array(int a[])
{
a[0]=10;
}
void fun_vector(vector<int> v)
{
v[0]=10;
}
int main()
{
int a[5]={1,2,3,4,5};
vector<int> v={1,2,3,4,5};
fun_array(a);
fun_vector(v);
cout<<a[0]<<" "<<v[0];
}
输出:10 1
如果您不另行指定,则所有内容均按值传递。 C 数组的情况并非例外,只是它们退化为指针。如果您需要在 C++ 代码中使用固定大小的数组,则更喜欢使用 std::array
而不是 C 数组。
然后决定是按值还是按引用传递。
相关说明:即使在传递容器时,您可能仍希望按值传递,而不是按引用传递,如果您要复制容器。
默认情况下 C++ 中的所有 函数参数都是按值传递的。
你的困惑来自这样一个事实,即数组的名称实际上是指向数组第一个元素的指针(例如,对于数组 int a[6]
,a
是指向 a[0]
.
除非函数参数明确地是对指针的引用,否则即使是指针参数也是按值传递的。
c++ 中的所有内容,包括 STL 容器,都是按值传递的。但例外是通过指针传递的数组。对吗?
为什么 C++ 中的数组 [eg: int a[5] ] 是通过指针传递的,而向量是通过值传递的? [默认]
编辑:好的,std::array
也可以按值传递,我不知道这一点。
代码:
void fun_array(int a[])
{
a[0]=10;
}
void fun_vector(vector<int> v)
{
v[0]=10;
}
int main()
{
int a[5]={1,2,3,4,5};
vector<int> v={1,2,3,4,5};
fun_array(a);
fun_vector(v);
cout<<a[0]<<" "<<v[0];
}
输出:10 1
如果您不另行指定,则所有内容均按值传递。 C 数组的情况并非例外,只是它们退化为指针。如果您需要在 C++ 代码中使用固定大小的数组,则更喜欢使用 std::array
而不是 C 数组。
然后决定是按值还是按引用传递。
相关说明:即使在传递容器时,您可能仍希望按值传递,而不是按引用传递,如果您要复制容器。
默认情况下 C++ 中的所有 函数参数都是按值传递的。
你的困惑来自这样一个事实,即数组的名称实际上是指向数组第一个元素的指针(例如,对于数组 int a[6]
,a
是指向 a[0]
.
除非函数参数明确地是对指针的引用,否则即使是指针参数也是按值传递的。