我想在类中定义一个常量,该值是最大可能的int.像这样的东西:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
Run Code Online (Sandbox Code Playgroud)
此声明无法使用以下消息进行编译:
numeric.cpp:8:错误:"的std :: numeric_limits :: MAX()"不能出现在一个常数表达式numeric.cpp:8:错误:一个函数调用不能出现在一个常数表达式
我理解为什么这不起作用,但有两件事对我来说很奇怪:
在我看来,在常量表达式中使用该值是一个自然的决定.为什么语言设计者决定使max()成为一个函数,从而不允许这种用法?
该规范在18.2.1中声称
对于在numeric_limits模板中声明为static const的所有成员,特化应以这样的方式定义这些值,使它们可用作整型常量表达式.
这不是说我应该能够在我的场景中使用它而不是它与错误信息相矛盾吗?
谢谢.
该标准是否指定了官方C++语法?
我搜索过,但没找到任何地方.
另外,我希望详细阅读一些关于C++语法的内容,比如它所属的语法类别等等.任何指向正确方向的链接都会有所帮助.
按类别,我的意思是
取自这里.
c++ standards grammar context-free-grammar chomsky-hierarchy