2012-03-01 46 views
1

例子:Typdefs和隐式转换

int main() 
{ 
    typedef int Oranges; 
    typedef int Apples; 

/* ... a lot of other code */ 

    Oranges not_apples = 10; 
    Apples apples = not_apples; // ??? confusing 
} 

问:我们能不能禁止隐式转换为这是通过的typedef声明的变量?

+1

使用类而不是typedef? – 2012-03-01 03:24:13

+0

在这个简单的例子中显而易见,但有时它更令人困惑。 – 2012-03-01 03:27:09

+4

如果您检查您的编译器文档,可能会提示您可以启用。但通常它是允许的,因为typedef只是另一种类型的别名。如果您想要按照James所建议的强类型检查使用类。 – 2012-03-01 03:32:39

回答

3

typedef实际上只会为基本类型创建一个别名,因此您创建的两种类型实际上只是int的别名。你在找什么是boost::strong_typedef

+1

+1。换句话说,没有“隐式投射”正在进行:左侧和右侧都具有*完全相同的类型。 – ruakh 2012-03-01 03:35:48

1

您可能想隐藏结构(类)中的typedef类型。无论如何,几乎所有的抽象值迟早都需要比简单的“int”更详细的represantion。