问题标签 [assignment-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 常量类成员、赋值运算符和 QList
如果我是正确的,请确认并告诉我是否有更好的解决方案:
我知道具有常量成员的对象int const width;
不能由编译器隐式创建的合成赋值运算符处理。但是 QList (我想也是 std::list )需要一个工作赋值运算符。因此,当我想使用具有常量成员和 QList 的对象时,我有三种可能性:
- 不要使用常量成员。(不是解决方案)
- 实现我自己的赋值运算符。
- 使用其他不需要赋值运算符的容器
那是对的吗?还有其他优雅的解决方案吗?
我也想知道我是否可以:
- (4) 强制编译器创建一个处理常量成员的赋值运算符!(我不明白为什么这是一个这么大的问题。为什么操作员不够聪明,无法在内部使用初始化列表?或者我错过了什么?)
- (5) 告诉QList,我永远不会在列表中使用赋值操作。
编辑:我自己从不分配此类的对象。它们仅由复制构造函数或重载构造函数创建。所以赋值运算符只有容器需要,我自己不需要。
EDIT2:这是我创建的赋值运算符。我不确定它是否正确。Cell 有一个两个参数的构造函数。这些参数使用初始化列表设置两个常量成员。但该对象还包含其他变量(非 const)成员。
EDIT3:我发现这个线程几乎有相同的问题:C++:STL 与 const 类成员的麻烦所有答案结合在一起回答了我的问题。
c++ - 如何确保虚拟基类上的赋值运算符只被调用一次?
我在典型的菱形问题中使用虚拟继承:
我在每个类中都实现了一个名为“deep_copy_from”的方法(但它也可以是赋值运算符=())。该方法应该复制类自己的属性,并将副本传播到上面的类。
问题是 A::deep_copy_from 方法在我深度复制 D 实例时被调用了两次(它应该只被调用一次,因为 A 只有一个“版本”)。确保它只被调用一次的最佳方法是什么?
(B::deep_copy_from 和 C::deep_copy_from 应该继续以相同的方式工作)。
这是一个示例代码:
这是当前的输出:
更新:
现在的版本是:
输出是:
我能得到比这更好的吗?(即,更自动)
c++ - C++ 赋值运算符解析
考虑以下代码:
然后当我们调用这个成员时:
将打印:
问题:为什么 B::foo 隐藏了 A::foo,而 B::operator= 没有?
c++ - 模板类中的 c++ 赋值运算符实现
我正在构建自己的矩阵类来巩固我对 C++ 的理解。它是模板化的,所以我可以有一个 int 矩阵或一个浮点数或布尔矩阵。我不打算实现复制构造函数或赋值运算符或析构函数,因为我不会有任何动态成员元素,但如果我有:
它返回以下错误:
其中,如果两个矩阵都是浮点数或整数,就可以了。尺寸不必匹配。因此,除非它们属于不同类型,否则默认赋值运算符效果很好。所以我实现了自己的赋值运算符:
如果它们是不同类型但尺寸相同,则此方法有效 - 但第二种类型中的值从第二种类型转换为第一种类型。我的问题是,我该如何设置它,以便它们可以是不同的类型和不同的尺寸,并且只需将其设置为指向第二个或第二个的副本?
ruby - 赋值运算符和条件运算符的运算符优先级
我正在为 Ruby 1.8 和 1.9 阅读一本名为“The Ruby Programming Language”的书。这本书说 if-operator 的优先级低于 assignment-operator。如果这是真的,那么我不明白这个表达式是如何工作的:
x = 5 if false
如果赋值运算符具有更高的优先级,那么它应该在 if 运算符之前执行。因此,在执行之前应将 5 分配给 x if false
。
我误解了优先级吗?
c++ - 类赋值运算符
我进行了以下运算符重载测试:
赋值运算符按预期运行,输出另一个实例的地址。
现在,我将如何从另一个实例中实际分配一些东西?例如,像这样:
c++ - 为什么声明对象时既不执行构造函数也不执行赋值运算符?
测试程序是
输出
显示,与 'b' 不同的对象 'a' 是从 A(1) “直接”构造的,无需执行赋值运算符。但是复制构造函数也没有执行。为什么?在这种情况下,有没有办法强制执行赋值运算符?如果我写的话,我会期待这样的行为
但我想要
这必须不同于第一种情况。或不?
(事实上,当我有一个从 A 派生的类 B 并希望 A 的赋值运算符处理像 A a = B(...) 这样的声明时,就会出现问题。)
c++ - C++ 为什么赋值运算符应该返回一个 const ref 以避免 (a=b)=c
我正在阅读一本关于 C++ 的书,更准确地说是关于运算符重载的书。
示例如下:
书上提供的关于返回 const ref 而不是 ref 的解释是为了避免像 (x=y)=z 这样的赋值。我不明白我们为什么要避免这种情况。我知道在此示例中首先评估 x=y ,并且由于它返回一个 const 引用,因此 =z 部分无法执行。但为什么?
c++ - 在 C++ 中,从 int 到 object 的赋值是如何实现的?
嗨,大家好
只是我声明了一个像上面这样的简单类。
之后,我将 int 值分配给该类的对象,然后它就起作用了!
(我打印了它的值。它被正确存储)
如果没有带有 int 参数的构造,则发生编译错误。
所以,我认为它与构造函数有关。是对的吗?
请给我一个很好的解释。
谢谢。
c++ - C++:为我的类型定义了我自己的赋值运算符,现在 .sort() 不适用于我的类型的向量?
我有一个类(那些读过 Accelerated C++ 的人可能会觉得这个类很熟悉)定义如下:
函数calculator() 使用这种类型的对象。作为函数的一部分,使用库的通用排序函数对(已声明的)Student_info 对象的向量进行排序。我的程序没有超过这一点(尽管根据 NetBeans 没有抛出异常并且程序正确退出)。
sort 函数大量使用容器中保存的任何类型的赋值运算符,但我似乎无法找出我定义的那个有什么问题(程序在我定义之前运行正常)。根据Accelerated C++(或者至少我是这样解释的),赋值运算符应该工作的正确方式是首先破坏左操作数,然后用等于右操作数的值再次构造它。所以这是我重载的 operator= 定义:
如您所见,它调用了 Student_info 复制构造函数,定义如下:
复制构造函数正确运行,因为省略排序语句允许程序正确运行并产生大于 0 的 copyCount(仅在复制构造函数和 operator= 中修改)。
那么我的赋值运算符到底有什么问题?它与调用 Student_info 对象的破坏有关,但我不知道如何纠正它而不是破坏它。
(顺便说一句,Accelerated C++ 中的一个练习要求创建复制构造函数、析构函数和赋值运算符……我意识到这些函数的合成版本显然足以满足我的课程)