问题标签 [member-access]

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.

0 投票
2 回答
182 浏览

c++ - 获取未初始化对象成员的地址是否定义明确?

考虑以下示例。当bar被构造时,它为它的基类型 ( foo) 构造函数提供了尚未初始化的数据成员my_member.y的地址。my_member

这定义好了吗?获取未初始化对象数据成员的地址是否合法?我发现了这个关于传递对未初始化对象的引用的问题,但它并不完全相同。在这种情况下,我在未初始化的对象上使用成员访问运算符。 .

确实,对象的数据成员的地址不应通过初始化来更改,但这并不一定会使地址得到很好的定义。此外,会员访问运营商的 ccpreference.com 页面有这样的说法:

即使没有必要,也会计算两个运算符的第一个操作数(例如,当第二个操作数命名为静态成员时)。

我理解这意味着在&my_member.y my_member将被评估的情况下,我认为这很好(int x; x;看起来很好),但我也找不到支持它的文档。

0 投票
1 回答
708 浏览

arrays - 我不能在 VBA 类中声明公共数组是否有技术原因?

我刚刚发现显然不可能在 VBA 类中声明一个公共数组,而将它声明为私有是可以的。

我想知道这是否有技术原因,或者这是否是微软的设计选择。

任何一种解释对我来说都没有多大意义:我看不出有技术原因会阻止成员私有而它可以是公共的,因为这只是在运行时检查的访问检查。

另一方面,我不明白为什么不能声明公共数组,而声明公共整数或其他数据类型完全没问题。

如果有人能解释这一切背后的理性,我将不胜感激。

0 投票
2 回答
365 浏览

c++ - 我可以分配给成员访问运算符的返回值吗?

我读过成员访问运算符点运算符.和箭头运算符->返回值:

箭头运算符需要一个指针操作数并产生一个左值。如果从中获取成员的对象是左值,则点运算符产生左值;否则结果是一个右值。

这是来自 C++ Primer 5 版本。

所以我想只要非常量左值是他们表达式的返回值,我就可以分配一个值,例如:

我对分配给箭头运算符的返回值感到困惑。上面据说->总是返回一个左值,但如果我尝试分配给该值,它会失败。

  • 任何人都可以向我解释 C++ 书中的上述段落。谢谢你。
0 投票
1 回答
772 浏览

c - C:如何正确访问通过引用传递的 Struct 的 Array 元素?

我有这个代码:

然后我通过引用一个函数来传递结构:

如何访问 MyFunct 中的数组元素?

谢谢您的帮助。

0 投票
1 回答
59 浏览

c++ - 关于类类型函数的一些问题

所以我正在使用 C++ 并尝试使用类。我正在尝试创建一个具有类类型的函数。这是代码:

类的实例函数可以访问其成员函数和对象吗?另外,它应该返回什么?我是否必须创建一个单独的动作实例才能返回?可以与action move吗?谢谢!

0 投票
1 回答
1301 浏览

c++ - 包含点的 C/C++ 宏参数(成员访问运算符)

如何在包含点(成员访问运算符)的 C/C++ 宏参数中使用?

例子:

如何M(s,c.)解决s.c.x

谢谢您的帮助!

0 投票
2 回答
949 浏览

c# - 为什么我可以使用类名而不使用类实例来调用此静态方法?

我想我知道静态与对象实例无关,但我遇到的问题是类不是对象的同义词吗?或者不是用于创建对象的类?那么,如果类本质上是对象,为什么当我使用类名时错误会消失呢?

我知道我还没有创建一个实例,Main也不会。这是唯一的区别吗?也许我正在上的这门课没有正确解释。

0 投票
2 回答
154 浏览

c++ - 为什么重载的取消引用运算符与箭头运算符的工作方式不同?

再次阅读 C++ Primer 5 ed。由 lipmann 现在我已经阅读了有关成员访问运算符重载的信息。一切对我来说都很清楚,除了:

  • 我学到的是箭头运算符可以重载,并且必须是成员函数。如果我看到 main 中这样的表达式,c->foo()我可以认为它c是一个内置指针,指向一个类类型的对象,该类类型的成员函数称为foofetch 它。或者(如 main 中的情况)c是定义了自己的类类型的对象->。因此,因为c这是一个表达式调用c箭头运算符的对象,该对象返回一个类B类型的对象,该对象本身调用其箭头运算符,直到它返回B对象,该对象->返回一个指向对象的内置指针A,在这种情况下,它被取消引用并且结果对象用于获取foo()功能。所以它递归地调用自己,直到返回一个内置指针并且该指针必须指向一个具有该提取成员的对象。

  • 我不明白的是:为什么取消引用运算符的工作方式不同?那么为什么解引用只要返回一个定义了解引用操作符的对象c就不会调用*of等操作符呢?b

  • 请不要争论内存泄漏,A目的是为了简洁。

