【发布时间】:2011-01-26 12:14:11
【问题描述】:
是否可以从 void* 重新映射 STL 类对象?
#include <string>
void func(void *d)
{
std::string &s = reinterpret_cast<std::string&>(d);
}
int main()
{
std::string s = "Hi";
func(reinterpret_cast<void*>(&s));
}
【问题讨论】:
-
为什么要这样做?你有什么可能的理由想要
reinterpret_cast到void*? (对于它的价值,转换 到void*是隐式的,不需要强制转换。当转换回来时,static_cast就足够了。) -
@Nick:许多不正确的代码似乎“有效”。您应该测试代码是否存在编译器和其他错误,但没有错误并不意味着没有问题。
-
@James:在实际代码中,
string s是临时的,一旦通过 func 就会被销毁。我正在寻找绑定对由void*传递的临时变量的引用。 -
您至少误解了两件事:1)调用函数时创建的临时对象在函数返回之前不会被销毁;2)您只能通过将临时对象绑定到在创建时立即引用,而不是通过传递它然后绑定它。