标签: assignment-operator

内部类中的默认赋值运算符,带有引用成员

我遇到了一个我不明白的问题,我希望这里有人可以提供一些见解.简化代码如下(原始代码是自定义队列/队列迭代器实现):

class B
{
public:
    B() {};
    class C
    {
    public:
        int get();
        C(B&b) : b(b){};
    private:
        B& b;
    };
public:
    C get_c() { return C(*this); }
};

int main()
{
    B b;
    B::C c = b.get_c();


    c = b.get_c();
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

编译时,这会给我以下错误:

foo.cpp: In member function 'B::C& B::C::operator=(const B::C&)':
foo.cpp:46: error: non-static reference member 'B& B::C::b', can't use default assignment operator
foo.cpp: In function 'int main()':
foo.cpp:63: note: synthesized method 'B::C& B::C::operator=(const B::C&)' first required here
Run Code Online (Sandbox Code Playgroud)

我可以通过使用两个单独的C变量解决这个问题,因为它们应该是独立的'C'对象,但这只能隐藏问题(我仍然不明白为什么我不能这样做).

我认为原因是参考不能被复制,但我不明白为什么.我是否需要提供自己的赋值运算符和复制构造函数?

c++ reference assignment-operator

7
推荐指数
2
解决办法
5553
查看次数

模板赋值运算符重载神秘

我有一个简单的结构Wrapper,由两个模板化赋值运算符重载区分:

template<typename T>
struct Wrapper {

  Wrapper() {}

  template <typename U>
  Wrapper &operator=(const Wrapper<U> &rhs) {
    cout << "1" << endl;
    return *this;
  }
  template <typename U>
  Wrapper &operator=(Wrapper<U> &rhs) {
    cout << "2" << endl;
    return *this;
  }
};
Run Code Online (Sandbox Code Playgroud)

然后我宣布a和b:

Wrapper<float> a, b;
a = b;
Run Code Online (Sandbox Code Playgroud)

分配ba将使用非const模板赋值操作过载从上方和数字"2"被显示.

令我困惑的是:如果我宣布cd,

Wrapper<float> c;
const Wrapper<float> d;
c = d;
Run Code Online (Sandbox Code Playgroud)

并且分配dc,既没有使用两个赋值运算符重载,也没有显示输出; 因此调用默认的复制赋值运算符.为什么分配dc未使用const重载赋值操作符提供?或者相反,为什么分配ba …

c++ templates assignment-operator

7
推荐指数
2
解决办法
5632
查看次数

需要在Singleton类中私有化赋值运算符

有人可以证明在Singleton类实现中需要对赋值运算符进行私有化吗?

Singleton& operator=(Singleton const&);私有化解决了什么问题?

class Singleton {
public:
  static Singleton& Instance() {
    static Singleton theSingleton;
    return theSingleton;
  }

private:
  Singleton(); // ctor hidden
  Singleton(Singleton const&); // copy ctor hidden
  Singleton& operator=(Singleton const&); // assign op. hidden
  ~Singleton(); // dtor hidden
};
Run Code Online (Sandbox Code Playgroud)

c++ singleton assignment-operator

7
推荐指数
1
解决办法
4429
查看次数

谁创造了统一(或统一)赋值运算符这个术语?

一本C++ wiki书是指

...在C++ 0x中,这样的赋值操作符被称为一个统一的赋值运算符,因为它消除了需要编写两个不同的赋值运算符...

对于赋值运算符,它按值获取类的类型:

String & operator = (String s) // the pass-by-value parameter serves as a temporary
{
   s.swap (*this); // Non-throwing swap
   return *this;
}
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索这个词,但它似乎没有得到广泛使用.

它从何而来?

c++ history assignment-operator

7
推荐指数
1
解决办法
690
查看次数

在C++中初始化变量的偏好

从c ++开始,注意到你可以用两种方式初始化变量

int example_var = 3;  // with the assignment operator '='
Run Code Online (Sandbox Code Playgroud)

要么

int example_var(3);  // enclosing the value with parentheses 
Run Code Online (Sandbox Code Playgroud)

是否有理由使用一个而不是另一个?

c++ variable-assignment copy-constructor assignment-operator

7
推荐指数
2
解决办法
283
查看次数

涉及因素的data.table赋值

我正在使用data.table(1.8.9)和:=运算符来更新另一个表中的值.要更新的表(dt1)有许多因子列,带有更新的表(dt2)具有类似的列,其值可能不存在于另一个表中.如果dt2中的列是字符,我会收到一条错误消息,但是当我将它们分解时,我会得到不正确的值.

如何在不将所有因子首先转换为字符的情况下更新表格?

这是一个简化的例子:

library(data.table)

set.seed(3957)

## Create some sample data
## Note column y is a factor
dt1<-data.table(x=1:10,y=factor(sample(letters,10)))
dt1

##      x y
##  1:  1 m
##  2:  2 z
##  3:  3 t
##  4:  4 b
##  5:  5 l
##  6:  6 a
##  7:  7 s
##  8:  8 y
##  9:  9 q
## 10: 10 i

setkey(dt1,x)

set.seed(9068)

## Create a second table that will be used to update the …
Run Code Online (Sandbox Code Playgroud)

r updates assignment-operator r-factor data.table

7
推荐指数
1
解决办法
1027
查看次数

c ++默认赋值运算符

int a[10];
int b[10];
a = b;
Run Code Online (Sandbox Code Playgroud)

//

struct test {
    int a[10];
};

test a,b;
a = b;
Run Code Online (Sandbox Code Playgroud)

第一个代码不编译,因为我们不能分配数组,但第二个代码.类的默认赋值运算符不是简单地为每个数据成员调用赋值吗?为什么第二个代码会编译?

c++ compiler-errors variable-assignment assignment-operator

7
推荐指数
1
解决办法
2048
查看次数

STL - 赋值运算符与`assign`成员函数

vector(以及list其他容器)具有成员函数(MF)assign.我想比较assignMF(范围版本)与赋值运算符.

据我所知,在以下情况下使用是有用的assign:

  1. 人们想要分配向量的子范围(不是从开始到结束).
  2. 赋值是从数组完成的.

在其他情况下,assignMF 没有缺点,可以使用赋值运算符.我对吗?使用assignMF 还有其他一些原因吗?

c++ stl operators assignment-operator assign

7
推荐指数
1
解决办法
1361
查看次数

是否在C/C++中定义了链接未定义的行为?

忽略变量的类型,表达式a=b=c是否已在C和C++中定义了行为?

如果是的话,任何人都可以给我官方证据,比如标准中的引号吗?

PS我搜索了链接的任务,但我得到的是关联性,但我没有在C99标准中找到任何关于它的文本.也许我做错了?希望有人能帮助我.

c c++ variable-assignment assignment-operator

7
推荐指数
1
解决办法
4512
查看次数

C++ 中 operator= 的奇怪行为

我有一个基类 A 和两个派生类 B 和 C。 B 定义了 = 运算符,将基类 A 作为参数。

在类 B 上调用 = 时,有时会调用基类 A 的运算符而不是 B 中的运算符。

class A {
        public:

        void operator=(A &) {
                printf("A =\n");
        };
};

class B : public A {

        public:

        void operator=(A &s) {
                printf("B =\n");
        };
};

class C : public A {
};

int main()
{
        B b1, b2;
        C c;

        b1 = b2;
        b1 = c;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

A =
B =
Run Code Online (Sandbox Code Playgroud)
  • 为什么第一个赋值不调用 B::operator=()?

  • 为什么第二个赋值不调用 A::operator=() ,因为它也是从 …

c++ inheritance assignment-operator

7
推荐指数
1
解决办法
75
查看次数