gpt4 book ai didi

c++ - 具有非恒定大小的字符串数组的模棱两可的编译?

转载 作者:行者123 更新时间:2023-12-02 09:51:31 27 4
gpt4 key购买 nike

我的mingw64 8.1.0中的gcc编译器不允许编译以下内容,因为var必须是一个常量值:

    int var=3;
string str[var];

int main(){
但是,在main()中执行相同操作不会显示任何错误:
int main(){
int var;
cin >> var;
string str[var];
为什么会有歧义?
我的编译命令很简单: g++ main.cpp这是我在两种情况下开头都包含的标题:
#include <iostream>
#include <string>
#include <sstream>

最佳答案

根据您的编译标志,它们都是“错误的”:
代码:

#include <string>

int i = 3;
std::string s1[i];

int main ()
{
int j = 3;
std::string s2[j];
return 0;
}
g++ -o tmp3 -g -pedantic -Wall tmp3.cpp
tmp3.cpp:4:17: error: array bound is not an integer constant before ‘]’ token
std::string s1[i];
^
tmp3.cpp: In function ‘int main()’:
tmp3.cpp:9:19: warning: ISO C++ forbids variable length array ‘s2’ [-Wvla]
std::string s2[j];
请记住,VLA是“C”功能(在C++中为“不兼容”,仅作为“扩展名”支持),以下是规则:

https://en.cppreference.com/w/c/language/array

Declarator for VLA of unspecified size (can appear in functionprototype scope only) where expression

  • any expression other thancomma operator, designates the number of elements in the arrayqualifiers

  • any combination of const, restrict, or volatilequalifiers, only allowed in function parameter lists; this qualifiesthe pointer type to which this array parameter is transformed


重要的:

Objects of any variably-modified type may only be declared at blockscope or function prototype scope.


这就是第一个例子是“错误”的原因。第二个是“警告”。 VLA必须是堆栈分配的变量。

关于c++ - 具有非恒定大小的字符串数组的模棱两可的编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64308591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com