能否解引用临时数组?GCC与Clang/MSVC行为差异分析
C++临时数组的解引用问题探讨
void foo() { int arr[1]; *arr; // OK using T = int[1]; *T{}; // OK for Clang and MSVC // GCC error: taking address of temporary array }
上述代码中,*arr可正常编译,但*T{}在Clang和MSVC中能通过编译,却会触发GCC报错:taking address of temporary array。
我的直觉是*T{}应触发数组到指针的转换,这个间接操作合法,但对此并不完全确定。现提出以下技术疑问:
- GCC的报错行为是否正确?
- 这是编译器的bug还是有意设计以避免开发者犯错?
- 毕竟通常不会解引用数组,该行为是否有相关文档记载?
| 免责声明 |
|---|
CWG Issue 2548已确认:“目前通过数组prvalue(纯右值)进行间接操作也是无效的”。@StoryTeller的回答有误,错误解读了destination type的含义,认为其适用于*T{},但该表达式并非指针初始化。 |
更多讨论见编辑问题:EDIT 6555的内容
内容的提问来源于stack exchange,提问作者Jan Schultke
相关产品推荐
相关产品推荐

