__typeof__

__typeof __()和__typeof()是C语言的特定于编译器的扩展,因为标准C不包含这样的运算符。 标准C要求编译器使用双下划线为语言扩展添加前缀(这也是您不应该为自己的函数,变量等执行此操作的原因)

typeof()完全相同,但是将下划线抛出窗口,理解每个现代编译器都支持它。 (实际上,现在我想到它,Visual C ++可能不会。它确实支持decltype(),它通常提供与typeof()相同的行为。)

所有三个都意味着相同的东西,但没有一个是标准的C,所以符合标准的编译器可以选择使任何意思有所不同。

#include 
using namespace std;
#define min(x,y) ({\
        typeof(x) _x=x;\
        typeof(y) _y=y;\
        (void) (&_x==&_y);\
        _x<_y?_x:_y;})
int main()
{
        int *pvar=NULL;
        typeof(*pvar) var=999;
        typeof(pvar) vvar=&var;
        cout<
999
0x7ffe8a4951cc
a
2
#include 
using namespace std;
int main()
{
        int i=0;
        decltype(i) d=2;
        decltype((i)) dd=d;
        cout<

decltype((variable))(注意是双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身就是一个引用时才是引用

参考:

https://stackoverflow.com/questions/14877415/difference-between-typeof-typeof-and-typeof-objective-c
https://blog.csdn.net/zhanshen2015/article/details/51495273/

你可能感兴趣的:(__typeof__)