这是将结构sockaddr_in.sin_zero[8]初始化为0的正确方法吗
Is this a correct way of initializing struct sockaddr_in.sin_zero[8] as 0?
我现在正在做这件事,但
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
inet_aton("10.12.110.57", &(my_addr.sin_addr));
memset(&(my_addr.sin_zero), ' ', 8);
我能做这个吗?这也会将结构的其余部分归零吗?即sin_zero[8]
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), 0};
// Or
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), {0} };
是的,它是正确的。当然,您可以只编写0
,它没有' '
那么冗长。您也可以用sizeof my_addr.sin_zero
替换8
,以确保您设置的字节数正确。
更整洁的方法是:
struct sockaddr_in my_addr = { 0 };
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
如果你想在整个过程中使用一个大括号括起来的初始化器,那么为了可读性,我建议使用指定的初始化器。此外,这可能是可能的,也可能不是可能的,因为在某些情况下,支撑初始化程序必须是常量表达式,并且不清楚MYPORT是否是变量。
在C++11中对结构进行值初始化的最简单方法是简单地添加一个大括号或相等的初始化器,并让聚合初始化完成工作:
sockaddr_in my_addr {};
在C++03:中
sockaddr_in my_addr = {};
顺便说一句,sin_zero已根据开放组基础决议bwg2001-004删除。根据您的平台,您可能不再需要关心该成员变量。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 在C++中初始化向量映射的最有效方法
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 初始化指向类实例的智能指针并访问其方法
- 不同的类或结构初始化方法之间的性能差异是什么?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在C++中全局初始化类的正确方法
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 初始化类的两种方法?
- C++初始化之前派生类调用基类的方法
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- 对象的动态数组 - 初始化方法之间的差异
- 使初始化变量可供多个属性初始化方法访问
- 初始化方法MQL5中的对象
- 初始化方法与构造函数加赋值的方法——性能有什么不同?(C++)
- 对象初始化:初始化方法或流操作符
- 初始化程序列表与初始化方法
- 不同结构初始化方法之间的差异