在c++中是否有一个很好的理由在不改变属性的情况下引用它?
Is there a good reason in C++ to refer to a property without changing it?
我正在使用别人的c++应用程序作为我自己的c#应用程序的指南,我遇到了一个奇怪的模式:
array[index].property;
没有作业。没有评估。
我认为这是一个残留行,从这里完成赋值时遗留下来的。
但是我不确定。既然我遇到了问题,我就开始把最不可能的石头翻过来。
我的问题是:这行有什么用吗?它可能执行类似于touch
的功能吗?
更新-真实代码
实际代码是:
devconfig[fbbloop-1].wAlphaMax;
其中devconfig
是下列结构体的数组:
typedef struct tagBIRDDEVICECONFIG
{
BYTE byStatus; // device status (see bird device status bits, above)
BYTE byID; // device ID code (see bird device ID's, above)
WORD wSoftwareRev; // software revision of device
BYTE byError; // error code flagged by device
BYTE bySetup; // setup information (see bird device setup bits, above)
BYTE byDataFormat; // data format (see bird data formats, above)
BYTE byReportRate; // rate of data reporting, in units of frames
WORD wScaling; // full scale measurement, in inches
BYTE byHemisphere; // hemisphere of operation (see bird hemisphere codes, above)
BYTE byDeviceNum; // bird number
BYTE byXmtrType; // transmitter type (see bird transmitter type bits, above)
WORD wAlphaMin[7]; // filter constants (see Birdnet3 Protocol pp.26-27 for values)
WORD wAlphaMax[7]; // filter constants (see Birdnet3 Protocol pp.26-27 for values)
WORD wVM[7]; // filter constants (see Birdnet3 Protocol pp.26-27 for values)
BIRDANGLES anglesReferenceFrame; // reference frame of bird readings
BIRDANGLES anglesAngleAlign; // alignment of bird readings
}
BIRDDEVICECONFIG;
您包含的代码符合我称之为"这个程序员是一个傻瓜火箭"的模式。代码要么什么都不做,要么有程序员所依赖的副作用。在这两种情况下,"这个程序员是一个傻瓜火箭"是一个很好的描述一个程序员写这样的代码。
"哦,之前的程序员只是犯了一个错误"的情况几乎是"这个程序员是傻瓜火箭"的一个很好的变体。
最初的开发人员很可能遇到了编译器没有重新编译某些更改的文件的错误。
这种情况在Visual Studio中经常发生,在更新的版本中不太常见,当您更改一些中心代码并使用最小的重新构建时。
本质上,编译器不会注意到一些变化,也不会链接到旧的或不正确的目标代码。结果是一些奇怪的行为,没有意义,几乎不可能调试,即一个函数返回到错误的地址或跳转到其他函数的中间没有明显的原因。
解决这个问题的方法是完全重新构建,但是如果开发人员不能立即知道这是编译器方面的错误,他们可能会认为问题出在代码中,并试图修复它。
通常,引入对代码功能没有实际影响的代码更改将解决问题。这也是相当常见的看到一条线,只是0;
用于实现相同的效果。同样,如果开发人员不知道问题是由编译器引起的,他们可能会认为这行什么都不做的代码很重要。
如果容器确实是数组并且index
在数组范围内,则不会做太多。如果容器为map
,则为index
键创建一条记录。
不能,除非操作符[]被重载。即便如此,这也是一件很奇怪的事情。
不,那一行没有函数。这是一个原始的访问,所以这里没有奇怪的重载诡计。它可能是为了掩盖一些编译器的bug或错误,这也不是我第一次看到因为这个原因而不得不留下无意义的行,但它在程序的执行中肯定没有任何实际目的。
从你的更新,它看起来像代码只是访问数组的第一项的地址。您可以安全地删除该行。
通常当你看到像这样的无意义代码时,它是由于程序员想要抑制来自编译器或某些静态分析工具的一些迂腐的警告而创建的。
如果你有权限访问版本控制系统,你也许可以回到过去,看看它是在什么条件下创建的…
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在不知道属性具有哪些构造函数的情况下初始化属性?
- C++ - 如何在不调用其属性的情况下调用类?
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- 具有仅在某些情况下引用外部变量的属性的类
- 如何在不更改代码的情况下为所有C++函数设置属性
- 如何在不使用 C++ 中的管理员权限的情况下设置 AD 属性值
- 在可疑的情况下发出叮当警告:函数'foo'可以用属性"noreturn"声明吗?
- C++:父对象在不调用方法的情况下更改其id属性
- 为什么在这种情况下是this->属性而不是this.attribute(C++OOP)?
- 如何在不擦除 Windows 上C++中的其他属性的情况下隐藏/取消隐藏文件
- 如何在不提供有效生成器的情况下调用 boost::karma::rule 不消耗其属性
- 在c++中是否有一个很好的理由在不改变属性的情况下引用它?