是否可以定义基元类型的隐式强制转换行为?C++
Is it possible to define implicit casting behavior of primitive types? C++
用户可以定义基元如何在基元之间转换吗?或者他们如何将强制转换为用户定义的类型?("隐式铸造构造函数"?yikes)
这是一个假设性的问题,很难想象它的用法,但也许有人想影响int如何转换为bool。
您无法更改内置类型的行为方式。不允许这样破坏语言,就像不能为做其他事情的int
重载新的operator+
一样。
语言需要能够做出某些基本保证,这样才能编写依赖基本行为的库!
您可以通过提供一个可通过一个参数调用的构造函数,将任何类型转换为用户定义的类型,例如:
struct Foo
{
Foo(T const &);
// ...
};
现在你可以说,T x; Foo y = x;
等
你也可以做相反的事情,并提供从你的类的转换:
struct Foo
{
operator S() const;
// ...
};
现在你也可以说,S s = y;
。
不能更改基元转换为其他基元的方式
通过提供转换构造函数,可以定义如何将用户定义的类型强制转换为基元类型/任何类型。
用户可以定义基元如何在基元之间转换吗?
没有。这种语言是不可变的。
或者它们如何转换为用户定义的类型?("隐式铸造构造函数"?yikes)
是:
struct X {
X() {}
X(int a) {} // implicit cast
};
X x;
x = 10; // int implicitly cast to X
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 将缓冲区复制到剪贴板 [换行错误]
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 如何正确转发/换行static_cast?
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- C++在标点符号后将字符串换行
- 提取后返回换行符的C++istream.get()
- 使用 fopen 读取C++文本文件,无需换行转换
- CSV 文件转换为带换行符的 2D 数组 CPP
- 将文件的前1000个字符读入缓冲区,将换行符转换为 ,并将字符串的地址位置存储为char*[]
- 流未将"rn"转换为换行符