gpt4 book ai didi

c++ - 为什么我不能在 struct 中初始化 char 数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:48 24 4
gpt4 key购买 nike

我尝试通过以下方式在结构声明中初始化一个 char 数组。但它无法编译并显示错误消息。请告诉我为什么它无法编译。

#include <iostream>

struct A {
const char value_in_struct[] = "a"; // this line gives me a error message.
};

void t(void) {
const char value[] = "a"; // this line was ok at compiling
std::cout << "value = " << value << std::endl;
}

我从 gcc 收到以下错误消息。

../static_constexpr_array.hpp:16:33: error: initializer-string for array of chars is too long [-fpermissive]
const char value_in_struct[] = "a";
^

谢谢你给我时间。

最佳答案

问题是数组范围不能从类内初始化程序中自动推导出来。 clang 产生的错误消息非常清楚(参见 here ):

prog.cc:4:34: error: array bound cannot be deduced from an in-class initializer
const char value_in_struct[] = "a";
^

这是为什么呢?类内初始化器可以被构造函数的成员初始化器列表覆盖。那么,如果构造函数选择用其他东西初始化数组怎么办?在您的情况下,可以使用大括号括起来的初始化程序列表覆盖初始化程序,如下所示(实际上是聚合初始化)(参见 here ):

A a = {"abc"};

由于无法在编译时确定最终初始化器,因此编译器无法推断出数组范围。

给数组一个明确的范围使代码编译(参见 here )。

#include <iostream>

struct A {
const char value_in_struct[2] = "a";
};

void t(void) {
char value[] = "a";
std::cout << "value = " << value << std::endl;
}

关于c++ - 为什么我不能在 struct 中初始化 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103131/

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