|
|
1
6
这一切都取决于上下文,也取决于哪个部分在这里被认为是“肮脏的”。
首先,“切片复制”的伎俩在技术上是合法的。从形式上讲,这并不是真正的“黑客”。通过使用赋值运算符的限定名引用中的运算符,也可以获得相同的结果
它开始看起来很熟悉了,不是吗?是的,如果您必须在派生类中实现赋值运算符,如果您突然决定手动执行它,那么您会这样做
这个
然而,第二点也是更重要的一点,在你的例子中,我所说的“肮脏”并不是使用“切片复制”本身的技巧。根据您在问题中描述的内容,看起来您实际上将数据结构拆分为两个类(
|
|
|
2
4
是的;这是肮脏的-您故意进行切片,因为您太懒了,无法编写B::CopyVariablesThatIWant(const B&)。您正在以一种适合您的方式滥用类型系统,但是您很可能会混淆和/或激怒任何未来的程序员,他们必须查看您的代码并找出它的意图。 你的同事是对的,你应该为自己感到羞耻。 |
|
|
3
3
为什么不直接执行成员结构并显式执行操作:
在我看来,最肮脏的部分是 不必要的混淆 代码的一部分。六个月后,一些可怜的灵魂会诅咒你,试图理解为什么蝙蝠侠会这样做。 |
|
|
4
2
那就不要了(但任务会分配一切。) 另外,如果你想切片,你可以做:
仅仅拥有未初始化的成员看起来确实很肮脏。 |
|
|
5
2
是什么语义使某些字段成为副本所需,而不是其他字段?
语义学
编辑:总是有一个维护程序员,除非你在编译之后删除代码。我数不清有多少次我回到几个月前写的东西,然后说“我在想什么?!?”善待你的维护程序员,即使是你。 |
|
|
6
1
问题是您正在使用a构造函数初始化a B。我很惊讶编译器允许这样做。 这意味着,当您访问B,并使用预期已初始化c、d、e的函数时,它将无法按预期工作,并可能崩溃。另外,如果它实际上是一个类并且具有虚拟函数,那么它的vtable将与编译器所期望的vtable不同。 注意这个:
编译并运行
请解释一下? |
|
|
7
0
在下列情况下,您可能会遇到麻烦:
a在结构中的偏移量0处分配,b在偏移量4处分配(填充以对齐b)。可以在偏移量1处分配c,因为A没有使用该空间。如果发生这种情况,您的分配可能会破坏c(如果A的复制构造函数复制了未使用的填充,则允许这样做)。 我不确定C++中是否允许在一个填充空间中分配C。不过,我编写了一个Java编译器来实现这一点,所以这并不是史无前例的。 |
|
|
8
0
怎么样:
|
|
|
9
0
我反对的一个大问题是,它只为你节省了一点工作,并留下了一个很大的“嗯?”让下一个家伙过来。评论它并没有更好,因为它仍然留下一些额外的东西需要理解,而且更像是打字,而不仅仅是把它做好。 经过几十年对各种各样的代码的研究,我真的开始讨厌任何阻碍阅读和理解的东西。 |
|
|
metrallador10 · 哪种代码更好?效率与代码可读性 2 年前 |
|
|
Justin Xu · 使用return if语句进行重构验证 3 年前 |
|
|
Cino · 如何以体面的方式处理Python异常? 3 年前 |
|
|
SAI BENDE · 如何在多个html文件中使用单个导航栏 3 年前 |
|
|
fstab · 对正常控制流程使用例外情况是一种不鼓励还是不鼓励的做法? 13 年前 |
|
|
SwampYeti · 在CSS中拉伸小背景图像 13 年前 |