有没有办法在Python中方便地定义类似C的结构?我厌倦了写下这样的东西:
class MyStruct():
def __init__(self, field1, field2, field3):
self.field1 = field1
self.field2 = field2
self.field3 = field3
Run Code Online (Sandbox Code Playgroud) 是否有任何好的例子来区分a struct和a union?基本上我知道它struct使用其成员的所有内存并union使用最大的成员内存空间.是否有其他操作系统级别的差异?
我见过许多程序,包括如下所示的结构
typedef struct
{
int i;
char k;
} elem;
elem user;
Run Code Online (Sandbox Code Playgroud)
为什么经常这么需要?任何具体原因或适用范围?
在Go语言规范中,它提到了标签的简要概述:
字段声明后面可以跟一个可选的字符串文字标记,该标记成为相应字段声明中所有字段的属性.标签通过反射界面可见,但否则将被忽略.
Run Code Online (Sandbox Code Playgroud)// A struct corresponding to the TimeStamp protocol buffer. // The tag strings define the protocol buffer field numbers. struct { microsec uint64 "field 1" serverIP6 uint64 "field 2" process string "field 3" }
这是一个非常简短的解释IMO,我想知道是否有人可以提供我这些标签的用途?
如何打印(在控制台)Id,Title,Name等这个结构中Golang的?
type Project struct {
Id int64 `json:"project_id"`
Title string `json:"title"`
Name string `json:"name"`
Data Data `json:"data"`
Commits Commits `json:"commits"`
}
Run Code Online (Sandbox Code Playgroud) 在.NET中,值类型(C#struct)不能包含没有参数的构造函数.根据这篇文章,这是CLI规范要求的.会发生什么,对于每个值类型,都会创建一个默认构造函数(由编译器?),它将所有成员初始化为零(或null).
为什么不允许定义这样的默认构造函数?
一个微不足道的用途是有理数:
public struct Rational {
private long numerator;
private long denominator;
public Rational(long num, long denom)
{ /* Todo: Find GCD etc. */ }
public Rational(long num)
{
numerator = num;
denominator = 1;
}
public Rational() // This is not allowed
{
numerator = 0;
denominator = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
使用当前版本的C#,默认的Rational 0/0并不是那么酷.
PS:默认参数是否有助于解决C#4.0或者是否会调用CLR定义的默认构造函数?
Jon Skeet回答道:
要使用您的示例,当有人执行时您希望发生什么:
Run Code Online (Sandbox Code Playgroud)Rational[] fractions = new Rational[1000];它应该通过你的构造函数1000次?
当然应该,这就是我首先编写默认构造函数的原因.当没有定义显式默认构造函数时,CLR应该使用默认的归零构造函数; 这样你只需支付你使用的费用.然后,如果我想要一个1000个非默认Rational的容器(并希望优化1000个结构),我将使用一个 …
是否完全违反Java方式来创建类似对象的结构?
class SomeData1 {
public int x;
public int y;
}
Run Code Online (Sandbox Code Playgroud)
我可以看到一个带有访问器和mutator的类更像Java.
class SomeData2 {
int getX();
void setX(int x);
int getY();
void setY(int y);
private int x;
private int y;
}
Run Code Online (Sandbox Code Playgroud)
第一个例子中的类是符号方便的.
// a function in a class
public int f(SomeData1 d) {
return (3 * d.x) / d.y;
}
Run Code Online (Sandbox Code Playgroud)
这不方便.
// a function in a class
public int f(SomeData2 d) {
return (3 * d.getX()) / d.getY();
}
Run Code Online (Sandbox Code Playgroud) 考虑:
struct mystruct_A
{
char a;
int b;
char c;
} x;
struct mystruct_B
{
int b;
char a;
} y;
Run Code Online (Sandbox Code Playgroud)
结构的尺寸分别为12和8.
这些结构是填充还是包装?
什么时候进行填充或包装?