static_cast<>和不相关的类
static_cast<> and unrelated class concersion
我有以下 2 个类:
class B;
class A
{
public:
A();
operator B() const;
};
class B
{
public:
B2();
};
在这里,A 定义了 B 类的隐式转换运算符。然后C++引用说:"如果存在从new_type到表达式类型的隐式转换序列,该序列不包括左值到右值、数组到指针、函数到指针、空指针、空成员指针或布尔转换,那么static_cast可以执行该隐式转换的逆转换"。意思是要编译以下内容
A a;
B b=a;
A a1=static_cast<A> (b);
但是 Xcode 给出了一条错误消息
您的C++引用不精确。标准(C++14 §5.2.9/7(说:
不包含左值到右值 (4.1(、数组到指针 (4.2(、函数到指针 (4.3(、空指针 (4.10(、空成员指针 (4.11( 或布尔值 (4.12( 的任何标准转换序列(子句 4(的逆函数 转换,可以使用
static_cast
显式执行。
请注意,它显示标准转换顺序。 static_cast
无法执行用户定义转换的反向操作。也不难看出为什么会这样;如果需要static_cast
执行用户定义的转换序列的逆运算,则必须能够反转任意算法。例如,如果A
持有一对整数,B
持有单个整数,并且A::operator B()
将两个整数相乘,则逆值必须以B
为单位分解整数......
相关文章:
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- std::less是否应该允许在编译时比较不相关的指针?
- 0 的 2D 数组 不相关循环的破坏逻辑 - C++
- 为什么数组到指针的输出不相关
- 如何使用模板元编程在自由函数C++链接两个不相关的类
- 为什么在使用不相关的宏时会阻止 while 循环结束?
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- 尝试编写函数尝试从字符串中提取数字,但它返回不相关的数字
- VSCODE C++ IntelliSense为替代定义找到不相关的Yocto Sysroots
- 什么保证两个不相关的线程中的不同不相关对象没有(不可避免的)争用条件?
- 对类型 'A *' 的非常量左值引用不能绑定到不相关的类型 'std::shared_ptr<A>' 的值
- 将函数从控制台应用程序移动到共享库项目似乎会带来不相关的编译错误
- 将不相关类型的对象reinterpret_cast空类是未定义的行为吗?
- 因为一行不相关的代码,速度相差那么大
- 对于循环重新分配完全不相关的变量
- 我可以使用 boost::bind 来存储不相关的对象吗?
- C++中的神秘:函数调用行为不端只是因为存在另一个函数调用,即使它们是不相关的