gpt4 book ai didi

c++ - Visual Studio 2010 O2 优化给出错误的结果?

转载 作者:行者123 更新时间:2023-11-28 06:53:27 25 4
gpt4 key购买 nike

int listenPort()
{
//if (server)
//{
// return server->port();
//}
//std::cout << server->port() << std::endl;
//return 0;

//add below 2 lines only to make it work right under Realease.
//std::fstream f("Z:/fsfasjlfjal.txt");
//f.close();

if (_listenPort != -1)
{
return _listenPort;
}

return 0;
}

我有一个名为 listenPort 的函数,变量 _listenPort 在构造函数中被设置为 -1,我想检查它的值。当它改变时返回它或返回 0。

我用Visual Studio 2010编译代码,DEBUG一切OK。但是当我更改为 Release(/O2) 时,函数总是返回 0。我尝试添加两行代码:fstream 打开和关闭。现在看来一切都对了。

但是这个解决方案很丑陋,我只是打开和关闭一些文件。我应该怎么办?谢谢。

最佳答案

一个不推荐的解决方案是用volatile int _listenPort;替换int _listenPort;。阅读this了解为什么不推荐此解决方案。

一个好的解决方案是使用 _listenPort 的同步写入和读取。

或者正如我之前建议的那样,将类的定义移动到不同的文件中。这样,编译器就不会内联您的代码,函数将返回预期值。

关于c++ - Visual Studio 2010 O2 优化给出错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23465653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com