标签: assignment-operator

将一种类型的向量分配给另一种类型的向量

我有一个"活动"课程.由于处理日期的方式,我们需要将此类包装在"UIEvent"类中,该类保存事件,并以另一种格式包含事件的日期.

允许从Event转换到UIEvent并返回的最佳方法是什么?我认为重载UIEvent的赋值或复制构造函数来接受事件(反之亦然)可能是最好的.

c++ operator-overloading assignment-operator

6
推荐指数
2
解决办法
3485
查看次数

6
推荐指数
1
解决办法
1509
查看次数

C++ Qt反射与复制和分配

由于QObject文档和许多其他人解释,一个QObject有身份,从而隐藏了它的拷贝构造函数和赋值操作符.

但是,我并非源于QObject其动态属性功能或信号/插槽功能.我只想要反思或访问的能力Foo::staticMetaObject.

class Foo : public QObject {
    Q_OBJECT
    Q_ENUMS(Color)
public:
    enum Color { Blue, Red, Pink };
private:
    Color color;
};

Q_DECLARE_METATYPE(Foo::Color)
Run Code Online (Sandbox Code Playgroud)

然后,我无法复制Foo:

Foo a;
Foo b;
a = b;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,允许复制和分配的最佳方法是什么?我是否绝对需要编写复制构造函数和赋值运算符?他们会是什么样子?反思仍然有效吗?

c++ qt copy-constructor assignment-operator qobject

6
推荐指数
1
解决办法
3482
查看次数

为什么"="R运算符不应该用在函数中?

手册说明:

运算符'< - '可以在任何地方使用,而运算符'='仅允许在顶层(例如,在命令提示符下键入的完整表达式中)或作为支撑表达式列表中的子表达式之一.

这里的问题提到了在函数调用中使用时的区别.但在函数定义中,它似乎正常工作:

a = function () 
{
    b = 2
    x <- 3
    y <<- 4
}

a()
# (b and x are undefined here)
Run Code Online (Sandbox Code Playgroud)

那么为什么手册提到了the operator ‘=’ is only allowed at the top level

语言定义中没有任何关于它的内容(没有=列出运算符,真可惜!)

r assignment-operator

6
推荐指数
2
解决办法
470
查看次数

vb.net中作业的返回值是多少?

当我完成作业时,返回值是多少?

例如,我可以这样做吗?(即赋值返回指定的值)

Dim a As Integer = 1
Dim b As Integer = 2
a = b = 3
Run Code Online (Sandbox Code Playgroud)

我今天写这段代码时提出了这个问题:

Dim updates = GetUpdates()
While updates.Count > 0
    Foo.ApplyUpdates(updates)
    updates = GetUpdates()
End While
Run Code Online (Sandbox Code Playgroud)

我希望我能用这种方式写出来......

While (updates = GetUpdates).Count > 0
    Foo.ApplyUpdates(updates)
End While
Run Code Online (Sandbox Code Playgroud)

我知道它不是那么干净......(而且我完全没有声明updates)但它让我对分配如何在.NET中工作感到好奇......它是一个具有返回值的函数吗?如果是这样的话......它又回归了什么?

编辑

我尝试了第一块代码.看起来编译器将其解释为将b和3的比较结果分配给...当然是编译器错误.

对于第二个代码块,我得到的是运算符=没有定义为什么类型updates是...即它认为它是一个比较,而不是一个赋值.

那么为了补充我的问题,为什么它会这样工作呢?是不是因为vb.net重载符号=有两个含义(赋值和比较)?

vb.net return-value assignment-operator

6
推荐指数
1
解决办法
1047
查看次数

多重赋值(field = Property = value)

在C#中这样做是否安全?

field = Property = value;
Run Code Online (Sandbox Code Playgroud)

是否保证连续调用setter和getter并且field只分配getter的结果而不一定value?编译器会优化它value吗?

.net c# properties variable-assignment assignment-operator

6
推荐指数
1
解决办法
1333
查看次数

检测基类的分配以指向派生类的引用

我目前正在调查多态类型和赋值操作之间的相互作用.我主要担心的是有人是否可能尝试将基类的值分配给派生类的对象,这会导致问题.

