使用指向非常数的指针和指向相同地址的常量参数的指针的函数调用

问题描述我要编写一个函数,该函数使用指针输入一个数据数组并输出另一个数据数组。我想知道,如果src和dst都指向同一个地址,结果会是什么,因为我知道编译器可以针对const进行优化。它是不是未定义的行为?(我标记了C和C++,因为我不确定它们之间的答案是否会不同,我想知道两者的情

发布:2023-01-03 标签:constantsc++cundefined-behavior


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

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

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


为什么已定义数组外的第一个元素默认为零?

问题描述我正在为我的C++入门课的期末考试做准备。我们的教授给了我们这样一个练习题:解释代码产生以下输出的原因:120200160usingnamespacestd;intmain(){intx[]={120,200,16};for(inti=0;i<4;i++)cout<<x[

发布:2023-01-03 标签:arraysc++initializationundefined-behaviorzero-initialization


声明返回int的函数不返回任何内容。这是未定义的行为吗?

问题描述这是C++中的有效函数:intf(){if(false){return42;}}以下定义导致UB:intx=f();//returnvalueused问题:以下表达式语句是否导致UB?f();非常欢迎来自标准的报价。推荐答案C++03§6.6.3/2:流出函数末尾相当于没

发布:2023-01-03 标签:functionc++undefined-behavior


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

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

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


函数参数求值和副作用

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

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


是否包含`std::Vector`的常量时间`?

问题描述我正在使用一些代码,通过将std::vector的地址与描述vector数据范围的地址进行比较,检查std::vector是否在固定时间内包含给定的元素。但是,我怀疑,尽管它可以工作,但它依赖于未定义的行为。如果vector不包含该元素,则不允许进行指针比较。boolco

发布:2022-10-16 标签:time-complexityc++containsundefined-behaviorstdvector


动态数组的惯用初始化是否会调用未定义的行为?

问题描述这个问题可能有点争议。我在块作用域中有以下代码:int*a=malloc(3*sizeof(int));if(!a){...errorhandling...}a[0]=0;a[1]=1;a[2]=2;我认为这段代码调用ub是因为指针算法超出界限。原因是a对象指针的有效类型

发布:2022-10-16 标签:arrayscundefined-behaviorlanguage-lawyerdynamic-memory-allocation


C++20中严格的别名规则是否允许在标准c++unicode字符和下划线类型之间使用`represtrate_cast`?

问题描述C++20的严格的别名规则[basic.lval]/11是否任意允许...在char*和char8_t*之间强制转换stringstr="string";u8stringu8str{(char8_t*)&*str.data()};//c++20u8stringu8stri

发布:2022-10-16 标签:c++undefined-behaviorc++20strict-aliasing


使用std:Vector作为低级缓冲区

问题描述此处的用法与Usingread()directlyintoaC++std:vector相同,但有重新分配的帐户。输入文件的大小未知,因此当文件大小超过缓冲区大小时,会通过加倍大小来重新分配缓冲区。以下是我的代码:#include<vector>#include<fstre

发布:2022-10-16 标签:c++stlundefined-behaviorlanguage-lawyerstdvector