0 投票
0 回答
51 浏览

c# - 设置特定的成员访问行为

我希望对我的类访问具有特定的行为,尽管有解决方法并且我可以在不实现该特定行为的情况下处理这种情况,但我最终想知道是否有可能在 c# 中实现这一点。

所以我有3个相关的课程:

这 3 个类不一定需要嵌套,而是递归地保存和实例化每个类(希望有意义)。我的意思是,它Foo拥有一个 的领域FooData,并且FooData拥有一个 的领域Settings

我想要的是一种特定的访问行为。这意味着我想从 Foo 访问设置属性,我们称之为“父类” Foo 实例(尽管目前不涉及继承)。但是,如果我处理序列化主题的 Settings 类实例,我希望拒绝访问 Settings 属性(私人行为)。

一些希望可以理解的伪代码:

限制因素是 Settings 类需要是 public,因为对于序列化主题,我需要在任何地方创建它的实例。此外,由于序列化(随处访问),它的所有属性 getter 和 setter 也需要公开。

我的问题是,是否有办法封装 Settings 实例类可访问性以使其及其所有成员公开,以便可以进行序列化,可以限制对设置属性的访问(而不是整个 Settings 实例),这样我就可以从大师班 Foo 获取和设置它们。以便:

我在类嵌套和接口私有属性暴露等方面尝试了很多东西,但根据我的研究,这是不可能实现的。

总结如果提示是,虽然一个类及其所有成员都需要是公共的(在我的情况下是设置类),但私有行为是否可以在一定程度上针对确定的类或外部世界实现,除了确定的类(需要的序列化类使用权)??(类似于c++朋友类关键字,你可以根据自己的需要进行设置,我猜是需要)。

所有这一切的目的是,来自 Foo 的设置类实例在运行时更改,并且与其他包含可序列化部分的类 Settings 实例具有相似的名称,仅在应用程序保存这些设置时更新。由于在设置实例操作上可能存在类似的名称混淆,我想知道是否可以通过所需的访问控制使代码访问行为尽可能详细以避免错误的实例访问。

我不能发布真正的代码,因为它非常庞大并且包含很多容易引起误解和离题的部分。希望我能理解自己,问题或评论将不胜感激。

我正在考虑的一种解决方法是创建一个平等的设置类,其所有成员都是私有的,并在 foo 类中使用反射或类似的东西设置它(这有什么意义吗?)

尽管扩展和解释复杂,但希望社区中的某个人能找到足够有趣的话题来结束它,并发现这是否可能,如果是,如何,如果不是,要注意c# 的限制。

提前致谢。

0 投票
0 回答
40 浏览

c++ - 当 Base 和 Derived 都是模板实例时,成员可访问性?

关于继承的成员变量的可见性的编译器错误使我感到困惑。我将其简化为这个最小、完整且可验证的示例:

MSVC 报告:

我很惊讶: Derived<T>应该继承m_valueBase<T>并且应该可以访问,因为它受到保护。

我尝试进一步减少问题:Base<T>用非模板类替换并将其声明m_value为 int works。保留Base<T>为模板类并制作Derived非模板类(派生自Base<int>也可以。问题仅在于两者都是模板时。

我发现了其他类似标题的 StackOverflow 问题,但都不是这个问题。这些问题通常涉及阴影或语法错误。

我尝试了 Compiler Explorer (godbolt.org) 来查看 Clang 和 gcc 是否同意 MSVC。 Clang 10也报告错误,gcc 10.2也是如此。奇怪的是,编译器资源管理器上的MSVC 19.24可以愉快地编译代码而没有错误。我本地的 MSVC 更新:19.26。所以目前主流 C++ 编译器版本的共识是代码是错误的。

当基类和派生类都是模板实例时,有人可以解释为什么派生类看不到基类的受保护成员变量吗?