2 zay999abc zay999abc 于 2015.06.15 20:39 提问

constexpr存在的意义是是什么?

书上这样说:
1.c++11新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。
2.一般来说,如果你认为变量是一个常量表达式,那就把它声明为constexpr类型。
没看懂这些话,没理解constexpr到底有什么作用,求解。

4个回答

oyljerry
oyljerry   Ds   Rxr 2015.06.15 20:46

以前只有const常量变量,而constexpr是可以定义常量表达式,可以编译时计算常量表达式。

gamefinity
gamefinity   Rxr 2015.06.15 20:55
gamefinity
gamefinity 也就是说,第一为了效率,第二为了使用方便。
2 年多之前 回复
exuse
exuse   2015.06.16 17:16

比如
int sth(){
return 4;
}
const int n=sth();
本来这样的代码是不能通过编译的,因为编译器无法确定sth()得到的是不是常量,但改为
constexpr int sth(){
return 4;
}之后,由于明确指出了函数的返回值是常量,于是编译器就找到信心了。
这样做的目的我觉得是加强安全性和可靠性吧

exuse
exuse 你敢保证一个自以为是常量的表达式得到的一定是个常量吗?换个例子吧: const int n=f(object.getsth(5)+1); 如果没有constexpr,编译器不可能会在编译期把后面的结果算出来,即便它就是常量 我只是想说,constexpr是为了明确指出一个表达式代表的是一个常量,而不会变成其他莫名其妙的东西
2 年多之前 回复
exuse
exuse VC不可以,以前的G++也不可以,现在只不过是遇到这样的代码时编译器帮你自动加上constexpr了,并不是说这样写是合法的
2 年多之前 回复
zay999abc
zay999abc 你说这样的代码不能通过编译?你可以自己试试。。。
2 年多之前 回复
zhangweilst
zhangweilst   2015.06.19 12:30

还没听过constexpr,学习了。。

Csdn user default icon
上传中...
上传图片
插入图片