gpt4 book ai didi

C++用变量而不是常量表达式初始化数组

转载 作者:行者123 更新时间:2023-11-30 01:39:35 29 4
gpt4 key购买 nike

我目前正在学习 C++,并且一直在阅读C++ Primer(第 5 版)

在第 3.5 章讨论数组和初始化它们时,它说数组必须使用常量表达式进行初始化。

这是书中的例子

unsigned cnt = 42; // not a constant expression
constexpr unsigned sz = 42; // constant expression
int arr[10]; // array of ten ints
int *parr[sz]; // array of 42 pointers to int
string bad[cnt]; // error: cnt is not a constant expression
string strs[get_size()]; // ok if get_size is constexpr, error otherwise”

Excerpt From: Stanley B. Lippman. “C++ Primer, Fifth Edition.”

然而,当我使用 g++ -std=c++11 尝试这个时,一切都编译得很好。因此,我有点困惑,这是否只是书中的一个错误,或者自本书撰写以来标准是否已被修改,尽管该书声称它使用 C++ 11。

这是我正在使用的实际代码,它可以完美地编译和运行

unsigned int cnt = 42; // not constant expression
constexpr unsigned int sz = 42; // constant expression

int arr[10]; // array of 10 ints
int *parr[sz]; // array of 10 int pointers
string bad[cnt];

我什至尝试过这样的事情

int var = 2;
int size = var;
int int_arr[size];

这也行。

如果有人有解释或为什么这有效,即使它声明它不应该,我将不胜感激。

谢谢!

最佳答案

可变长度数组是 C++11 编译器内置的扩展,不是标准的,如果您使用 -Wvla 标志编译,您将看到编译器为您的代码发出错误.

您最好使用 std::vector 代替动态数组。如果您不熟悉如何使用它们,我建议您在线查看。有很多很好的资源详细介绍了如何使用 std::vector 及其工作原理。

关于C++用变量而不是常量表达式初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363589/

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