返回整数文字副本的函数
int number()
{ return 1; }
使用关键字constexpr
可以轻松地将转换为普通的编译时表达式。
constexpr int number()
{ return 1; }
然而,当涉及到字符串文字时,我感到困惑。通常的方法是返回指向字符串文字的const char
指针
const char* hello()
{ return "hello world"; }
但我认为仅仅将“const”更改为constexpr
并不是我想要的(作为奖励,它还会产生编译器警告不赞成从字符串常量转换为'char *'使用gcc 4.7.1)
constexpr char* hello()
{ return "hello world"; }
有没有办法以这样的方式实现hello()
,以便在下面的示例中使用常量表达式替换调用?
int main()
{
std::cout << hello() << "\n";
return 0;
}
答案 0 :(得分:9)
const
和constexpr
为not interchangeable,在您的情况下,您不想删除const
,但是您想添加constexpr
,如下所示:< / p>
constexpr const char* hello()
{
return "hello world";
}
删除const
时收到的警告,是因为字符串文字是array of n const char
,因此指向字符串文字的指针应该是一个* const char **但是在 C 中字符串文字是一个char数组,即使它是未定义的行为来尝试修改它们也是为了向后保留兼容性但折旧,所以应该避免。
答案 1 :(得分:2)
强制constexpr评估:
constexpr const char * hi = hello();
std::cout << hi << std::endl;