【发布时间】:2016-12-25 17:06:49
【问题描述】:
C++ Builder 中的__properties 是通过引用 还是通过值 传递? ...例如
class TMyClass
{
private:
int FMyFoo1;
int GetMyFoo2();
void SetMyFoo2(int AMyFoo2);
public:
__property int MyFoo1 = {read=FMyFoo1, write=FMyFoo1};
__property int MyFoo2 = {read=GetMyFoo2, write=SetMyFoo2};
};
另外,您可以将 & 运算符添加到 __properties,例如
__property int &MyFoo = {read=FMyFoo};
但仅适用于基于 Clang 的编译器。这背后的意义是什么?
【问题讨论】:
-
你问的是传递一个属性值到另一个函数是通过值还是引用传递?如果是这样,则该属性被视为按值。您可能只是在调试器中查看编译器生成的代码即可看到这一点。至于
&,它是数据类型的一部分,而不是属性本身。__property int &MyFoo与__property int& MyFoo相同。但是像这样声明引用类型的属性并没有什么意义,而且我以前从未见过这样做过。 -
这是基于一个快速的想法,这可能会告诉编译器将属性数据作为对用户函数的引用传递。当 Bcc32c 没有抱怨时,我觉得自己证实了我的假设是正确的。
-
...应该是...对其他函数的引用....
-
假设,如果我有一个大的 std::map 作为私有类成员,只允许公共通过属性访问它,那么整个事情就是每次访问都会被复制一次吗?
-
声明
__property DataType PropName = {read=FMember, write=FMember};之类的属性会提供对FMember的直接 访问权限,即使DataType未声明为引用。因此,如果您有一个函数将DataType&引用作为输入,并将PropName传递给该函数,编译器仍然可以通过引用该函数来优化和传递FMember。
标签: c++ clang c++builder c++builder-10.1-berlin