问题描述
C99 compound literals是not supported in C++。在许多情况下,list intialization是一个很好的选择。但是,它们是not guaranteed not to heap-allocate memory。
对于C ++代码,是否有任何方便且可移植的替代方法,它们需要完全在没有堆分配的情况下工作?
解决方法
正如所链接问题的答案所表明的那样,由于C ++ 14,编译器无法对初始列表进行堆分配。而且,即使C ++ 14之前的编译器也不会堆分配初始化程序列表,因为绝对没有理由这样做(并且有很多理由不这样做)。
,如果您的程序完全在没有堆分配的情况下工作,则添加列表初始化会很好,并且不会导致堆内存分配。
初始初始化可能导致堆分配的情况是对象已经使用堆内存的情况,例如std :: list。如果您没有堆,那么您肯定不使用那些。