将参数传递给函数,该函数将自动转换为指针
Passing an argument to a function that gets automatically converted to a pointer
注意:我使用的是g++编译器(我听说它非常好,应该非常接近标准(。
所以,我想我已经了解到,将指针传递给一个数组,或者将实际数组作为参数传递给另一个函数,总是会导致将指针传递到该数组。
类似地,我想我已经了解到,传递一个指针对函数或将实际函数作为参数传递给另一个函数总是会导致传递指向该函数的指针。
是否可以传递数组的副本(而无需在被调用函数内显式生成数组的副本(?
是否可以传递函数的副本(而无需在被调用函数内显式生成函数的副本(?这有用吗?这到底意味着什么?
我理解传递数组和它的副本之间的区别;传递函数和传递其副本有什么区别?
C不允许按值传递数组,也不允许更普遍地复制数组(除非手动(。C++继承了这一点,所以不,这是不可能的。更好的方法是使用std::array
(对于C++0x;boost::array
是相同的,并且可用于C++03(,这是一种可复制的类型,可以通过值传递。
int i[] = { 1, 2, 3 }; // type is int[3]
int j[3] = i; // error: can't copy an array
// C style would be to let j unitialized and to copy the values of
// i individually:
// int j[3]; std::copy(i, i + 3, j);
std::array<int, 3> ii = {{ 1, 2, 3 }};
std::array<int, 3> jj = ii; // Okay
在这两种语言中都不可能复制函数,与数组不同的是,也不可能"手动"复制复制函数"在这些语言中没有意义。
是否可以传递函数的副本(无需显式在被调用函数内复制函数(?是吗有用吗?这到底意味着什么?
"复制函数"在哪种语言中有意义?
Lua允许读取函数的字节码,并且可以在以后的某个点(或者在另一个解释器中(重用它来重构函数。我还假设,在适当的情况下,Lisp可以用它的代码即数据方法做同样的事情。请注意,在这两种语言中,这样做并不常见,也不习惯称之为"复制函数"。
从int i = j;
的意义上讲,这类事情是较少的复制——i
是一个副本,但通常更接近编组/序列化的概念。也就是说,将运行时数据*转换为可以存储和/或传输(例如,通过网络(的更持久的形式。
*:在这些语言中(以及其他语言中(,与C和C++不同,函数是数据。
(1( 是否可以传递数组的副本(无需显式生成被调用函数内数组的副本(?
在C++中,您可以通过引用传递:
int a[100];
foo(a);
现在foo()
将是
void foo (int (&arr)[100])
{
}
因此,在这里您不制作a
的副本,但您仍然可以在foo()
内部使用它,使用与在外部使用它相同的规则。
编辑:如果您想按值传递数组而不进行显式复制,那么您可以考虑将其放入struct
包装中并传递:
struct Array { int a[100]; } myArr;
foo(myArr);
void foo(Array myArr);
(2( 是否可以传递函数的副本(无需显式在被调用函数内复制函数(?是吗有用吗?这到底意味着什么?
同样的事情,你可以通过引用传递。就其有用性而言,在大多数情况下,它可以像函数指针一样有用。但这在C++中并不常见。
void foo (int i) {}
typedef void (pf)(int);
void pass (pf &ptr)
{
ptr(0);
}
int main ()
{
pass(foo);
}
编辑:如果您想制作如上所述的副本,那么否在函数的情况下是不可能的。因为它没有用。
- 如何使用Rcpp将R函数转换为C++函数
- C++函数转换为 C# 函数
- 将 C 函数转换为 C++ 以检查数字是否有效
- C++:从重载函数转换为 std::function
- 将 C 函数转换为C++语言
- C++隐式构造函数转换,后跟类型向上转换
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 如何将函数转换为 lambda 函数
- 自定义函数转换错误?
- 将 C# 哈希函数转换为C++
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- 加快 R 性能或将 R 函数转换为C++函数
- 将成员函数转换为指向成员函数的指针
- 将MATLAB炒作函数转换为C
- Rcpp - 用二进制函数转换数字向量?
- C lambda函数转换误差
- 此语法中的构造函数转换错误
- 将函数转换为find_if lambda