debugging Visual Studio不显示std::vector的正确长度

9ceoxa92  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(179)

我有这段代码,当我试图调试它,看看有多少元素在std::vector,然后Visual Studio写的向量的长度是零,我不知道如何修复它(我在调试模式下构建)

auto foo()
{
    std::vector<int> bar = { 1, 2, 3, 4, 5 };
    return bar;
}
int main()
{
    foo();

}

起初,我以为它在IDE中,我尝试使用Clean,但结果没有改变,我决定重新安装MSVC,因为我认为它在IDE中,我也没有得到任何结果。

5rgfhyps

5rgfhyps1#

这是MSVC中的已知错误。
NRVO bug in MSVC
解决方案是将/Zc:nrvo-添加到c编译器的附加选项中,位置是Properties-〉Debug-〉C/C-〉CommandLine

// recent versions of MSVC2022
#include <vector>
using std::vector;
auto foo()
{
    std::vector<int> bar = { 1, 2, 3, 4, 5 };
    return bar;     // in debug mode, bar has size 0 unless /Fc:nrvo- flag is added
}
int main()
{
    auto x = foo(); // x is shown properly
}
g6ll5ycj

g6ll5ycj2#

打印矢量的大小。它会给予你正确的答案,即5。调试器给出这个答案可能是因为在赋值后,最初的矢量大小为0,因此如果你继续下去,你会看到正确的答案。

相关问题