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,但两者仍然会导致相同的错误.我能够编译的唯一方法是在声明我的临时字符串数组时使用幻数.
另外,我知道我可以使用向量代替,但我只是想知道为什么会发生这种行为.
在此先感谢您的帮助!
是的,它以不同的方式对待它们.正如您从错误消息中看到的那样,只有元素是POD类型时,g ++才允许创建可变长度数组.
至于为什么我不确定是否有技术原因,但由于这是从C继承的非标准扩展,一个可能的解释是,为c兼容结构实现它是微不足道的(这是什么POD基本上是)并且没有人愿意将其扩展到非POD类型.
响应注释:A std::string
不仅仅是一个字符数组,而是一个更复杂的类,它可以在堆上的某个地方分配数据(就像std::vector<int>
不仅仅是一个int数组).
更新:本文提出的一个有趣的数据点,提出了具有 c ++ 自动存储持续时间的运行时大小的数组:
没有理由将特征限制为POD作为数组元素类型,因此不提出这样的限制.
所以它似乎真的是这样一个例子:"没有人来实际实现它"
归档时间: |
|
查看次数: |
99 次 |
最近记录: |