C++ 改变输出的变量
因此,我只运行了一个快速示例,可以使用一些帮助来了解发生了什么C++ 改变输出的变量,c++,smart-pointers,C++,Smart Pointers,因此,我只运行了一个快速示例,可以使用一些帮助来了解发生了什么 我使用注释的变量“RandomNumber”运行测试,结果是 Construct Invoke Destruct Construct Destruct Invoke 因此,我再次运行测试,但未注释变量“RandomNumber”,输出为 Construct Invoke Destruct Construct Destruct Invoke 我试了很多次,结果都是一样的,但我真的不明白为什么这个变量会改变测试仪的寿命 测试:
我使用注释的变量“RandomNumber”运行测试,结果是
Construct
Invoke
Destruct
Construct
Destruct
Invoke
因此,我再次运行测试,但未注释变量“RandomNumber”,输出为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;
}
struct容器
{
模板
容器(T&&O):数据((void*)std::addressof(O)){}
私人:
作废*数据;
//标准:弱随机数;
};
结构测试仪
{
Tester(){std::cout在Windows 10上多次运行代码后,我发现无论是否注释了弱随机数
,它都会产生几乎相同的输出:
Construct
Invoke
Destruct
这意味着系统中的输出不同,因为其他联机编译器产生了与您相同的结果。最可能的原因是输出依赖于系统/编译器,并且编译器进行了不同的优化。在多个配置上进行测试后,结果因系统和编译器而异。因此,很难预测结果会是什么。既然两个顺序都是有效的,为什么这很重要?发生这种情况的原因是,您没有在任何地方使用数据,因此编译器可以随心所欲地进行编译(如果启用了一些优化功能),这可能会发生甚至可以一起省略构造。不同的编译器和不同的优化器将是不同的-所以你看到了这种行为,而我没有。所以我要么有不同的编译器,要么有不同的优化标志。预测编译器优化器将做什么是不可能的。。。