g ++编译器是否以不同方式查看字符串和整数数组?

Set*_*eaf 4 c++ arrays string gcc

我似乎无法获得函数内部声明的字符串数组.

void foo(string arr[], int arrSize) {
    string temp[arrSize]; //Results in error shown below
    int temp2[arrSize]; // Compiles fine
}
Run Code Online (Sandbox Code Playgroud)

我得到一个编译时错误,指出:非POD元素类型'string'的可变长度数组(又名'basic_string,allocator>')... [a ...

我已经尝试将arrSize参数声明为常量,void foo(string arr[], const int arrSize);甚至在函数内部声明一个新的常量整数并将其初始化为arrSize,但两者仍然会导致相同的错误.我能够编译的唯一方法是在声明我的临时字符串数组时使用幻数.

另外,我知道我可以使用向量代替,但我只是想知道为什么会发生这种行为.

在此先感谢您的帮助!

Mik*_*eMB 5

是的,它以不同的方式对待它们.正如您从错误消息中看到的那样,只有元素是POD类型时,g ++才允许创建可变长度数组.

至于为什么我不确定是否有技术原因,但由于这是从C继承的非标准扩展,一个可能的解释是,为c兼容结构实现它是微不足道的(这是什么POD基本上是)并且没有人愿意将其扩展到非POD类型.

响应注释:A std::string不仅仅是一个字符数组,而是一个更复杂的类,它可以在堆上的某个地方分配数据(就像std::vector<int>不仅仅是一个int数组).

更新:本文提出的一个有趣的数据点,提出了具有 c ++ 自动存储持续时间的运行时大小的数组:

没有理由将特征限制为POD作为数组元素类型,因此不提出这样的限制.

所以它似乎真的是这样一个例子:"没有人来实际实现它"