int main(){
int v = 1;
char* ptr = reinterpret_cast<char*>(&v);
char r = *ptr; //#1
}
在此片段中,表达式ptr指向一个int类型的对象,如:
expr.static.cast#13所示
否则,指针值将通过转换保持不变。
间接ptr
将产生一个glvalue,该glvalue表示ptr
指向的对象,如
expr.unary#op-1所示
结果是一个L值,它引用表达式所指向的对象或函数。
根据
basic.lval#11,使用允许类型的glvalue访问对象不会导致UB
如果程序试图通过glvalue访问([defns.access])对象的存储值,而glvalue的类型与下列类型之一不相似([conv.qual]),则该行为未定义:
它似乎也没有违反以下规则:
expr#pre-4
如果在计算表达式的过程中,结果未在数学上定义或不在其类型的可表示值范围内,则该行为未定义。
假设测试环境中char
的宽度为8位,其范围为[-128,127]。v
的值为1。那么,这是否意味着#1
处的片段不会导致UB?
作为对比,给出以下示例
int main(){
int v = 2147483647; // or any value greater than 127
char* ptr = reinterpret_cast<char*>(&v);
char r = *ptr; //#2
}
#2
应该是UB,对吗?
这是否意味着#1处的片段不会导致UB?
是的,引用的规则意味着#1的定义很好。
2号应该是UB对吧?
不,根据引用的规则,#2的行为也有很好的定义。
ptr
的类型是char*
,因此*ptr
表达式的类型是char
,其值不能超过char
表示的值,因此expr#pre-4不适用。
假设测试环境中字符的宽度为8位,其范围为[-128,127]。
为了很好地定义#1,这个假设并不是必要的。
v的值为1
这并不是仅仅从上述假设中得出的。虽然标准没有确切地指定表示形式,但如果CPU有一个小的endian(包括前面的假设),这实际上是正确的。
问题内容: 假设我有这个课程: 一个线程可以在不访问该对象的情况下写入这些字段,而另一个线程可以读取它们吗? 注意:这些值可以彼此分开对待,因此在读取时更改没关系。 编辑 : 为了澄清起见,这些字段是 可变的 。只有它们引用的对象是 不可变的 。 问题答案: 从技术上讲,你需要让他们,或读取 和 使用写出来,以保证读者会读的最先进的最新值。正如您现在所拥有的,如果一个线程写入一个值,则不能保证另一
问题内容: 假设我有这个课程: 一个线程可以在不访问该对象的情况下写入这些字段,而另一个线程可以读取它们吗? 注意:这些值可以彼此分开对待,因此在读取时更改没关系。 编辑 : 为了澄清起见,这些字段是 可变的 。只有它们引用的对象是 不可变的 。 问题答案: 从技术上讲,你需要让他们,或读取 和 使用写出来,以保证读者会读的最先进的最新值。正如您现在所拥有的,如果一个线程写入一个值,则不能保证另一
考虑一个具有的API,如下所示: 很简单,只有页面大小和跳过计数属性。 此外,现在我还有一些类,它们也包含但未分页。 在我的测试中,我希望他们都能实现一个接口,这样我就可以用一些更基本的测试来生成一个通用的基本测试类。为此,我添加了我认为会起作用的内容: 我将PagedResults更改为: 错误 但现在编译器抱怨PagedResultBase继承的所有地方的使用情况(?)从。 但是,如果我将接口
本文向大家介绍C#使用dynamic类型访问JObject对象,包括了C#使用dynamic类型访问JObject对象的使用技巧和注意事项,需要的朋友参考一下 dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。但如果没有,
如果按照“字节”->“短”->“int”->“长”->“浮点”->“双倍”的自动转换,那么输出应该打印“双倍”,对吗? (https://www.geeksforgeeks.org/type-conversion-java-examples/)
大家好,我正在制作一个菜谱应用程序,它显示食物的名称、图像和ingredants,所以我制作了一个简单的主页,制作了requst和一个类,该类提供了我从spooncular使用的这个url的数据。通用域名格式: https://api.spoonacular.com/recipes/complexSearch?apiKey=8fe91444f092411fa6011b71fd6e582d 这是主课