C++变量数组
C++ Variable Array
我正在尝试编写一个用于处理极长消息的套接字系统(它处理聊天系统)。我正在尝试使用 const int 来初始化一个数组,它确实可以编译,但我被警告 ISO C++禁止它。有人可以阐明情况吗?
这是如何使用它的一个例子(这是为了避免编写一个字节剩余的多接收系统(我已经有了,但我觉得这会更有效))。
const int BUFFERLEN = atoi(api_GETVALUE(1,inbuffer).c_str()); //that is my API call
if(BUFFERLEN != -1) { //it returns "-1" on error
char INBUFFER[BUFFERLEN];
recv(SOCK,INBUFFER,sizeof(INBUFFER),0);
}
这是可以接受的,还是我应该坚持使用多接收直到完成的方法?
谢谢科林
const int BUFFERLEN = atoi(api_GETVALUE(1,inbuffer).c_str()); //that is my API call
if(BUFFERLEN != -1) { //it returns "-1" on error
std::vector<char> INBUFFER(BUFFERLEN);
recv(SOCK,INBUFFER.data(),INBUFFER.size(),0);
}
使用 C++ 数组时,必须在编译时知道大小。否则,需要使用动态分配。 const
并不一定意味着BUFFERLEN
是编译时常量。
我正在尝试使用 const int 来初始化一个数组,该数组确实可以编译,但我被警告 ISO C++禁止它。有人可以阐明情况吗?
这是因为程序中的const int
实际上不是常量表达式(编译时已知的值),这意味着程序中声明的数组是可变长度数组(VLA),这在ISO C++中是不允许的。程序之所以编译,是因为编译器提供 VLA 作为扩展。
您可以使用的内容称为 std::vector<char>
.
所以代替,
char INBUFFER[BUFFERLEN]; //old code
您可以使用
std::vector<char> INBUFFER(BUFFERLEN); //new code
而不是,
recv(SOCK,INBUFFER,sizeof(INBUFFER),0); //old code
你可以写:
recv(SOCK, &INBUFFER[0], INBUFFER.size(),0); //new code
C++ 98 不允许可变长度数组。你的int是一个"const"并不重要,因为大小不能提前确定。围绕 char* 创建一个包装器来管理其自身内存的分配和取消分配是一个可接受的解决方案。
相关文章:
- 具有推导参数的模板函数指针数组变量
- 按字母顺序对结构内数组变量中的名称进行排序
- 传递 std::数组变量作为参数
- 为什么数组变量正在更新
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 数组变量中更多变量或更多维度?
- 数组变量周围的堆栈已损坏
- 数组变量衰减为指针
- C++ 无法将字符数组变量分配给字符串变量
- 使用指针变量打印特定的数组变量
- 数组变量是C++中的引用吗?
- 数组变量未正确分配以进行循环
- 在 c++ 中向数组变量添加一个数字
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 指针和 c 样式数组变量的专用模板
- 堆栈数组变量清理
- 如何从DLL检索数组变量?(视觉C )
- 如何将初始值设定项与右值引用参数一起使用 // 为什么不能使用另一个 C 样式数组变量初始化 C 样式数组
- 更改了错误的数组变量