在c++中是否有一个很好的理由在不改变属性的情况下引用它?

Is there a good reason in C++ to refer to a property without changing it?

本文关键字:属性 情况下 引用 改变 理由 c++ 是否 有一个 很好      更新时间:2023-10-16

我正在使用别人的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或错误,这也不是我第一次看到因为这个原因而不得不留下无意义的行,但它在程序的执行中肯定没有任何实际目的。

从你的更新,它看起来像代码只是访问数组的第一项的地址。您可以安全地删除该行。

通常当你看到像这样的无意义代码时,它是由于程序员想要抑制来自编译器或某些静态分析工具的一些迂腐的警告而创建的。

如果你有权限访问版本控制系统,你也许可以回到过去,看看它是在什么条件下创建的…

相关文章: