Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Typdefs与隐式cast_C++_Typedef_Implicit Conversion - Fatal编程技术网

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。换句话说,没有进行隐式铸造:左侧和右侧都有完全相同的类型。