C const返回类型函数

use*_*776 1 c const return function

以下代码中的'const'导致了什么行为,特别是强制转换:

const void *foo()
{
   void *bar = NULL;

   // Assign bar to some address here.

   return (const void *)bar;
}
Run Code Online (Sandbox Code Playgroud)

演员是否必要?编译器发出一个警告,表明类型与返回类型不匹配,除非我执行强制转换,但结果行为是否有任何不同?

oua*_*uah 6

演员表不是必需的,甚至是无用的.如果你不投,C不需要任何警告.

您可以char *const char *预期返回值时返回a .对于其他类型也是如此:您可以T *const T *预期时返回a .

C表示return声明:

(C99,6.8.6.4p3)"如果表达式的类型与其出现的函数的返回类型不同,则转换该值,就好像通过赋值给具有函数返回类型的对象一样."

您可以将a指定char *给a const char *(请注意,相反的情况无效).C表示指针分配:

(C99,6.5.16.1p1)"以下之一应该成立:[...]两个操作数都是指向兼容类型的限定或非限定版本的指针,左边指向的类型具有指向类型的所有限定符在右边; [...]"