c ++

时间:2018-01-04 06:32:09

标签: c++ arrays c++98

注意:C ++ 98是唯一可用的标准

我正在尝试创建一个大型数组,以便在运行时用作查找表,但我在编译时知道所有表信息。从概念上讲,我知道我可以通过静态分配节省大量的运行时间,但是我在使用C ++语法方面遇到了一些麻烦。

或者,简单地说,我正在寻找正确的方法来做

的班级版本
const int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

在编译时知道我想要存储在对象数组中的所有内容,以获得尽可能多的节省。

以下是我的课程类

的示例
class foo{
  private:
    const int a;
    const char * b;
  public:
    foo(const int a, const char * b);
    int get_a(void) const{
      return this->a;
    }
    const char * get_b(void) const{
      return this->b;
    }
};

foo::foo(
         const int a,
         const char * b
       ) :
          a(a),
          b(b){
}

可以使用此主

运行
//Is this array statically allocated at compile time or dynamically allocated at run time with the constructors of foo?
foo arr[2]={
  foo(0,"b0"),
  foo(1,"b1")
};

int main(void){
  for(int i=0;i<2;i++){
    std::cout<<arr[i].get_a()<<std::endl;
    std::cout<<arr[i].get_b()<<std::endl;
  }
  return 0;
}

2 个答案:

答案 0 :(得分:2)

数组arr在编译时静态分配,但无论是在编译时还是在运行时初始化,编译器之间都可能不同。可以肯定的是,您的编译器在运行时初始化数组,但是如果构造函数足够简单,那么编译器可以使用编译时初始化而不是运行时初始化。

在C ++ 11及更高版本中,您可以将foo的构造函数声明为constexpr,以使编译器在编译时初始化arr

答案 1 :(得分:0)

没有办法确定初始化发生的时间。要使用编译器进行检查,可以在构造函数中设置断点并在发布模式下运行它。