【发布时间】:2020-04-11 02:03:10
【问题描述】:
主要来自 Python 背景,我在处理 C++ 中的类型时有些吃力。
我正在尝试通过几个采用不同类型作为参数的重载构造函数之一来初始化一个类变量。我读过使用auto 关键字可用于变量的自动声明,但在我的情况下,它不会被初始化,直到选择构造函数。但是编译器对不初始化 value 感到不满。
class Token {
public:
auto value;
Token(int ivalue) {
value = ivalue;
}
Token(float fvalue) {
value = fvalue;
}
Token(std::string svalue) {
value = svalue;
}
void printValue() {
std::cout << "The token value is: " << value << std::endl;
}
};
在 python 中,这可能看起来像:
class Token():
def __init__(self, value):
self.value = value
def printValue(self):
print("The token value is: %s" % self.value)
在这种情况下使用 auto 关键字的正确方法是什么?我应该完全使用不同的方法吗?
【问题讨论】:
-
我相信你根本就不能用
auto给班级成员?相关但过时的问题:Is it possible to have an “auto” member variable? -
有什么理由不使用模板?
-
使用 python,类型是在运行时在每个操作上确定的——这需要开销,但允许变量类型从一个语句更改为下一个语句。在 C++ 中,需要提前知道类型,以便代码可以编译 - float 和 int 具有不同的二进制布局,并且需要不同的汇编指令才能使用。如果您希望在运行时具有灵活性,则需要使用联合类型(例如变体)选择包含每种类型的有效代码的多个分支之一,从而增加性能开销。如果您想将 int 和 float 版本分开,模板是您的朋友。
标签: c++ constructor initialization overloading auto