具有空的(无效)结构的平等
Equality with an empty (null-like) struct
此处问题的答案解决了初始化null-reset或零struct。
我如何检查平等?
说我的结构X定义如下:
struct MyStruct {
int a;
int b;
};
和空结构:
static const struct MyStruct EmptyStruct;
如何在函数中检查对X型结构的函数?
的引用void myFunction (... , MyStruct &x, ...){
//some code
if (x != EmptyStruct){ // this doesn't work (see error below)
}
//some code
}
尝试上述问题时会遇到的错误:
'operator!='在'x!= emptsumpstruct'
中没有匹配edit :为了使其更加清楚,我了解结构的超载!=运算符的错误消息,但是由于empterments是一种特殊的类型,我该如何处理?<<<<<<<<<<<<<<<<<</p>
我想重点是我类型的结构A = 0和B = 0与应代表null样结构的空台面不同。
您真的需要下定决心,无论您的MyStruct
是值类型还是身份类型。
如果是一个值类型,那么您要定义其价值的某个部分,因为它是空的:
struct MyStruct {
int x;
int y;
bool empty;
};
如果是身份类型,则要检查身份:
void myFunction(MyStruct &m) {
if (&m == &EmptyStruct)
// reference to EmptyStruct. Act accordingly.
}
如果您需要像空中台面这样的单数值,则可能需要考虑通过(智能)指针,并与nullptr
进行比较以确定您是否收到了单数值。
作为一般规则,我通常会避免使用这种类型的设计。身份类型对大多数C 程序员来说都是陌生的,而单数值创建的特殊情况通常是您最好的情况。
您需要超负荷相等运算符,测试结构的每个元素。
bool MyClass::operator==(const MyClass &other) const {
... // Compare the values, and return a bool result.
}
只需超载operator==
(或operator!=
)即可。或(由于默认情况下,struct
的所有成员都是public
),请检查结构内的所有元素。
由于您谈论的是您的结构是"空" - 没有这样的事情。创建对象时,应由构造函数自动分配其内存。如果要检查传递的结构是否静态EmptyStruct
,请检查两者的地址。
由于您是通过参考来进行对象,因此我假设您要测试用户是否实际将全局EmptyStruct
对象作为函数参数传递。可以通过比较地址来轻松实现:
void foo(MyStruct & x)
{
if (&x == &EmptyStruct) { /* ... */ }
}
(这假定MyStruct
不超载operator&
。)
听起来您要测试x
是否指与EmptyStruct
相同的对象,在这种情况下,您要比较地址:
if (&x != &EmptyStruct)
尽管这是一件奇怪的事情。使用指针,如果您想要一个可用的参考式类型,则使用指定符号为"无对象"更有意义。
。 ==
和 !=
用于比较值,而不是对象身份,如果要为类类型定义它们,则必须超载。
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- 在另一个结构中声明内部结构会导致错误:结构使用无效
- 结构作为参数的函数产生错误:free():无效指针:0x00007efd47b
- 从 WindowsAPI 调用 NetLocalGroupAddMembers 时,安全 ID 结构无效错误
- 在结构中访问数组时无效使用非静态数据成员
- 无效操作数以二进制读取结构的阵列
- C++ 无效的比较器排序结构向量
- Valgrind 抱怨通过指向结构的指针访问结构成员时读取无效
- 具有空的(无效)结构的平等
- “无效的操作数是二进制表达式”当使用自定义结构作为C 中的MAP索引时
- 结构的前向声明无效
- 结构sqlite3的sqlite3c++正向声明导致析构函数中删除时出现无效指针错误
- 如何判断我的结构tm是否处于无效状态
- 嵌套结构:在定义结构指针时使用了无效的非静态成员
- 具有结构的映射的前面的声明符无效
- 使用指向结构数组的指针的参数类型无效
- 尝试将结构复制到设备内存时 CUDA 参数无效 (cudaMemcpy)
- 获取类型的错误 无效使用不完整类型的"结构节点"
- 命名空间 ;")"令牌之前的预期非限定 ID ;结构使用无效
- 在哪些体系结构上计算无效指针不安全