C++ Typdefs与隐式cast
例如:C++ Typdefs与隐式cast,c++,typedef,implicit-conversion,C++,Typedef,Implicit Conversion,例如: int main() { typedef int Oranges; typedef int Apples; /* ... a lot of other code */ Oranges not_apples = 10; Apples apples = not_apples; // ??? confusing } 问:我们可以禁止对通过typedefs声明的变量进行隐式强制转换吗?typedef实际上只为基类型创建别名,因此您创建的两种类型实际上都是int的别名。您
int main()
{
typedef int Oranges;
typedef int Apples;
/* ... a lot of other code */
Oranges not_apples = 10;
Apples apples = not_apples; // ??? confusing
}
问:我们可以禁止对通过typedefs声明的变量进行隐式强制转换吗?typedef实际上只为基类型创建别名,因此您创建的两种类型实际上都是int的别名。您需要的是boost::strong_typedef。typedef实际上只为基类型创建别名,因此,您创建的两种类型实际上都只是int的别名。您要查找的是boost::strong_typedef。您可能希望在结构类中隐藏您的typedef类型。无论如何,几乎所有的抽象值迟早都需要比简单int更详细的表示。您可能希望在结构类中隐藏您定义的类型。无论如何,几乎所有的抽象值迟早都需要比简单int更详细的表示。使用类而不是typedef?在这个简单的示例中,这一点很明显,但有时甚至更令人困惑。如果查看编译器文档,可能会出现一个警告。但通常是允许的,因为typedef只是另一个类型的别名。如果您想进行强类型检查,请按照James的建议使用类。警告就足够了,谢谢,我会搜索它。使用类而不是typedef?在这个简单的示例中,这一点很明显,但有时甚至更令人困惑。如果您查看编译器文档,可能会出现一个警告。但通常是允许的,因为typedef只是另一个类型的别名。如果您想要强类型检查,请使用James建议的类。警告就足够了,谢谢,我会搜索它。+1。换句话说,没有进行隐式铸造:左侧和右侧都有完全相同的类型。+1。换句话说,没有进行隐式铸造:左侧和右侧都有完全相同的类型。