![]() |
1
22
在C++中,并非所有事物都可以用文字初始化。
而在C语言中,习语是
注意,在c中
这使得
缺点
也就是说,在代码中间引入一个“虚构的”块,即使乍一看它可能不太漂亮。当然,在C++中不需要引入块。
至于实际差异…你可能会听到一些人这样说
这是因为一个典型的实现通常使用一位模式(
|
![]() |
2
15
|
![]() |
3
6
如果结构包含指针,则生成的所有位零的值
(也可能是
编辑:
从更务实的角度来看,我还是会说不要使用
|
![]() |
4
5
根据编译器的优化,可能会有一些阈值,超过这个阈值,memset会更快,但这通常会远远超过基于堆栈的变量的正常大小。在带有虚拟表的C++对象上使用MeMSET当然是不好的。 |
![]() |
5
4
我找到了一个很好的解决方案:
这不仅对基本类型和用户定义的类型是正确的,而且对定义了默认构造函数的类型进行了零初始化,但不能初始化所有成员变量,尤其是包含非平凡的类。
|
![]() |
6
3
唯一
实际的
区别在于
纯粹理论上,有一些情况
|
![]() |
7
3
我从来没有理解过把所有东西都归零的神秘好处,即使定义了它,也不太可能是可取的。由于这被标记为C++,初始化的正确解决方案是给予结构或类A约束。 |
![]() |
8
3
没有你
不会
. 如果你使用
第一个将不执行您想要的操作:它将尝试创建一个
|
![]() |
9
2
我认为初始化可以更清楚地说明您实际在做什么。您正在初始化结构。当新标准失效时,初始化的方法将得到更多的使用(用初始化容器是值得期待的)。memset方式稍微容易出错,并且不能清楚地传达您正在做的事情。在单独编程时,这可能不太重要,但在团队中工作时意义重大。 对于一些用C++工作的人来说,MimSET,Malc& & Co.是非常神秘的生物。我自己也遇到过一些。 |
![]() |
10
2
清除结构的最佳方法是单独设置每个字段:
在上面的示例中,a
比起花更少的时间打字,我更喜欢有一个更健壮的程序。 |
![]() |
11
0
这个
|
![]() |
12
0
在C语言中,我更喜欢使用0,而不是等价的memset()。 然而,GCC警告这种用法:(详细信息如下: http://www.pixelbeat.org/programming/gcc/auto_init.html 在C++中,它们通常是等价的,但与C++一样。 有一些角落案例需要考虑(在其他答案中注明)。 |
![]() |
cobb208 · Malloc正在为释放指针引发错误 2 年前 |
![]() |
kernel · 打印结构数组内容时出错 2 年前 |
![]() |
mwitz · 在Rust中无法正确写入结构的函数属性 2 年前 |
![]() |
Ulysses · 无法访问结构字段(Rust) 2 年前 |
![]() |
Tor · 使用Box<None>值初始化struct 2 年前 |
![]() |
Yestin · Golang如何初始化数组结构[duplicate] 2 年前 |