更改输出的变量

A Variable changing the output

本文关键字:变量 输出      更新时间:2023-10-16

所以我只是运行一个简单的例子,可以使用一些帮助来理解发生了什么

我在变量"随机数"注释的情况下运行测试,输出为

Construct
Invoke
Destruct

所以我再次运行测试,但变量"随机数"未注释,输出为

Construct
Destruct
Invoke

我尝试了很多次,结果相同,但我真的不明白为什么该变量会改变测试器的寿命......
测试:

struct Container 
{
template<typename T>
Container(T&& O) : Data((void*)std::addressof(O)) {}
private:
void* Data;
//std::weak_ptr<int> RandomNumber;
};
struct Tester
{
Tester() { std::cout << "Construct" << std::endl; }
~Tester() { std::cout << "Destruct" << std::endl; }
};
void TestFunction1(const std::vector<Container>& Data)
{
std::cout << "Invoke" << std::endl;
}
int main()
{
TestFunction1({ Tester() });
return 0;
}

在 Windows 10 上多次运行代码后,我观察到无论是否注释weak_ptr<int> RandomNumber它都会产生几乎相同的输出:

Construct
Invoke
Destruct

这意味着系统中的输出不同,因为其他在线编译器产生了与您相同的结果。最可能的原因是输出依赖于系统/编译器以及编译器所做的不同优化。

在多个配置上进行测试后,结果因系统和编译器而异。因此,很难预测结果可能是什么。