【发布时间】:2019-04-01 21:31:19
【问题描述】:
我正在尝试通过初始化列表将字符串文字数组传递给仅接受 const char** 的函数。示例代码如下:
// Example program
void foo(const char **) { }
int main() {
using argType = const char*[];
foo(argType{"a","b"});
}
在 GCC 中无法编译。错误是:
在函数“int main()”中:6:25:错误:获取临时地址 数组
我知道这个参数是一个临时的,在执行这个foo(...) 语句后会被清除。但是为什么这种情况会被编译器认为是错误呢?
现在,如果我在两者之间添加std::move:
foo(std::move(argType{"a","b"}));
GCC 停止抱怨。为什么?
【问题讨论】:
-
郑重声明,Clang 和 MSVC 不会抱怨这两个选项。
-
clang 和 icc 都接受并为两者生成相同的机器代码(启用优化和非空 foo)。所以... gcc 错误可能吗?
标签: c++