我知道在一堂课上
class A {
const int myint;
public:
A (const int yourint);
A (const std::string yourstring);
};
我可以在初始值设定项列表中初始化myint
,如下所示:
A::A (const int yourint) : myint (yourint) {};
但是,如果计算myint
所需的数据来自字符串并且可能涉及计算,那么从第二个构造函数初始化myint
的正确方法是什么?
在这里,如果可以的话,您希望使用委托构造函数,或者可以在ctor中进行计算。关于第二个选项,请参阅我的第二个示例。您的类的一个示例是:
class A {
const int myint;
static int parse_int(const std::string& string) {/*...*/}
public:
A (const int yourint) : myint{yourint};
A (const std::string yourstring) : A{parse_int(yourstring)};
}
顺便说一下,因为parse_int
只计算整数,所以它可以是static
,这意味着它不需要使用类实例。当然,没有任何要求,因为函数也可以是成员(nonstatic
),尽管static
更安全,因为它几乎总是保证对象的构造。
该方法可用于任何C++版本。
class A {
const int myint;
static int parse_int(const std::string& string) {/*...*/}
public:
A (const int yourint) : myint(yourint);
A (const std::string yourstring) : my_int(parse_int(yourstring));
}
在委托构造函数的成员初始化列表中使用函数调用:
A::A(std::string const& yourstring) : A(compute_myint(yourstring)) {};
通过const&
传递std::string
,而不仅仅是const
。
compute_myint
可以是非成员、静态成员,可能无法从类外部访问,以最有意义的为准。
我有一个应用程序,大部分时间都在启动,但每7次左右启动它就会崩溃,出现错误: 我引用了这个,但最终出现了类似的错误 IndexOutOfBoundsException:空列表不包含索引1上的元素。 编辑2 null ViewModel
下面的示例类无法编译: 此代码的编译错误消息是: 但是,对于包含以下方法的类,Java不会生成任何错误消息: 关于初始化及其要求,为什么Java对最终实例变量和最终局部变量的处理不同?谢谢
我假设使用以下元素按以下顺序构建一个字节数组: 对称加密的AES密钥(对于AES 128有一个随机密钥,对于AES 128有一个随机初始化向量。在CBC模式下使用AES 128和PKCS5填充进行加密。在加密之前,文本用UTF-8进行编码) AES IV 加密消息(使用ECB模式下的RSA算法和PKCS1填充、先前生成的密钥和消息收件人的公钥) 我正在做的是获取每个参数的长度,以便创建新的byte
问题内容: print语句导致以下编译时错误, 局部变量f可能尚未初始化 如果Java中的原语已经具有默认值(float = 0.0f) ,为什么需要定义一个? 所以这有效 感谢大家! 问题答案: 因为它是一个局部变量。这就是为什么什么都没有分配的原因: 局部变量略有不同。编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化本地变量,请确保在尝试使用它之前为其分配一个值。访