问题标签 [data-members]

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 回答
87 浏览

c++ - 何时在 C++ 中使用哪个数据成员初始化

考虑到这个程序:

我可以看到三种形式的数据成员初始化:

  1. 使用成员初始化器列表
  2. 使用构造函数
  3. 在类主体中使用声明

什么时候用哪个?

0 投票
2 回答
35 浏览

c++11 - 在构造函数参数列表中无效使用静态数据成员

我有一堂这样的课:

但我得到以下编译错误,如下所示:

任何建议都可以解决此错误。另外,请指出我代码中的错误并稍微解释一下,以便我更好地理解。提前致谢。

0 投票
2 回答
120 浏览

c++ - 临时数据成员的生命周期延长和API设计

假设我有一个跨平台Path类,例如:

成员函数返回 path的parent()父路径this,因此它(正确地)返回一个新构造Path的表示它的对象。

as_utf8()对于在操作系统级别将路径表示为 UTF-8 字符串的平台(例如,Unix),直接返回对内部表示的引用似乎是合理的,path因为它已经是UTF-8。

如果我有如下代码:

这两行都很好,因为:

  • 假设my_path持续存在,则s仍然有效。
  • 返回的临时对象的生命周期parent()const&.

到目前为止,一切都很好。但是,如果我有如下代码:

那么这是错误的,因为返回的临时对象parent()没有延长其生命周期,因为不是指临时对象,而是它的数据成员此时,如果您尝试使用,您将得到垃圾或核心转储。如果代码是:const&s

那么代码将是正确的。但是,每次调用此成员函数时都创建一个临时的会是低效的。这也意味着任何“getter”成员函数都不应该返回对其数据成员的引用。

如果 API 保持原样,那么调用者必须查看返回类型as_utf8()来查看它是否返回 a似乎会给调用者带来过度的负担const&:如果是,那么调用者必须使用一个对象而不是const&; _ 如果它返回一个对象,那么调用者可以使用const&.

那么有没有什么办法可以解决这个问题,让 API 在大多数情况下既高效又能防止用户从看似无害的代码中获取悬空引用?


顺便说一句,这是使用 g++ 5.3 编译的。可能应该延长临时的生命周期,但是编译器有一个错误。

0 投票
2 回答
130 浏览

c# - 编译器显示未分配的结构对象字段和属性的不同错误

在下面第 1 行的代码中,编译器显示错误:“Use of possible unassigned field 'IntField'”,但对于第 2 行,错误是“Use of possible unassigned local variable 'structObj'”。为什么不同的错误?

0 投票
1 回答
95 浏览

c++ - 关于具有多个类和标头的运输程序中的继承、隐私和对象的 C++ 问题

我的程序应该打印来自 EndPoint toString 方法的“to”和“from”地址,但我不太清楚如何实现它。这是我的代码。如何在 Package::Package 构造函数中获取 toString 方法来打印 EndPoint 的 toString 方法的内容?

主要方法:

这个项目要求我创建一个带有继承的运输程序。它必须包括一个私有的“EndPoint”类,它包含发送者和接收者信息,以及一个编译所有内容并将其放入字符串的“Package”类。

我的错误在于我如何让我的 Package 构造函数能够包含来自我的 EndPoint 类的信息。由于 main 方法在 Package 类必须位于的位置(EndPoint、EndPoint、Weight、Cost)被格式​​化,但它不会像那样编译。我想我只是不明白如何将 EndPoint 信息发送到 Package 对象。

这是我的错误:

  1. 没有构造函数实例"Package::Package" matches the argument list argument types are: (EndPoint, EndPoint, double, double)
  2. Error C2440 'initializing': cannot convert from 'initializer list' to 'Package'
  3. Error C3861 'setprecision': identifier not found

包.h

包.cpp

主文件

我在这里注释掉了代码块,因为我试图让第一部分工作,然后再深入研究其余部分。

编辑:

谢谢大家的建议!我进行了一些编辑并删除了大量额外的代码(getter 和 setter。我用 java 学习了......),并且我已经让程序按预期编译和工作,除了一个小但重要的问题。

0 投票
1 回答
637 浏览

c++ - 静态(可能是 constexpr)数据成员 l​​ambda

以下代码无法编译:

这一个都不是:

但这确实(当f不是成员时):

有没有办法在 C++14 中声明和定义静态 constexpr 数据成员 l​​ambda?

0 投票
1 回答
31 浏览

c++ - 模板子类中的 C++ 名称解析

我试图在不使用“this”指针的情况下访问我的 C++ 代码中的基类数据。我的类是模板化的,并且ClassA是 的基类ClassB,它是ClassC. 所有类都是从它们的基类公开派生的。我发现这个讨论让我获得了一半的解决方案,但并没有完全解决它:

为什么我必须通过 this 指针访问模板基类成员?

该页面表明我应该能够使用“使用”语句解决我的问题。这是我正在尝试做的一个例子:

上面的代码编译失败,出现以下错误:

我发现“使用”将使变量可以在 ClassB ClassC访问,但不能在两者中访问。如果我将 using 语句放在两个类中,我会得到上面显示的错误。所有继承都是通过公共派生完成的。

有谁知道使这项工作的解决方案?(除了使用“this”或完全限定的范围名称来访问我的数据元素?)

0 投票
2 回答
126 浏览

c++ - 使用数组仅存储 C++ 中类的数据成员的名称

假设我有一堂课

我想从 A 的每个成员一个一个地复制 x 中的数据,并使用 for 循环来表示成员名称。有没有办法可以存储它们?所以像 -

0 投票
2 回答
269 浏览

c++ - 在默认初始化程序中使用 lambda 与使用成员函数

在默认初始化程序中使用“一次性”lambda 和使用普通的旧成员函数有什么区别吗?

相对:

我唯一看到的是第二种方法的缺点:这里将额外的符号J引入到 class 的命名空间中A。还有其他区别吗?

0 投票
0 回答
66 浏览

c++ - 什么是在 C++ 中重新定义静态变量?

据说, 一旦定义了静态数据成员,用户就不能重新定义它。 这到底是什么意思?因为我可以为它分配任何东西

如果赋值和重新定义不同,那么重新定义静态甚至普通变量是什么?

提前致谢!