C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – static_cast与直接调用转换运算符?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_419_2@
虑以下类,就像一个简单的例子

#include <iostream>
#include <String>
using namespace std;

class point {
public:
    int _x{ 0 };
    int _y{ 0 };

    point() {}
    point(int x,int y) : _x{ x },_y{ y } {}
    operator String() const
        { return '[' + to_String(_X) + ',' + to_String(_y) + ']'; }

    friend ostream& operator<<(ostream& os,const point& p) {

        // Which one? Why?
        os << static_cast<String>(p); // Option 1
        os << p.operator String();    // Option 2

        return os;
    }
};

是应该直接调用转换运算符,还是只调用static_cast并让它完成工作?

这两行几乎完全相同(就是调用转换运算符),就我所知,它们的行为没有真正的区别.所以这里真正的问题是这是否真实.然这对我来说似乎是一样的,但仍然可能存在一些人们可能无法接受的微妙差异.

那些方法之间是否有任何实际差异(包括可能不适用于此示例的方法),除了它们的语法不同的事实?应该首选哪一个?为什么?

解决方法

在这种情况下,不是我所知道的,行为明智.

如果X具有类型Y的转换构造函数,则static_cast< X>(instance_of_Y)也允许转换.对Y的(可能不存在的)转换运算符的显式调用不能使用所提到的转换构造函数.当然,在这种情况下,std :: String没有用于point的转换构造函数.

因此,演员表更通用,这是我一般喜欢的. “将此对象转换为类型字符串”也比“调用运算符字符串()”更有意义.但是如果出于一些非常奇怪的原因你想避免使用转换构造函数,那么显式调用转换运算符就可以实现这一点.

@H_419_2@

大佬总结

以上是大佬教程为你收集整理的c – static_cast与直接调用转换运算符?全部内容,希望文章能够帮你解决c – static_cast与直接调用转换运算符?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。