草庐IT

legality

全部标签

c++ - 通过下标 : legal by the C++ Standard or not? 获取一个过去的数组元素的地址

我已经看到它多次断言C++标准不允许以下代码:intarray[5];int*array_begin=&array[0];int*array_end=&array[5];&array[5]在这种情况下是合法的C++代码吗?如果可能的话,我想要一个引用标准的答案。知道它是否符合C标准也很有趣。如果它不是标准C++,为什么决定将其与array+5或&array[4]+1区别对待? 最佳答案 是的,这是合法的。来自C99draftstandard:§6.5.2.1,第2段:Apostfixexpressionfollowedbyanexp

c++ - Lambda 自身返回 : is this legal?

考虑一下这个相当无用的程序:#includeintmain(intargc,char*argv[]){inta=5;autoit=[&](autoself){return[&](autob){std::cout基本上,我们正在尝试创建一个返回自身的lambda。MSVC编译程序并运行gcc编译程序,但出现段错误clang用一条消息拒绝该程序:error:function'operator()'withdeducedreturntypecannotbeusedbeforeitisdefined哪个编译器是正确的?是否存在静态约束违规、UB或两者都没有?更新这个轻微的修改被clang接受: