【发布时间】:2015-09-29 15:31:16
【问题描述】:
在 C++11 中,是否有一种干净的方法来禁用 typedef 之间的隐式转换,或者您是否必须做一些讨厌的事情,例如将您的 int 包装在一个类中并定义和删除各种运算符?
typedef int Foo;
typedef int Bar;
Foo foo(1);
Bar bar(2);
bar = foo; // Implicit conversion!
【问题讨论】:
-
Typedef 不是真实类型,它们只是真实类型的简写或别名。
-
所以
foo和bar其实是同一个类型,不涉及转换。 -
是的,这很清楚。但是现代 C++ 是否有一个替代品可以创建一个没有一堆样板的新类型?
-
@Barmar:我宁愿强调事物和事物的名称之间的区别。声明(包括 typedef 声明)引入 names,而不是 types。一个类型可以有多个名称。
-
@AndrewWagner 所以你基本上想要一些等同于 typedefs 的强类型枚举的东西?我不知道有一个。