相关疑难解决方法(0)

为什么使用alloca()不被视为良好做法?

alloca()在堆栈上而不是在堆上分配内存,如同的情况一样malloc().所以,当我从例程返回时,内存被释放.所以,实际上这解决了我释放动态分配内存的问题.释放分配的内存malloc()是一个令人头痛的问题,如果不知何故错过会导致各种内存问题.

alloca()尽管有上述特征,为什么不鼓励使用?

c malloc stack allocation alloca

381
推荐指数
18
解决办法
12万
查看次数

使用非常量变量声明数组大小

我一直认为在C++中声明一个数组时,大小必须是一个常量整数值.

例如 :

int MyArray[5]; // correct
Run Code Online (Sandbox Code Playgroud)

要么

const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
Run Code Online (Sandbox Code Playgroud)

int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Run Code Online (Sandbox Code Playgroud)

以下是Bjarne StroustrupC++编程语言中的解释:

数组的元素数量(数组绑定)必须是常量表达式(§C.5).如果需要变量边界,请使用向量(§3.7.1,§16.3).例如:

void f(int i) { 
   int v1[i];          // error : array size not a constant expression
   vector<int> v2(i);  // ok 
} 
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,上面的代码在我的系统上编译得很好!

这是我试图编译的内容:

void f(int i) {
   int v2[i];
}

int main()
{
   int i = 3;
   int v1[i];
   f(5);
}
Run Code Online (Sandbox Code Playgroud)

我没有错!我正在使用GCC v4.4.0.

有什么我想念的吗?

c++ arrays gcc

28
推荐指数
2
解决办法
3万
查看次数

静态数组VS. C++ 11中的动态数组

我知道这是一场非常古老的辩论,已经在世界各地多次讨论过.但是我在解决在特定情况下我应该使用哪种方法而不是静态和动态数组之间的另一种方法时遇到麻烦.实际上,我没有使用过C++ 11,我会使用静态数组.但我现在感到困惑,因为两者都有相同的好处.

第一解决方案

template<size_t N>
class Foo
{
    private:
        int array[N];

    public:
        // Some functions
}
Run Code Online (Sandbox Code Playgroud)

二解决方案:

template<size_t N>
class Foo
{
    private:
        int* array;

    public:
        // Some functions
}
Run Code Online (Sandbox Code Playgroud)

我不可能选择,因为这两者都有自己的优势:

  • 静态数组更快,我们根本不关心内存管理.
  • 只要未分配内存,动态数组就不会产生任何重量.之后,它们不像静态数组那样方便使用.但是从C++ 11开始,我们可以从移动语义中获得很大的好处,我们不能将它用于静态数组.

我认为没有一个好的解决方案,但我想得到一些建议,或者只是想知道你对这一切的看法.

c++ arrays templates move-semantics c++11

6
推荐指数
1
解决办法
5371
查看次数

C++:为什么 int array[size] 有效?

我已经开始学习 C++。我读到只能在运行之前设置数组的大小,并且可以在运行时设置动态数组。所以我期待这会失败,但它没有:

#include <iostream>

int main() {
    using namespace std;
    int size;
    cout << "enter array size:";
    cin >> size;
    int i, score[size], max; //array size set to variable doesn't fail
    cout << endl << "enter scores:\n";
    cin >> score[0];
    max = score[0];
    for (i = 1; i < size; i++)
    {
        cin >> score[i];
        if (score[i] > max)
    max = score[i];
    }
    cout << "the highest score is " << max << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是最近的 C++ 编译器中的新功能吗?它是否意识到我需要一个动态数组并创建它?

c++ arrays automation dynamic

3
推荐指数
1
解决办法
1528
查看次数

标签 统计

arrays ×3

c++ ×3

alloca ×1

allocation ×1

automation ×1

c ×1

c++11 ×1

dynamic ×1

gcc ×1

malloc ×1

move-semantics ×1

stack ×1

templates ×1