【发布时间】:2014-08-31 19:56:49
【问题描述】:
我写了一个返回数组的 constexpr 函数。
#include <iostream>
constexpr auto get_str(void)
-> const char(&)[4] {
return { 'T', 'E', 'S', 'T' };
}
constexpr int sum(const char(&str)[4]){
return str[0] + str[1] + str[2] + str[3];
}
int main(void){
constexpr int s = sum(get_str());
std::cout << s << std::endl;
return 0;
}
g++ 4.8 可以正确编译代码,但会发出以下警告:
test.cpp: In function ‘constexpr const char (& get_str())[4]’:
test.cpp:5:30: warning: returning reference to temporary [-Wreturn-local-addr]
return { 'T', 'E', 'S', 'T' };
在这种情况下警告是否正确?从这样的 constexpr 函数返回数组是否不正确,即使该函数从未在运行时实际调用,仅在编译期间调用?
【问题讨论】:
-
你可以使用
std::array<char,4>按值返回一个constexpr静态数组,而不是返回一个引用。 -
@MikaelPersson 谢谢,我曾一度尝试使用 std::array,但我的完整代码正在做一些奇怪的事情,需要在编译时转换为 const char*,但我做不到&arr[0] 在常量表达式中。
标签: c++ arrays gcc constexpr gcc-warning