g++编译器对字符串数组和整数数组的看法不同吗?
Does the g++ compiler view arrays of strings and integers differently?
我似乎无法获得函数内部声明的字符串数组。
void foo(string arr[], int arrSize) {
string temp[arrSize]; //Results in error shown below
int temp2[arrSize]; // Compiles fine
}
我得到一个编译时错误,指出:非pod元素类型的可变长度数组'string'(又名'basic_string, allocator>')…[a…
我试过将arrSize参数声明为void foo(string arr[], const int arrSize);
的常量,甚至在函数内部声明一个新的常量整数,并将其初始化为arrSize,但两者仍然会导致相同的错误。我能够编译这个的唯一方法是在声明我的临时字符串数组时使用一个幻数。
同时,我知道我可以使用一个向量来代替,但是我只是想知道为什么会发生这种行为。
提前感谢您的帮助!
是的,它以不同的方式对待它们。从错误消息中可以看到,只有当元素是POD类型时,g++才允许创建可变长度数组。
至于为什么我不确定是否有技术上的原因,但由于这是一个从C继承来的非标准扩展,一个可能的解释是,为C兼容结构实现它是微不足道的(这就是POD本质上是什么),没有人费心将其扩展到非POD类型。
对评论的回应:std::string
不仅仅是一个字符数组,而是一个更复杂的类,可以在堆的某个地方分配数据(就像std::vector<int>
不仅仅是一个整数数组)。
更新:论文中一个有趣的数据点,建议为c++提供具有自动存储持续时间的运行时大小的数组:
没有理由将该特性限制为PODs作为数组元素类型,因此不建议这样的限制。
所以这似乎真的是一种情况:"没有人来真正实现它"
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '