提出这个问题的最简单方法是使用一些代码:
struct Point { int x; int y; int z; int* as_pointer() { return &x; } // works int (&as_array_ref())[3] { return &x; } // does not work };
as_pointer编译,as_array_ref不编译.演员似乎是有序的,但我无法弄清楚合适的语法.有任何想法吗?
解决方法
我发现使用typedef更容易处理数组类型:
typedef int ints[3];
然后必须写入as_array_ref,以便& as_array_ref()==& x.
以下语法是可能的:
>从int *到ints的纯C样式转换*:
整型和放大器; as_array_ref(){return *((ints *)(& x)); }
> C风格reinterpret_cast(由@Mike Seymour建议 – 另见他的回答).它通常被认为是C语言中的一种更好的做法:
整型和放大器; as_array_ref(){return * reinterpret_cast< ints *>(& x); }
>来自int& tots&这稍微短一点,但(对我来说)不那么直观:
整型和放大器; as_array_ref(){return reinterpret_cast< ints&>(x); }