“void function()”和“void * function()”之间有什么区别?

时间:2017-07-01 09:37:32

标签: c++ pointers assembly

我知道 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;
}

3 个答案:

答案 0 :(得分:1)

要重复评论中已有的答案,区别在于返回的类型

void foo() { ... }

是一个不返回任何内容的函数,而

void *bar() { ... }
void* bar() { ... } // Identical

返回void指针。在*之前或之后交换空格位置在这里没有任何区别,但它可以使返回类型更清楚。当然,确保在这个bar函数的情况下实际返回一些东西,或者至少会有一个编译器警告,以及未定义的行为。

所以基本上这只是要记住的关键字void的两个略有不同的含义。如果您不熟悉C ++,那么有大量可访问的书籍也可以为您提供帮助。

答案 1 :(得分:0)

void不返回任何内容。

void*返回指向类型未知的内容的指针。这是您通常不希望返回的内容,而是您要返回的对象类型以保证类型安全。您希望使用void*作为返回类型的唯一地方是处理原始内存时。例如mallocnew返回void*,因为它们的返回值没有类型(由mallocnew调用者决定。)

您的bar函数错误,因为返回类型为void*,但您不返回任何内容。

答案 2 :(得分:-1)

void不会返回任何内容

void *返回指针

不要浪费时间阅读反汇编列表 - 正确地学习C

不要忽视警告!!!!!!

void *bar(){
        std::cout << "bar" << std::endl;
}

你有同样的警告吗?避风港?

  

我知道void * function()是指向函数的指针

现在你不知道。它不是函数指针。首先学习C或C ++。