#include <iostream>
#include <string>
class Token {
public:
Token() : tok(INT), ival(0) {}
~Token() {
if (tok == STR) {
sval.~basic_string();
}
}
Token& operator=(int i) {
if (tok == STR) {
sval.~basic_string();
}
ival = i;
tok = INT;
return *this;
}
Token& operator=(char c) {
if (tok == STR) {
sval.~basic_string();
}
ival = c;
tok = CHAR;
return *this;
}
Token& operator=(double d) {
if (tok == STR) {
sval.~basic_string();
}
ival = d;
tok = DBL;
return *this;
}
Token& operator=(const std::string& s) {
if (tok == STR) {
sval = s;
}
else {
new(&sval) std::string(s);
}
tok = STR;
return *this;
}
Token& operator=(const Token& t) {
if (tok == STR && t.tok != STR) {
sval.~basic_string();
}
if (tok == STR && t.tok == STR) {
sval = t.sval;
}
else {
copyUnion(t);
}
tok = t.tok;
return *this;
}
private:
enum {INT, CHAR, DBL, STR} tok;
union {
char cval;
int ival;
double dval;
std::string sval;
};
void copyUnion(const Token& t) {
switch (t.tok)
{
case INT:
ival = t.ival; break;
case CHAR:
cval = t.cval; break;
case DBL:
dval = t.dval; break;
case STR:
new(&sval) std::string(t.sval); break;
}
}
};
int main() {
Token t1, t2, t3, t4, t5;
t1 = 42;
t2 = 'a';
t3 = 3.14;
t4 = std::string("Hello, World!");
std::cout << "t1 assigned with int: 42" << std::endl;
std::cout << "t2 assigned with char: 'a'" << std::endl;
std::cout << "t3 assigned with double: 3.14" << std::endl;
std::cout << "t4 assigned with string: \"Hello, World!\"" << std::endl;
t5 = t4;
std::cout << "t5 copied from t4 (which contains a string)" << std::endl;
t4 = 100;
std::cout << "t4 reassigned with int: 100" << std::endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具