编译器如何知道C++常量计算不会触发未定义的行为?

问题描述C++标准要求编译器在C++常量计算中检查未定义的行为。在thistalk中,ChandlerCarruth指出,在检查UB时"您将耗尽检测错误的能力",而且在一般情况下,检测UB与haltingproblem相关,因此可以证明无法确定。他指的不是conexpr中的UB,

发布:2023-01-03 标签:c++undefined-behaviorlanguage-lawyerconstexpr


在C语言中,是否有可能在语义上创建一个类型不完整的左值?

问题描述在C89标准中,我找到以下部分:3.2.2.1L值和功能指示符除非它是sizeof运算符、一元&运算符、++运算符、--运算符或的左操作数的操作数。运算符或赋值运算符,则不具有数组类型的左值将转换为存储在指定对象中的值(不再是左值)。如果左值具有限定类型,则该值具

发布:2023-01-03 标签:cundefined-behaviorlanguage-lawyerlvalueincomplete-type


如何修复GCC警告&朋友声明声明了一个非模板函数

问题描述我这里有一些用GCC、clang和msvc编译的代码:#include<cstdio>#include<type_traits>structc_class;template<classT>structholder{friendautoadl_lookup(holder<T

发布:2022-10-16 标签:templatesc++language-lawyergcc-warningc++14


函数参数求值和副作用

问题描述C++20标准规定函数调用,7.6.1.3/8:参数的初始化(包括每个关联值计算和副作用)相对于任何其他参数的初始化是不确定的。不确定排序(相对于非排序)可确保影响相同内存区域的副作用不是未定义的行为。Cp首选项givesthefollowingexamples:f(i=

发布:2022-10-16 标签:c++undefined-behaviorc++17language-lawyerside-effects


函数的默认参数值取决于C++中的参数名称

问题描述如果在C++中定义了一个新变量,则可以在初始化表达式中使用该变量的名称,例如:intx=sizeof(x);函数参数的缺省值怎么办?是否允许在那里按名称引用参数?例如:voidf(inty=sizeof(y)){}此函数在Clang中被接受,但在GCC中被拒绝,错误为:'

发布:2022-10-16 标签:compiler-errorsc++language-lawyerdefault-argumentsfunction-declaration


为什么019不是一个JavaScript语法错误?或者为什么是019&amp;&gt;020

问题描述如果我在JavaScript控制台(在Chrome和Firefox中都进行了测试)中键入019>020,则会得到答案true。这是因为020被解释为OctalIntegerLiteral(等于16),而019显然被解释为DecimalLiteral(并且等于19)。由于1

发布:2022-10-16 标签:javascriptgrammarlanguage-lawyerecmascript-5javacc


与三元关联相关的属性

问题描述在UML中,属性是关联端,可以由关联拥有,也可以由参与的分类器拥有,后者通常是一个类。当属性由类拥有时,它称为属性。例如,属性Book::author可以使用以下符号之一(其中应在右侧图表的作者关联端绘制一个点):该属性可以用在如下约束表达式中:self.author或m

发布:2022-10-16 标签:class-diagramconstraintsumlassociationslanguage-lawyer


在C++中可以在堆上创建带有Consteval构造函数的类吗?

问题描述在下面的代码中structA有立即函数的默认构造函数,结构的对象通过newA{}的方式在动态内存中创建:structA{constevalA(){}};intmain(){newA{};}只有Clang才接受它。GCC抱怨error:thevalueof'<anonymo

发布:2022-10-16 标签:new-operatorc++language-lawyerconsteval


在一个不支持负零的系统中产生负零有什么意义?

问题描述C176.2.6.2/4表示:如果实现不支持负零,则&amp;、|、^、~、&lt;&lt;的行为,And>>运算符的操作数将生成这样的值,这是未定义的。如果我有一个2的补码系统,它不支持负零。它总是利用二进制数的所有可能组合来表示值。因此,无论使用哪种位运算,都不可能生

发布:2022-10-16 标签:cbitwise-operatorssignedlanguage-lawyertwos-complement


如果两个类型在C中彼此兼容,这到底是什么意思?

问题描述在C标准中陈述(强调我的):如果两个类型的类型相同,则它们具有兼容的类型。类型说明符的6.7.2、类型限定符的6.7.3和声明符的6.7.6中描述了确定两个类型是否兼容的其他规则。56)56)两种类型不必完全相同即可兼容。来源:C18,§6.2.7/1-兼容类型和复合类型

发布:2022-10-16 标签:typescompatibilitycterminologylanguage-lawyer