草庐IT

评估器

全部标签

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

在C++17evaluationorderguarantees(P0145)中投票的含义是什么?在典型的C++代码上?它对以下内容有何改变?i=1;f(i++,i)和std::cout或f(g(),h(),j()); 最佳答案 到目前为止,评估顺序未指定的一些常见情况已在C++17中指定并有效。一些未定义的行为现在是未指定的。i=1;f(i++,i)未定义,但现在未指定。具体来说,没有指定的是f的每个参数相对于其他参数的评估顺序。i++可能在i之前计算,反之亦然。事实上,它可能会以不同的顺序评估第二次调用,尽管在同一个编译器下。但是

c++ - if 语句 - 短路评估与可读性

有时,if语句可能相当复杂或较长,因此为了便于阅读,最好在if之前提取复杂的调用。例如这个:if(SomeComplicatedFunctionCall()||OtherComplicatedFunctionCall()){//dostuff}进入这个boolb1=SomeComplicatedFunctionCall();boolb2=OtherComplicatedFunctionCall();if(b1||b2){//dostuff}(提供的示例并没有那么不好,这只是为了说明......想象一下其他带有多个参数的调用等)但是通过这次提取,我失去了短路评估(SCE)。我真的每次都失

php - 为什么 1234 == '1234 test' 评估为真?

这个问题已经存在:关闭10年前。PossibleDuplicate:php==vs===operator对于我确定的人来说,这是一个简单的答案。有人能解释一下为什么这个表达式的计算结果为真吗?(1234=='1234test') 最佳答案 因为您使用==(相似性)运算符,而PHP将字符串强制转换为int。要解决它,请使用===(相等)运算符,它不仅检查值是否相同,而且检查数据类型是否相同,因此不会考虑“123”字符串和123int相等。 关于php-为什么1234=='1234test'

php - 为什么 1...1 评估为 10.1?

这个问题在这里已经有了答案:Whyis'...'concatenatingtwonumbersinmycode?(1个回答)关闭5年前.我刚刚遇到了一个来自3v4l的PHP小片段:https://3v4l.org/jmrZBecho1...1;//10.1恐怕我不知道如何解释它的结果。为什么这被认为是有效的? 最佳答案 点(.)在PHP中有两个作用:作为十进制数字,当它是实数的一部分时,例如1.1。对于实数,整数部分和小数部分都是可选的但不能同时选择。这意味着1.和.1在PHP中都是有效的实数,但.不是数字。作为stringconc

build - Gradle 的术语评估和执行之间的区别

我是Gradle构建工具的新手,现在我正在阅读用户指南,但无法完全理解评估阶段和执行阶段之间的区别。在配置阶段项目对象已配置并创建DAG,但是我们有afterEvaluate,那么这里的评估是什么?评估任务依赖关系还是什么? 最佳答案 正如您在文档中看到的,分为三个阶段:初始化、配置和执行。每个步骤都从根项目遍历到子项目以进行多项目构建。当您想要基于子项目中的配置来配置特定项目时,afterEvaluate在多项目构建的根gradle文件中很有用。假设您要为定义了特定插件的所有子项目添加任务。如果你添加到你的根项目:subproje

javascript - (a== 1 && a ==2 && a==3) 可以评估为真吗?

想要改进这篇文章?提供这个问题的详细答案,包括引用和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。Moderatornote:Pleaseresisttheurgetoeditthecodeorremovethisnotice.Thepatternofwhitespacemaybepartofthequestionandthereforeshouldnotbetamperedwithunnecessarily.Ifyouareinthe"whitespaceisinsignificant"camp,youshouldbeabletoacceptthecodeasis

c++ - 循环条件评估

只是一个简单的问题。我有一个看起来像这样的循环:for(inti=0;ifor循环中的条件是否在每个循环中都重新评估?如果是这样,做这样的事情会更有效率吗?:intdimSquare=dim*dim;for(inti=0;i谢谢-伪造 最佳答案 是的,从语义上讲,它将在每个循环上进行评估。在某些情况中,编译器可能能够自动从循环中删除条件-但并非总是如此。特别是:voidfoo(conststructrect*r){for(inti=0;iwidth*r->height;i++){quux();}}在这种情况下,编译器将无法将乘法移出

c++ - 循环条件评估

只是一个简单的问题。我有一个看起来像这样的循环:for(inti=0;ifor循环中的条件是否在每个循环中都重新评估?如果是这样,做这样的事情会更有效率吗?:intdimSquare=dim*dim;for(inti=0;i谢谢-伪造 最佳答案 是的,从语义上讲,它将在每个循环上进行评估。在某些情况中,编译器可能能够自动从循环中删除条件-但并非总是如此。特别是:voidfoo(conststructrect*r){for(inti=0;iwidth*r->height;i++){quux();}}在这种情况下,编译器将无法将乘法移出

c++ - move 语义和参数评估顺序

考虑以下几点:std::stringmake_what_string(conststd::string&id);structbasic_foo{basic_foo(std::stringmessage,std::stringid);};structfoo:publicbasic_foo{foo::foo(std::stringid):basic_foo(make_what_string(id),std::move(id))//Isthisvalid?{}};由于未指定C++中的参数评估顺序,我想知道是否这条线basic_foo(make_what_string(id),std::mov

c++ - move 语义和参数评估顺序

考虑以下几点:std::stringmake_what_string(conststd::string&id);structbasic_foo{basic_foo(std::stringmessage,std::stringid);};structfoo:publicbasic_foo{foo::foo(std::stringid):basic_foo(make_what_string(id),std::move(id))//Isthisvalid?{}};由于未指定C++中的参数评估顺序,我想知道是否这条线basic_foo(make_what_string(id),std::mov