C++ C++;作用域变量重新排序和计时器
我对作用域_锁的工作原理感到非常困惑,我想知道是否可以在特定代码的执行时间上进行类似的实现 如果说我实现了一个简单的类作用域_计时器,它在构造时启动一个计时器,在删除时停止并报告经过的时间,那么这个示例代码的计时是否正确C++ C++;作用域变量重新排序和计时器,c++,C++,我对作用域_锁的工作原理感到非常困惑,我想知道是否可以在特定代码的执行时间上进行类似的实现 如果说我实现了一个简单的类作用域_计时器,它在构造时启动一个计时器,在删除时停止并报告经过的时间,那么这个示例代码的计时是否正确 func() { //some code { scoped_timer a; //some code that does not include a } //some code } 在实践中,我保证作用域\一个
func()
{
//some code
{
scoped_timer a;
//some code that does not include a
}
//some code
}
在实践中,我保证作用域\一个在开始时被构造,当它超出作用域时被销毁。编译器能否决定对代码进行重新排序,以避免在作用域结束时完全销毁代码或在开始时构造代码,因为它不依赖于对象a
?C++标准是否有保证?< /P>
谢谢
Daniel代码保证按照您的意愿运行
<>这个保证在C++中是重要的,因为C++不是A,因为C++中几乎任何函数都会有副作用(从当前线程的执行流程,或者从其他线程,甚至其他进程,数据是否被声明为代码>易失性< /代码>)。因此,语言规范保证了完整表达式的顺序
为了将这一点与C++11标准结合起来,有许多条款必须一起考虑
最重要的条款是§1.9:
§1.9程序执行[简介执行]
1本国际标准中的语义描述定义了
参数化非确定性抽象机器。这个国际
标准对一致性的结构没有要求
实现。特别是,它们不需要复制或模仿
抽象机器的结构。而是一致性实现
需要模拟(仅)抽象的可观察行为
机器如下所述。*(C++确实对本地对象调用构造函数和析构函数的确切时间做出了保证(它对全局对象的保证较少)。如果作用域锁
获取得太晚或发布得太早,那将是非常糟糕的(如果作用域锁
获取得太早或发布得太晚,那也将是非常糟糕的).重点(尽管回答得很好)如果需要一些特定的编程技术来确保scoped\u lock
以所需的方式工作,这非常有趣……但是我还不清楚scoped\u定时器a
是否会在作用域结束时被销毁,而不是在之后被销毁。@Daniel很好的一点。我已经添加了一个引用标准的附录,它保证了块级变量(包括问题中的对象a
)将被销毁,并在其块退出时调用其析构函数。
compound-statement:
{ statement-seq }
statement-seq:
statement
statement-seq statement