Delphi中赋值(:=)与分配(Assign)有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中赋值(:=)与分配(Assign)有啥区别?相关的知识,希望对你有一定的参考价值。

比如:
FTrayIcon: TIcon;
。。。
FTrayIcon.Assign(Application.Icon);
FTrayIcon := Application.Icon;//这两者形式都行吗?或者说这两者在什么情况下使用。
主要说下在什么情况下使用就行了,我时常被这两个东西搞晕。

参考技术A FTrayIcon.Assign(Application.Icon);
要先Create才能Assign
FTrayIcon := Application.Icon;
直接赋值了

如上描述!一个直接赋值,一个是一个通用的方法,并不是所有的对象都可以Assign的,必须是这个对象有Assign这个方法才能Assign意思是原样复制一个对象出来而不是Application.Icon这个对象了本回答被提问者采纳

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

【中文标题】STL - 赋值运算符与`assign` 成员函数【英文标题】:STL - assignment operator vs. `assign` member function 【发布时间】:2013-11-13 03:55:22 【问题描述】:

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

据我了解,在以下情况下使用 assign 很有用:

    希望分配向量的子范围(不是从头到尾)。 分配是从一个数组完成的。

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

【问题讨论】:

另一个用于赋值的pro是移动赋值运算符。如果您分配一个右值,它将被移动而不是复制。 assign 的一个小缺点是,对于阅读您的代码的其他人来说,它比等号稍微不那么直观,但这是一件小事。 【参考方案1】:

使用assign的主要原因是将数据从一种容器复制到另一种容器。

例如,如果要将std::set<int> 的内容迁移到std::vector<int>,则不能使用赋值运算符,但可以使用vector.assign(set.begin(), set.end())

另一个例子是复制两个容器的内容,这些容器拥有不同的类型,可以转换成一个或另一个;如果您尝试将std::vector<Derived*> 分配给std::vector<Base*>,则分配运算符不足。

【讨论】:

你仍然可以做vector = std::vector<int>(set.begin(), set.end())等,所以assign是完全多余的。 @emlai assign 如果您想重用容量而不是分配一个全新的向量,这很有用。

以上是关于Delphi中赋值(:=)与分配(Assign)有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

钩窗口。位置。*赋值和window.location.assign

js对象浅拷贝有解构赋值,assign2个方法吗?

机器视觉 assign算子

retain, copy, assign区别

object.assign和直接赋值的区别

机器视觉 assign_at算子