struct易错点

2024-06-13 20:12
文章标签 struct 易错

本文主要是介绍struct易错点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

namespace FXTest
{class Program{static void Main(string[] args){List<Ast> l1 = new List<Ast>();List<IAst> l2 = new List<IAst>();l1.Add(new Ast());l2.Add(new Ast());l1[0].id = 2;//报错}}interface IAst{}struct Ast:IAst{public int id;}
}

以上在修改Ast中的id错误的原因是因为Ast是struct值类型,当你在修改id的时候实际上修改的是它的副本;将Ast修改为引用类型的class即可。
并且l2添加的时候性能消耗更小,因为l1在添加的时候会引发拆箱操作(struct是值类型)。
l1.Add(new Ast());
l2.Add(new Ast());

这篇关于struct易错点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058311

相关文章

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员,每个成员可能具有不同的类型。 数组的元素长度相同,可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同,所以不能用下标来访问它们。成员有自己的名字,可以通过名字访问成员。 结构声明 在声明结构时,必须列出它包含的所有成员。 struct tag {member-list} variable-list ; 定义一个结构体变量x(包含

二分猜数易错的地方

今天做简单的二分猜数问题,while循环总是跳不出去,搞了好久才弄好了。。。好几次都这样,总结一下吧 while(left <= right){int mid = (left+right)/2;if(ok(mid)) left = mid+1,ans = mid;//记录结果,要不然跳不出循环,视题目而定,ans也可以写在下面else right = mid-1;}

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱动模型有深入的理解。 zram驱动加载的时候会调用zram_add函数,源码如下: 1887/*1888 * Allocate and initia

浅析c/c++中 struct的区别

(1)C的struct与C++的class的区别。 (2)C++中的struct和class的区别。 在第一种情况下,struct与class有着非常明显的区别。C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员变量,不能定义成员函数(在纯粹的C语言中,struct不能定义成员函数,只能定义变量)。例如下面的C代码片断: 复制代码代码如下:

c++ error: redefinition of ‘struct ac::bd’ struct ac::bd:fg

#include <iostream> #include <stdio.h> class ac {     public:         class bd; }; class ac::bd {     public:         struct fg; }; struct ac::bd:fg {     int a = 1; }; int main() {     return 0;

Go-struct嵌套初始化与赋值

struct嵌套的几种用法。 示例一 package mainimport "fmt"import "encoding/json"type Point struct {X, Y int}type Circle struct {Center PointRadius int}type Wheel struct {Circle CircleSpokes int}func foo() {var

【C语言】零碎知识点(易忘 / 易错)总结回顾

一、数据类型 1、%p —— 以地址的形式打印 2、整型在内存中的存储 (1)原码、反码、补码 计算机中的有符号数有三种表示方法:原码、反码和补码。 三种表示方法均有符号位和数值位两部分,数值位三种表示方法各不相同。 原码:直接将二进制按照正负数的形式翻译成二进制就可以了。反码:将原码的符号位不变,其他位依次按位取反就可以得到了。补码:反码 +1 就得到补码。 补码转原码 方法

golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct

文章目录 1.结构体struct1.1 声明结构体1.2 初始化结构体 以及 传参 2. 结构体数组、append3. 接口返回 含数组的结构体 常用写法json string转struct 1.结构体struct 看这个文章,看一个struct 1.1 声明结构体 // studenttype Student struct {Name stringAge uint64

C++相关概念和易错语法(31)(特殊类的设计、new和delete底层调用分析)

特殊类的设计 在实践过程中,我们难免会接触到一些需要实现特定功能的类。像之前提过的unique_ptr就是直接delete拷贝构造和赋值函数。下面会分享一些常见的特殊类的实现 1、防拷贝和防赋值 通过封死拷贝构造和赋值函数来保护对象里面内容不被复制。如果对象里面的内容是指针,对析构次数有严格要求的话(如unique_ptr)就通常采用这种处理方法。 注意拷贝构造和移动拷贝为一体,赋值重

memset初始化数组易错点

一、memset(a, 1, sizeof a); 如下代码,不少同学会以为a[]被初始化为1,其实不是的,是被初始化为16843009,为什么是这个数呢? #include <bits/stdc++.h>using namespace std;int n, a[14];int main(){memset(a, 1, sizeof a);for(int i=0; i<14; ++i){