You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否解引用临时数组?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:35:22