return void type

在C++ void function()中,如果要提前返回的話,只要加上return;
那麼,是否可以return 一個void function呢? 答案是可以的,以下是C++03標準的摘錄

A return statement with an expression of type “cv void” can be used only in functions with a return type of cv void; the expression is evaluated just before the function returns to its caller.

C++03 6.6.3 The return statement

以下的程式碼皆為合法的C++

void g()
{
}
void h()
{
   return g(); // 這等同於 g(); return;
}
void f()
{
  return void();
}

以上的特性在template中可以如以下應用

class C
{
};

template 
T foo(void) {
  return T();
}

void f1()
{
  return foo();
}

int f2()
{
   return foo();
}

除了上面template的需要,一般是分開寫 f(); return;

return f(); 的作法可用作在API設計上提醒使用者做完某個function後就要返回,減少呼叫完忘記加return的機會。

但是因為C++回傳有型別的限制,這樣的技巧一般會在像javascript這類的語言中使用。

This entry was posted in C++ Language. Bookmark the permalink.

Leave a Reply