C++ 常数的隐式转换

C++ 常数的隐式转换,c++,C++,考虑以下简单代码: struct vec { __m128 m128; inline operator __m128 &() { return m128; } } void someFunction(const vec &v) { someOtherFunction(v); //takes __m128 as argument } 每当我调用某个函数时,我都会收到一个错误,说我不能从常数v转换为_m128 我已尝试将此添加到结构中 inl

考虑以下简单代码:

struct vec {
__m128 m128;
    inline operator __m128 &() {
        return m128;
    }
}
void someFunction(const vec &v) {
    someOtherFunction(v); //takes __m128 as argument
}
每当我调用某个函数时,我都会收到一个错误,说我不能从常数v转换为_m128

我已尝试将此添加到结构中

inline operator const __m128 &() {
    return m128;
}
但是到处都会出现错误,说不能将参数从vec转换为uu m128

试试这个:

struct vec
{
    __m128 m128;

    operator __m128&()
    {
        return m128;
    }

    operator const __m128&() const
    {
        return m128;
    }
};
注意第二个重载中的双常量。第一个常量应用于返回值,第二个常量应用于运算符本身-它表示可以在对象的常量限定实例上调用运算符。

尝试以下操作:

struct vec
{
    __m128 m128;

    operator __m128&()
    {
        return m128;
    }

    operator const __m128&() const
    {
        return m128;
    }
};

注意第二个重载中的双常量。第一个常量应用于返回值,第二个常量应用于运算符本身-它表示可以在对象的常量限定实例上调用运算符。

是否尝试更改运算符本身的常量限定符?i、 e内联运算符const{uu m128&const{…}。对于第二个版本,您将返回一个常量m128,但是使用常量向量调用函数本身并不安全。您是否尝试过更改运算符本身的常量限定符?i、 e内联运算符const{uu m128&const{…}。对于第二个版本,您将返回一个常量m128,但是使用const vecs.works调用函数本身并不安全,我只是不知道为什么。我认为函数上的const限定符意味着this指针不存在,并且你不能访问类/结构,但是你需要访问才能返回m128,不是吗?你把它与静态方法混淆了。静态方法没有this指针。Const方法可以,但this指针是Const在这种情况下,它将是Const vec*this。@成员函数上的Ragdoll Const表示函数不修改对象。它允许对常量对象和引用调用函数。我只是不知道为什么。我认为函数上的const限定符意味着this指针不存在,并且你不能访问类/结构,但是你需要访问才能返回m128,不是吗?你把它与静态方法混淆了。静态方法没有this指针。Const方法可以,但this指针是Const在这种情况下,它将是Const vec*this。@成员函数上的Ragdoll Const表示函数不修改对象。它允许对常量对象和引用调用函数。