标签: assignment-operator

不带复制构造函数的C++赋值运算符

问题:我可以定义赋值运算符而不是复制构造函数吗?对于内部类(未在API中公开),这仍然是一个糟糕的设计实践吗?

我需要它的原因:正如这个问题提到的那样,QObject使其复制构造函数和赋值运算符成为私有,这样如果子类尝试使用其中任何一个,则在编译时发出错误.

我需要以复制"价值",然而定义赋值运算符(而不是"身份"作为Qobject文档描述,我不随地使用这个类的拷贝构造函数.

我不想编写复制构造函数的原因是它将复制我不会使用的代码.

c++ qt copy-constructor assignment-operator qobject

2
推荐指数
1
解决办法
2119
查看次数

错误:在&token之前预期的nonqualified-id

我是C++的新手,我正在创建我的第一堂课.除了一个错误之外,我有任何错误:

error: expected unqualified-id before & token
Run Code Online (Sandbox Code Playgroud)

赋值运算符签名如下所示:

Job::& operator = (const Job &v )
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能想到的一切,删除了&,做了Job :: Job&operator,删除了Job.什么都行不通.

我知道这很简单,我只是不知道它是什么.

c++ assignment-operator

2
推荐指数
1
解决办法
8653
查看次数

如果没有,Javascript分配变量?

如果评估为false,Javascript中是否有一些速记来分配变量?

在红宝石中,我可以这样做:

foo |= "bar"
Run Code Online (Sandbox Code Playgroud)

如果foo的计算结果为false,则将"bar"分配给foo,如下所示:(使用该| =运算符)

var cars_by_brand_and_color = {};
for (var car in parking_lot) {
   // add a brand if it doesn't exist yet;
   // cars_by_brand_and_color['chevrolet'] = {};
   cars_by_brand_and_color[car['brand']] |= {};
   // and add that color to the brand if it doesn't exist yet;
   // cars_by_brand_and_color['chevrolet']['grey'] |= {}; 
   cars_by_brand_and_color[car['brand']][car['color']] |= {};
   // now let's add that car; 
   // cars_by_brand_and_color['chevrolet']['grey']['BDB-565'] = 'Mr. Smith';
   cars_by_brand_and_color[car['brand']][car['color']][car['lisence_plate']] = car['owner']
};
Run Code Online (Sandbox Code Playgroud)

javascript variable-assignment assignment-operator

2
推荐指数
1
解决办法
2462
查看次数

c ++默认复制和赋值运算符

我上课了

class Circle : public isCircle{
   private :
   int x;
   int y;
   vector<Circle*> _neighbors;
}
Run Code Online (Sandbox Code Playgroud)

where isCircle只是一个接口(使用虚方法),并且_neighbors包含指针的Circles未被此实例分配.我的问题是,在这种情况下,默认的复制和赋值运算符基本上会做深度复制吗?

c++ copy-constructor assignment-operator

2
推荐指数
1
解决办法
7926
查看次数

如何知道重载赋值运算符中的代码是否执行?

我有以下代码:

class Sales_item {
     public:
     int ii;
         Sales_item& operator=(const Sales_item &item)
     {
        cout << "Inside assignment\n"; // Line 1
        ii = item.ii;
        return *this; // Line 2
     }
};
Run Code Online (Sandbox Code Playgroud)

然后,我做了:(只是一个例子)

Sales_item s;
Sales_item s1 = s;
Run Code Online (Sandbox Code Playgroud)

Line 1没有执行.如何在重载的赋值中"看到"代码才能执行?例如,可能有复杂的代码,我想调试?我试图在第1行设置断点,但程序没有跳到该断点.

为何Line 2回归*this?我试图改变void并获得相同的结果.有什么不同?

c++ assignment-operator

2
推荐指数
1
解决办法
65
查看次数

构造函数低效,用于通过值从函数返回对象的情况

我的类Matrix有两个构造函数,包括复制一个,执行深度复制.这种解决方案非常适用于复制另一个对象的明显情况.虽然在以下情况中:

Matrix m = m1 * m2; // for earlier constructed m1 & m2
Run Code Online (Sandbox Code Playgroud)

在我看来效率低下,因为我在乘法运算中创建了一个对象,只是为了复制它而不是直接赋值给m.矩阵可以占据很大的内存.如何更好地处理它,专业人士的常见做法是什么?

矩阵作为二维列表动态实现,如稀疏矩阵的情况.

PS我明白乘法的结果是局部的.然而,我仍然认为,如果没有上述过度计算,它可以以某种方式处理得更好.

c++ copy-constructor assignment-operator

2
推荐指数
1
解决办法
93
查看次数

增量运算符++

可能重复:
post increment operator java
"x = x ++"后的x是什么?

有人能解释一下以下每个小程序的结果吗?:

public static void main(String[] args) {
    int a = 10;
    a = a++;
    System.out.println(a);
}
Run Code Online (Sandbox Code Playgroud)

结果是:10

为什么不是11因为a应该在任务后增加?这是因为它涉及到opeartor左右不同的变量=?

下一个:

public static void main(String[] args) {
    int a = 10;
    a = ++a;
    System.out.println(a);
}
Run Code Online (Sandbox Code Playgroud)

结果是:11

可理解,但编译器提出警告:"对变量a的赋值没有效果".结果不同意见.

更新:

我不修改我原来的问题,但我添加这个评论以澄清现在我抓住了警告的含义.也就是说,即使没有赋值(通过简单的语句++ a),结果也是相同的(11).

java increment assignment-operator

2
推荐指数
1
解决办法
433
查看次数

一种通过'new'实现赋值的方法

有三种方法可以使用关键字'new'.首先是正常的方式.假设学生是一个班级.

Student *pStu=new Student("Name",age);
Run Code Online (Sandbox Code Playgroud)

第二种方式.只调用内存空间而不调用构造函数.

Student *pArea=(Student*)operator new(sizeof(student));//
Run Code Online (Sandbox Code Playgroud)

第三种方式称为"放置新".只调用构造函数来初始化meomory空间.

new (pArea)Student("Name",age);
Run Code Online (Sandbox Code Playgroud)

所以,我在下面写了一些代码.

class Student
{
private:
    std::string _name;
    int _age;
public:
    Student(std::string name, int age):_name(name), _age(age)
    {
        std::cout<<"in constructor!"<<std::endl;
    }
    ~Student()
    {
        std::cout<<"in destructor!"<<std::endl;
    }
    Student & assign(const Student &stu)
    {
        if(this!=&stu)
        {
            //here! Is it a good way to implement the assignment?
            this->~Student();

            new (this)Student(stu._name,stu._age);

        }
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码适用于gcc.但是我不确定它是否会导致错误,或者明确地调用析构函数是危险的.打电话给你一些建议?

c++ new-operator assignment-operator

2
推荐指数
1
解决办法
162
查看次数

左值和右值赋值错误

int x = 3;
int y = 5;
x++ = y;
cout << x << endl;
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码给我一个错误,我得到的具体错误是

左值作为赋值的左操作数.

我正在尝试回顾我的C和C++.从我的理解,上面的代码理论上应该复制y到into 的值x,然后最后增加x复制完成后的值.所以它会打印出"6".

c++ assignment-operator post-increment

2
推荐指数
1
解决办法
1733
查看次数

如何重载operator =用于初始化一个新对象?

我是C++的新手,我正在努力理解Class是如何工作的.当我遇到这个问题时,我为自己做了一个简单的例子.我的类有一个私有属性num,我试图用这种方式用int初始化它:Number one = Number::ONE;但它不起作用.但是,当我这样做时它工作正常:Number one; one = Number::ONE.我更喜欢第一种选择.请帮忙!

这是我的完整代码:

class Number {
public:
    enum {ONE, TWO, THREE, FOUR};
    Number();

    void print() const;

    Number& operator=(int);
private:
    int num;
};

Number& Number::operator=(int n) {
    num = n;
    return *this;
}

int main(int argc, const char * argv[]) {

    Number n = Number::ONE; // doesn't work :(
    n.print();

    return 0;
}

Number::Number() {
    num = 0;
}

void Number::print() const {
    cout << num << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ initialization assignment-operator

2
推荐指数
1
解决办法
1223
查看次数