我正在尝试通过初始化列表将字符串文字数组传递给仅接受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"}));
海湾合作委员会停止抱怨。为什么?
答案 0 :(得分:3)
代码正确; argType{"a","b"}
是类型const char *[2]
的prvalue(C ++ 17 [expr.type.conv] / 2),并且数组到指针的转换可以应用于数组prvalue([conv。数组] / 1),它对prvalue进行临时实现,并且该临时过程持续到完整表达式的结尾。
所以我认为这是一个gcc错误。