C+17引入的评估顺序保证是什么?

C+17引入的评估顺序保证是什么?

投票产生的影响是什么?C+17评估令担保(P 0145)关于典型的C+代码?

它对像这样的事情有什么改变?

i=1;
f(i++, i)

std::cout << f() << f() << f() ;

f(g(),h(),j());


慕尼黑5688855
浏览 433回答 3
3回答

一只名叫tom的猫

C+17禁止交织在C+14中,以下内容不安全:void&nbsp;foo(std::unique_ptr<A>,&nbsp;std::unique_ptr<B>&nbsp;); foo(std::unique_ptr<A>(new&nbsp;A),&nbsp;std::unique_ptr<B>(new&nbsp;B));在函数调用过程中,这里有四个操作new Aunique_ptr<A>构造器new Bunique_ptr<B>构造器这些排序是完全未指定的,因此一个完全有效的排序是(1),(3),(2),(4)。如果选择了这个顺序,并且(3)抛出,那么来自(1)的内存泄漏-我们还没有运行(2),这将防止泄漏。在C+17中,新规则禁止交织。来自[Intro.Execution]:对于每一次函数调用F,对于F内发生的每一次求值A和不发生在F内但在同一线程上并作为同一信号处理程序(如果有的话)的一部分的每一次求值B,在B或B之前先对A进行排序。这句话有一个脚注,内容如下:换句话说,函数执行不相互交织。这就给我们留下了两个有效的命令:(1),(2),(3),(4)或(3),(4),(1),(2)。没有具体说明采取了哪种订购,但这两种都是安全的。所有(1)(3)同时发生在(2)和(4)之前的命令现在都被禁止。
打开App,查看更多内容
随时随地看视频慕课网APP