首页 > TAG信息列表 > assignment-operator
c-赋值运算符和用户定义的构造函数之间的关系
#include <iostream> class A{ }; class B: public A{ public: B(A&& inA){ std::cout<<"constructor"<<std::endl; } }; int main(){ B whatever{A{}}; whatever=A{}; } 这个输出 constructor constructor 至少c – 赋值运算符中的序列点
让我们以具体的复合赋值运算符^ =为例. This stackoverflow page表示在评估^ =之后可能尚未对左操作数进行修改,因此使得代码a ^ = b ^ = a ^ = b未定义的行为.但事实似乎并非如此.该标准在5.17 [expr.ass]中说明了这一点 In all cases, the assignment is sequenced after the vc – 重载赋值运算符用下标运算符
我重载了下标运算符和赋值运算符,我试图获得赋值运算符的正确值 例 数组x;X [0] = 5;通过重载下标运算符我可以得到值0,但是当我重载赋值运算符时,它执行赋值但它不使用我的重载函数,因为可变2应该具有值5. class Array { public: int *ptr; int one,two; Array(intC链接列表赋值运算符
尝试为单个链表类构建赋值运算符.我以为我正确构建它,但仍然会出现内存泄漏. 该类由First和Last变量组成.然后是Node结构. Node结构如下所示: struct node { TYPE value; node * next; node * last; }; 我的赋值运算符看起来像这样,它仍然有内存泄漏 queue& queue::oc – 派生类继承基类赋值运算符?
在我看来,Derived类不会继承基类Assignment运算符 如果Derived类继承了Base类赋值运算符,请解释下面的例子 在下面的代码中,我在Derived中重写了基类operator =,因此Derived类的默认赋值运算符调用了重载的operator = #include <iostream> using namespace std; class Basc – 它是否提高了将赋值运算符标记为仅限左值的安全性?
如果T是具有赋值运算符的默认签名的类类型,那么我们可以写: T const &ref = ( T{} = something ); 这创造了一个悬垂的参考.但是,签名: T &operator=(T t) & 带有悬空引用的上述代码将无法编译.这可以防止我们返回指定临时对象的左值的一些情况 – 不良情况,因为它们可能导致悬c – 对于const成员,如何在没有operator =()的情况下使用push_back?
如何将push_back()转换为C std :: vector而不使用默认定义违反const成员的operator =()? struct Item { Item(int value) : _value(value) { } const char _value; } vector<Item> items; items.push_back(Item(3)); 我想保留_value const,因为它在构造对象后不应该改c – 隐式生成的赋值运算符是否应该是&ref-qualified?
以下代码在gcc 4.8.1上编译没有问题: #include <utility> struct foo { }; int main() { foo bar; foo() = bar; foo() = std::move( bar ); } 似乎隐含生成的foo赋值运算符不是& ref-qualified,因此可以在rvalues上调用.根据标准,这是正确的吗?如果是这样,有什么理c – 什么是复制和交换习语?
这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C 11时,习语会改变吗? 虽然在许多地方已经提到过,但我们没有任何单一的“它是什么”问题和答案,所以在这里.以下是前面提到的地方的部分列表: > What are your favorite C++ Coding Style idioms: Copy-swap > Copy constructJava赋值运算符执行
在Java中,我理解赋值求值为右操作数的值,因此x ==(y = x)等语句的求值为true. 但是,此代码输出错误. public static void main(String[]args){ String x = "hello"; String y = "goodbye"; System.out.println(x.equals(x = y)); } 为什么是这样?在我的理解中,它首先c – 如何在地图中放置一个“删除”复制ctor和赋值运算符的类?
因为我在一个不太完整的C 11编译器(VS 11)上,我收到一个关于防止使用复制ctor赋值运算符的链接器错误.一切都是花花公子,但问题是我不能把我的类放在一个std :: map中,其中key是uin32_t,value是我的类.我甚至试过安慰,但它不起作用. 我在想std ::将unique_ptr移动到地图中,但是不想c – 为什么我不能拥有纯虚拟赋值运算符?
我在C操作符中有点迷失.我想为两个不同的类强制执行赋值运算符,即因此可以为彼此分配一个: class A { public: virtual A &operator =(const A &a) = 0; }; class B : public A { public: virtual A &operator =(const A &a) override { std::cout << "B" <<C Assignment构造函数
如果我有两个A和B类,我做A = B,调用赋值构造函数? A级或B级的那个?解决方法:有复制构造函数和赋值运算符.由于A!= B,将调用复制赋值运算符. 简答:operator =来自A类,因为你要分配给A类. 答案很长: A = B不起作用,因为A和B是类类型. 你可能意味着: A a; B b; a = b; 在这种情况下,将调用c – 允许operator =仅在同一类的对象之间使用?
我有一个类层次结构,我想禁止这样做: Foo *f = new Foo(); Bar *b = new Bar(); f = b; 其中Foo是Bar的超类.这样做会切割对象的Bar部分.我知道你可以通过使operator = private来解决这个问题,但是如果它们属于不同的类型,是否可以禁止使用赋值运算符? 就像使operator = private但c – 为什么移动构造函数会影响is_assignable?
刚刚来自is_assignable and std::unique_ptr. @Angew告诉我,因为std :: unique_ptr< int,do_nothing>和std :: unique_ptr< int>是不同的类型,所以static_assert(不是std :: is_assignable< std :: unique_ptr< int>,std :: unique_ptr< int,do_nothing>> :: value,c – 单元测试复制构造和赋值运算符
我正在为几个类(C)编写单元测试,并遇到了一个试图为复制构造函数和赋值运算符编写单元测试的问题. 一个基本的问题是,程序员将一个成员添加到类中,然后忘记更新c’ctor和/或operator =. 我当然可以按照以下方式编写单元测试: class MyClass() { public: int a, b; non_triphp:$a = $b OR $a = $c vs.三元
我需要将第二个变量的值分配给第三个变量,如果第一个变量是(bool)false或未定义,则需要使用第二个变量的值. 我通常使用三元表示法这样做: $foobar = ($some_prefix_and_some_variable_name) ? $some_prefix_and_some_variable_name : $bar ; 但是,如果$foo变量名称很长,有时这不c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?
参见英文答案 > Integer summing blues, short += short problem 5个 我偶然发现在小于32位的基本类型上不允许按位或算术运算的行为,但事实上允许相应的赋值操作: short BitwiseAnd(short a, short b) {C#赋值给对象引用直接
Person p = "Any Text Value"; 人是一个阶级. 无论如何这在C#中是可行的. 我的回答是否定的,但根据采访者的说法,这是可能的.他也没有给我任何线索.解决方法:你可以使用implicit conversion实现这一点.可以认为这是滥用隐式转换,因为在这种情况下,“任何文本值”应该代表什么并不Java多个三元运算符
我正在研究一些Java,因为我遇到了下面这段代码.我理解典型的三元运算符(例如下面以“boolean a”开头的行),但我无法理解如何读取以“boolean b”开头的行的表达式.任何有关如何阅读此行的帮助将不胜感激!谢谢! public class Ternary{ public static void main (String[] args){Java赋值运算符行为与C
这是在我处理“Cracking the Coding interview”问题时发生的: Write a function to swap a number in place (that is, without temporary variables) 我决定用Java编写我的解决方案(因为我计划在实习面试中使用Java.) 我提出了一个解决方案,我几乎确信这是正确的答案(因为我在