我有一个标准集S. S包含一些MyType实例。 这是在S中获取指向MyType实例的指针的最佳方式吗?
MyType *pointerToMyType = (MyType*)(&*S.find(anotherInstanceOfMyType));
以上代码有效。我只是不确定它是最好还是最安全的方式。
修改:我在上面一行之前检查了找到S.end()的结果。
编辑:删除演员表会导致以下编译时错误:“从'const MyType *'到'MyType *'的转换无效”
答案 0 :(得分:3)
你应该不采用可变引用或指向set
中元素的指针。如果更改了它的属性,那么您将使容器的不变量无效,从而导致未定义的行为。那个编译时错误是有充分理由的,而且,你的代码显示了为什么C风格的强制转换是坏的一个很好的例子 - 因为它们可以抛弃const,而其他任何回答者都没有注意到,而如果你曾经被迫使用const_cast
,每个人都会注意到它有多糟糕。
但是,如果你选择有效的const MyType*
,那么演员阵容将是多余的,&*iterator
是一个非常好的方法。
答案 1 :(得分:1)
两件事,
static_cast
至于方法,如果你充实了你想要做的事情,可能会有更好的方法......
编辑:哎呀,static_cast
也是多余的......习惯,每当我看到C风格的演员......
答案 2 :(得分:1)
你有什么不错,但是:
答案 3 :(得分:1)
假设你知道元素存在......
这是在S中获取指向MyType实例的指针的最佳方法吗?
没有。你不需要演员。如果你这样做,它不应该是C演员,它应该是const_cast
。