改变输出的变量
A Variable changing the output
所以我只是 运行 一个简单的例子,可以帮助理解发生了什么
我 运行 对变量 "RandomNumber" 的测试进行了评论,输出为
Construct
Invoke
Destruct
所以我再次 运行 测试,但变量 "RandomNumber" 未注释,输出为
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
这意味着系统的输出不同,因为其他在线编译器产生了与您相同的结果。最可能的原因是输出是 system/compiler 依赖的以及编译器进行的不同优化。
在对多种配置进行测试后,结果因系统和编译器而异。因此,很难预测结果会是什么。
所以我只是 运行 一个简单的例子,可以帮助理解发生了什么
我 运行 对变量 "RandomNumber" 的测试进行了评论,输出为
Construct
Invoke
Destruct
所以我再次 运行 测试,但变量 "RandomNumber" 未注释,输出为
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
这意味着系统的输出不同,因为其他在线编译器产生了与您相同的结果。最可能的原因是输出是 system/compiler 依赖的以及编译器进行的不同优化。
在对多种配置进行测试后,结果因系统和编译器而异。因此,很难预测结果会是什么。