相关疑难解决方法(0)

为什么C++程序员应该尽量减少"新"的使用?

在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:

停止使用new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.

我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?

c++ heap memory-management c++-faq new-operator

833
推荐指数
13
解决办法
12万
查看次数

C++编译器中的可变长度数组(VLA)

我们已经知道,VLA(在C99中标准化)不是C++标准的一部分.

所以下面的代码在C++中是"非法的":

void foo(int n) {
  int vla[n];
  for (int i = 0; i < n; ++i) {
    vla[i] = i;
  }
}
Run Code Online (Sandbox Code Playgroud)

尽管编译器(g ++clang ++)接受代码作为有效语法,但只有启用情况下才会生成警告 .-pedantic

ISO C++禁止变长数组'vla'[-Wvla]

我的问题是:

  • 为什么编译器接受该声明?
    编译器不能只拒绝一个长度为的数组[is-no-know-at-compile-time]
    是否存在一种兼容性语法规则?

  • 标准说了什么?
    从生成的汇编代码中我看到编译器在循环中写入堆栈,就像普通数组一样,但我找不到任何关于标准行为的信息.

c++ dynamic-arrays

9
推荐指数
2
解决办法
1565
查看次数