C ++ 11/14中的static const vs constexpr成员字段?

时间:2016-03-29 10:48:44

标签: c++ templates c++11 c++14 constexpr

这些成员变量之间有什么区别:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
  <li class="menuItem">
    <a href="www.google.com">
						Home
					</a>
  </li>
  <li class="menuItem">
    <a href="www.google.com">
						About
					</a>
  </li>
  <li class="menuItem">
    <a href="www.google.com">
						News
					</a>
  </li>
  <li class="menuItem">
    <a href="www.google.com">
						Gallery
					</a>
  </li>
  <li class="menuItem">
    <a href="www.google.com">
						Media
					</a>
  </li>
  <li class="menuItem">
    <a href="www.google.com">
						Contact
					</a>
  </li>
</ul>

如果我的理解是正确的,我可以使用struct my_class { static const int i = 0; static constexpr int j = 0; }; i作为编译时常量。也就是说,jstd::array<int, my_class::i>都应该有用。

1 个答案:

答案 0 :(得分:8)

积分或枚举类型的成员没有区别(如您的示例所示)。对于所有其他类型,常量表达式require constexpr

  

左值 - 右值转换(4.1),除非它适用于

     
      
  • 一个非整数或枚举类型的非易失性glvalue,它引用一个完整的非易失性const对象   初始化,用常量表达式初始化,或[...]
  •   
  • 一个非易失性glvalue,它引用一个用constexpr定义的非易失性对象,或者引用这种非易失性对象的非易失性对象。   一个对象,或[...]
  •