相关疑难解决方法(0)

为什么C++支持在结构中成员分配数组,但一般不支持?

我理解不支持成员分配数组,因此以下方法不起作用:

int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"
Run Code Online (Sandbox Code Playgroud)

我只是接受了这个事实,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的东西.

但是,以下工作正常:

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Run Code Online (Sandbox Code Playgroud)

该数组num[3]是从其实例中成员分配struct1到其实例中的struct2.

为什么结构支持成员方式的数组,但一般情况下不支持?

编辑:Roger Pate 在结构中的线程std :: string中的注释- 复制/赋值问题?似乎指向答案的大致方向,但我不知道自己确认.

编辑2:许多出色的回应.我之所以选择Luther Blissett,是因为我对这种行为背后的哲学或历史原理很感兴趣,但James McNellis对相关规范文档的引用也很有用.

c c++ arrays struct variable-assignment

82
推荐指数
2
解决办法
7481
查看次数

为什么数组类型对象不可修改?

据说这里

术语可修改的左值用于强调左值允许指定的对象被改变以及被检查.以下对象类型是左值,但不是可修改的左值:

  • 数组类型
  • 不完整的类型
  • const限定类型
  • 结构或联合类型,其成员之一被限定为const类型

因为这些左值不可修改,所以它们不能出现在赋值语句的左侧.

为什么数组类型对象不可修改?写不正确

int i = 5, a[10] = {0};    
a[i] = 1;
Run Code Online (Sandbox Code Playgroud)


而且,什么是不完整的类型?

c arrays lvalue

11
推荐指数
2
解决办法
4158
查看次数

无法使用声明中的初始化列表初始化const char*/string数组的向量

最初我开始尝试使用initilizer-list声明初始化const char*[3]的向量

vector<const char*[3]> v = { { "a", "b", "c" } };
Run Code Online (Sandbox Code Playgroud)

这给出了错误

matrix must be initialized with a brace-enclosed initializer
Run Code Online (Sandbox Code Playgroud)

我认为这可能是由于const char*,虽然看起来很奇怪,但却把它变成了字符串

vector<string[3]> v = { { "a", "b", "c" } };
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在.我尝试了几种括号组合无济于事.实际上是否可以使用初始化列表初始化声明的结构?

c++ c++11

5
推荐指数
1
解决办法
628
查看次数

标签 统计

arrays ×2

c ×2

c++ ×2

c++11 ×1

lvalue ×1

struct ×1

variable-assignment ×1