我知道 var names: [String]? {
willSet {
if names == nil {
names = []
}
}
}
是指向函数的指针,但我不知道它们的工作方式有何不同以及我们何时使用void *function()
?
我在装配方面进行了一些研究,以比较它们在幕后工作的方式,看起来它们是相同的。
这是c ++代码:
void *function()
这是我从objdump
收到的汇编指令void *bar(){
std::cout << "bar" << std::endl;
}
void foo(){
std::cout << "foo" << std::endl;
}
int main(void){
foo();
bar();
return 0;
}
答案 0 :(得分:1)
要重复评论中已有的答案,区别在于返回的类型
void foo() { ... }
是一个不返回任何内容的函数,而
void *bar() { ... }
void* bar() { ... } // Identical
返回void
指针。在*
之前或之后交换空格位置在这里没有任何区别,但它可以使返回类型更清楚。当然,确保在这个bar
函数的情况下实际返回一些东西,或者至少会有一个编译器警告,以及未定义的行为。
所以基本上这只是要记住的关键字void
的两个略有不同的含义。如果您不熟悉C ++,那么有大量可访问的书籍也可以为您提供帮助。
答案 1 :(得分:0)
void
不返回任何内容。
void*
返回指向类型未知的内容的指针。这是您通常不希望返回的内容,而是您要返回的对象类型以保证类型安全。您希望使用void*
作为返回类型的唯一地方是处理原始内存时。例如malloc
和new
返回void*
,因为它们的返回值没有类型(由malloc
或new
调用者决定。)
您的bar
函数错误,因为返回类型为void*
,但您不返回任何内容。
答案 2 :(得分:-1)
void不会返回任何内容
void *返回指针
不要浪费时间阅读反汇编列表 - 正确地学习C
不要忽视警告!!!!!!
void *bar(){
std::cout << "bar" << std::endl;
}
你有同样的警告吗?避风港?
我知道void * function()是指向函数的指针
现在你不知道。它不是函数指针。首先学习C或C ++。