- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为背景,我在 RHEL7 上使用 thrift 版本 0.9.3 生成 C++。最近向现有的 thrift 文件添加了一个新函数。当从 thrift 生成 cpp 文件并将新生成的文件与现有的旧文件进行比较时,我注意到较新的代码更改了部分代码,对我来说,更改没有意义(即没有新的实现,只是变量名称更改为现有代码)。思考过程可能与新功能有关。所以为了说服自己这只是因为新功能,我再次生成文件,没有功能(基本上使用以前的thrift 文件的版本)。同样,更改保持不变。
澄清一下,在现有的 cpp 文件中有一段这样的代码:
uint32_t _size79;
::apache::thrift::protocol::TType _etype82;
xfer += iprot->readListBegin(_etype82, _size79);
(*(this->success)).resize(_size79);
较新的结果(有或没有新功能)会将变量更改为:
uint32_t _size86;
::apache::thrift::protocol::TType _etype89;
xfer += iprot->readListBegin(_etype89, _size86);
(*(this->success)).resize(_size86);
现在我知道您不应该试图挑剔节俭产生的结果,但是什么可能导致这种情况发生?我浏览了白皮书和其他一些地方,试图弄清楚为什么会发生这样的随机变化,但没弄明白多少。我希望能够说,“这没关系,因为这个特定的过程,有时这是意料之中的……”。我觉得这些变量应该保持一致,因为它们来自同一个 thrift 文件,同一个 thrift 编译器版本,尽管生成时间相隔几个月。
谢谢。希望我只是错过了一个概念。
最佳答案
uint32_t _size79;
生成代码中的内部变量是由接受前缀并向其添加数字的算法创建的。数字每次都会增加。这就是技术解释。
请注意,以下内容适用于您作为软件开发人员在余生中调用或使用的任何类型的函数或 API。
如何使用纯内部 变量的方式对该例程之外的任何代码片段都没有意义。虽然这不是关于 encapsulation in the OOP sense , 有点可比性。特定函数的调用代码(或由它调用的代码)需要知道的任何信息都在方法签名和任何相关文档中。
I've gone through the white paper, and a few other places to try and figure out why random changes like this would happen, but couldn't figure out much.
换句话说,这是未记录的行为。通常不记录内部实现细节的原因是为了防止任何人依赖它,并可能在它的基础上进行构建。关于封装的整个想法是有意隐藏这样的细节。这允许随时更改实现,而不会影响或破坏它之外的任何代码。
这也是为什么依赖未记录的东西是一把双刃剑的原因:它允许更大的灵 active ,但这种力量是以冒与 future 版本兼容的风险为代价的,甚至是次要的修补程序更新。
Part of me feels like these variables should have stayed consistent given that they came from the same thrift file, same thrift compiler version, though generated a few months apart.
产生这种感觉的原因是假设您必须知道(并关心)内部发生的事情。这个假设是不正确的。假装这个方法是一个黑盒子:你甚至不会注意到变量名已经改变了。这会改变调用或使用它的代码吗?
关于节俭一代变量意外改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66538884/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!