我有2个相同大小,布局和对齐的结构,但是有不同的类型。我想把一个复制到另一个。
struct one s1;
struct two s2;
...
s1 = (struct one)s2; // error: conversion to non-scalar type requested
s1 = *((struct one*)&s2); // fine?
第二种方法是安全的吗?便携式?
奖金:这里语言设计师的想法是什么,他们确保在我开始自拍之前取消安全措施吗?
答案 0 :(得分:2)
由于违反严格别名规则,第二种方法是未定义的行为。即使struct one
和struct two
具有相同的布局,也不允许使用类型struct one
的左值来访问类型为struct two
的对象,反之亦然。
通常,只允许使用字符类型访问另一个对象,通过不同类型的表达式访问对象;或通过工会。
另一种选择是:
memcpy(&s1, &s2, sizeof s1);