我可以防止将 int typedef 隐式转换为 int 吗?
Can I prevent implicit conversion of an int typedef to int?
我希望以下内容不编译。
typedef int relative_index_t; // Define an int to only use for indexing.
void function1(relative_index_t i) {
// Do stuff.
}
relative_index_t y = 1; function1(y); // I want this to build.
int x = 1; function1(x); // I want this to NOT build!
有什么办法可以做到这一点吗?
>你不能用typedef
这样做。
请改用以下内容:
enum class relative_index_t : int {};
用法示例:
int a = 0;
relative_index_t b;
b = (relative_index_t)a; // this doesn't compile without a cast
a = (int)b; // this too
或者如果您更喜欢C++式演员表,请关注:
int a = 0;
relative_index_t b;
b = static_cast<relative_index_t>(a);
a = static_cast<int>(b);
您也可以使用BOOST_STRONG_TYPEDEF。
(@AlexanderPoluektov学分(
一种技术借鉴了Modula-2的不透明类型:
typedef struct {
int index;
} relative_index_t;
这可能足以防止使用 int
进行转换。 它还允许另一个成员变量允许其他功能,如年龄、序列号生成、边界检查等。
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度