Typdefs和隐式转换
问题描述:
例子:Typdefs和隐式转换
int main()
{
typedef int Oranges;
typedef int Apples;
/* ... a lot of other code */
Oranges not_apples = 10;
Apples apples = not_apples; // ??? confusing
}
问:我们能不能禁止隐式转换为这是通过的typedef声明的变量?
答
typedef
实际上只会为基本类型创建一个别名,因此您创建的两种类型实际上只是int
的别名。你在找什么是boost::strong_typedef
。
+1
+1。换句话说,没有“隐式投射”正在进行:左侧和右侧都具有*完全相同的类型。 – ruakh 2012-03-01 03:35:48
答
您可能想隐藏结构(类)中的typedef类型。无论如何,几乎所有的抽象值迟早都需要比简单的“int”更详细的represantion。
使用类而不是typedef? – 2012-03-01 03:24:13
在这个简单的例子中显而易见,但有时它更令人困惑。 – 2012-03-01 03:27:09
如果您检查您的编译器文档,可能会提示您可以启用。但通常它是允许的,因为typedef只是另一种类型的别名。如果您想要按照James所建议的强类型检查使用类。 – 2012-03-01 03:32:39