这个答案中我了解到,基类的赋值运算符总是被派生类的隐含定义的赋值运算符隐藏.因此,对于赋值给简单变量,不正确的类型将导致编译器错误.但是,如果通过引用进行赋值,则情况并非如此:

class A { public: int a; };
class B : public A { public: int b; };
int main() {
  A a; a.a = 1;
  B b; b.a = 2; b.b = 3;
  // b = a; // good: won't compile
  A& c = b;
  c = a; // bad: inconcistent assignment
  return b.a*10 + b.b; // returns 13
}
Run Code Online (Sandbox Code Playgroud)

这种形式的赋值可能会导致不一致的对象状态,但是没有编译器警告,并且代码看起来对我来说是非邪恶的.

是否有任何成熟的习惯用于检测此类问题?

我想我只能希望运行时检测,如果我找到这样一个无效的赋值就抛出异常.我刚才能想到的最好的方法是基类中的用户定义的assigment运算符,它使用运行时类型信息来确保this实际上是指向base实例的指针,而不是派生类的指针,然后执行手动逐个成员的副本.这听起来像很多开销,严重影响代码可读性.有更容易的事吗?

编辑:由于某些方法的适用性似乎取决于我想做什么,这里有一些细节.

我有两个数学概念,比如.每个领域都是一个环,但不是相反.有几种实施方式中的每个,并且它们共享共同的基类,即AbstractRingAbstractField,从前者衍生后者.现在我尝试实现基于的易于编写的引用语义 …

c++ inheritance reference assignment-operator

6
推荐指数
1
解决办法
457
查看次数

重载abstract operator =时Clang链接器错误

VisualStudio 2013编译器处理以下代码就好了,但是clang 5.0和6.2给我一个链接器错误:

#include <memory>

using namespace::std;

class IBase
{
public:
    virtual IBase& operator=(const IBase& other) = 0;
};

class Base : virtual public IBase
{
public:
    Base& operator=(const IBase& other) override
    {
        const Base& b = dynamic_cast<const Base&>(other);
        return *this = b;
    }

    virtual Base& operator=(const Base& other)
    {
        return *this;
    }
};

class IDerived : virtual public IBase
{
};

class Derived : public IDerived, public Base
{
public:
    using Base::operator=;

};

int main(int argc, const char * …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance operator-overloading assignment-operator c++11

6
推荐指数
1
解决办法
258
查看次数

什么是=>运算符,不与lambda表达式一起使用?

前几天我正在看某人的图书馆,他们有这个:

internal static string BaseUrl => "https://api.stripe.com/v1";
public static string Invoices => BaseUrl + "/invoices";
Run Code Online (Sandbox Code Playgroud)

是不是=>只是作为赋值=运算符?这不是一样的:

internal static string BaseUrl = "https://api.stripe.com/v1";
public static string Invoices = BaseUrl + "/invoices";
Run Code Online (Sandbox Code Playgroud)

从来没有见过这个.

c# lambda assignment-operator

6
推荐指数
1
解决办法
88
查看次数

在为`x <y < - z`定义它时,`<< - `的模糊性

@ g-grothendieck对这个问题的回答激发了我玩一些赋值函数(他们甚至有名字吗?),比如==<-><-.

请参阅以下内容:

`><-` <- function(e1,e2,value) replace(e1, e1 > e2, value)
x <- c(5,15)
x > 10 <- 42
x
# [1]  5 42
Run Code Online (Sandbox Code Playgroud)

我也可以定义它<:

`<<-` <- function(e1, e2, value) replace(e1, e1 < e2, value)
x <- c(5,15)
x < 10 <- 42
x
# [1] 42 15
Run Code Online (Sandbox Code Playgroud)

但问题是现在<<-重新定义了运算符,这不再起作用了:

x <<- "hello"
Run Code Online (Sandbox Code Playgroud)

替换错误(e1,其中(e1 <e2),值):缺少参数"value",没有默认值

有趣的是,即使它没有被覆盖也要x < y <- z打电话<<-.

rm(`<<-`)
x < 10 <- 42
Run Code Online (Sandbox Code Playgroud)

x …

r variable-assignment assignment-operator

6
推荐指数
1
解决办法
79
查看次数