小编use*_*991的帖子

如何将constexpr变量作为声明来声明(内置)数组?

我在想象下面的场景:从一个空向量开始,向它推送一些int,然后使用它的大小来声明一个内置数组.

  vector<int> vec;      /* default init'ed */

  for(decltype(vec.size()) i = 0; i != 10; ++i){
    vec.push_back(i);
  }


  constexpr size_t sz = vec.size();
  int arr[sz] = {};     /* list init, left out elem's are 0 */
Run Code Online (Sandbox Code Playgroud)

这个程序对我来说很直观(作为初学者).但它失败了以下消息:

testconstexpr2.cpp:22:34: error: call to non-constexpr function ‘std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’
testconstexpr2.cpp:23:13: error: size of array ‘arr’ is not an integral constant-expression
Run Code Online (Sandbox Code Playgroud)

我宁愿坚持使用内置数组,然后再去处理std :: array或dynamic array alloc.

c++ arrays initialization vector constexpr

4
推荐指数
1
解决办法
1072
查看次数

列出数组未转换为指向单个元素的指针时的所有情况?

到目前为止,我遇到了3种情况,其中数组保持为数组:(假设int arr[3][4];)

  1. sizeof(arr):给出总大小(不是一个元素)
  2. &arr + 1:按地址大小推进地址
  3. 绑定对范围内的内部数组的引用:

//

   for(const auto &row : arr)
       for(auto col : row)
           cout << col << endl;
Run Code Online (Sandbox Code Playgroud)

问题:这是否会耗尽所有未将数组转换为指向单个元素的指针的情况?如果没有,是否有系统的方法来决定它?

c++ arrays pointers

2
推荐指数
1
解决办法
109
查看次数

是否直接初始化禁止数组?

语言律师明智,标准中的哪个条款禁止下面的代码:

int arr[] (10, 42); 
Run Code Online (Sandbox Code Playgroud)

这将产生一个由10个元素组成的数组,每个元素都被初始化为42个元素.

c++ arrays initialization language-lawyer

-1
推荐指数
1
解决办法
162
查看次数