Delphi中赋值(:=)与分配(Assign)有啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中赋值(:=)与分配(Assign)有啥区别?相关的知识,希望对你有一定的参考价值。
比如:
FTrayIcon: TIcon;
。。。
FTrayIcon.Assign(Application.Icon);
FTrayIcon := 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 没有缺点,可以使用赋值运算符。
我对吗?
使用assign
MF还有其他原因吗?
【问题讨论】:
另一个用于赋值的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)有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章