Tag: 初始化

C ++初始化类中的静态variables?

我注意到我的一些函数实际上并没有访问这个对象,所以我把它们变成static 。 然后,编译器告诉我,他们访问的所有variables也必须是静态的 – 到目前为止,这是可以理解的。 我有一堆stringvariables如 string RE_ANY = "([^\\n]*)"; string RE_ANY_RELUCTANT = "([^\\n]*?)"; 等等。 然后我使它们都是static const因为它们永远不会改变。 但是,我的程序只编译,如果我把它们从类中移出:否则,MSVC ++ 2010抱怨“只有静态常量积分variables可能在一个类中初始化”。 那很不幸。 有没有解决方法? 我想把他们留在他们所属的class级里面。

C ++静态成员variables及其初始化

对于C ++类中的静态成员variables,初始化是在类之外完成的。 我想知道为什么? 任何逻辑推理/约束? 还是纯粹的遗留实现 – 标准不想纠正? 我认为在课堂上进行初始化更“直观”,不易混淆,同时也给出了variables的静态和全局性。 例如,如果你看到了静态const成员。

__init__作为构造函数?

潜入Python – 这将是诱人的,但不正确的调用这个类的构造函数。 这很诱人,因为它看起来像一个构造函数(按照惯例, __init__是为类定义的第一个方法),就像一个(它是在新创build的类实例中执行的第一个代码片段),甚至听起来像一个(“init”当然暗示了构造函数的本质)。 不正确的,因为该对象已经被调用时__init__构造,并且您已经有一个有效的引用类的新实例。 引用build议调用__init__作为构造函数是不正确的,因为该对象已经在调用__init__的时候被构造了。 但! 我一直认为构造函数只有在构造对象之后才被调用,因为它基本上用于初始化实例的数据成员,如果对象在构造函数被调用时不存在? (来自C ++ / Java的背景)

在堆栈/堆创build对象?

以下代码在堆栈上创build一个对象: Object o; 在堆上创build对象时,我们可以使用: Object* o; o = new Object(); 而不是: Object* o = new Object(); 当我们将堆对象创build分成两行并在第二行调用构造函数( o = new object() )时,这是否意味着在第一行( Object* o )指针是在堆栈上创build的? 所以Object o把对象放在堆栈上,而Object* o把指针放在堆栈上的未来对象上? 我的第二个问题涉及到两行代码是否在类之外被调用。 我最近读( 全局内存pipe理在C堆栈或堆? )全局variables不包含在堆栈/堆,但实际上是另一部分内存? 如果是这样的话, Object* o创build一个指针,该指针位于内存的另一部分,并指向堆对象?

在初始化中使用新声明的variables(int x = x + 1)?

我偶然发现了一个让我感到惊讶的行为: 写作时: int x = x+1; 在一个C / C ++程序(甚至更复杂的expression式涉及新创build的variablesx)我的gcc / g ++编译没有错误。 在上面的情况中,X是1之后。 请注意,以前的声明中没有variablesx的范围。 所以我想知道这是否是正确的行为(甚至可能在某些情况下是有用的),或者只是一个parsing器与我的gcc版本或gcc一般。 顺便说一句:以下不起作用: int x++;

斯威夫特懒惰使用自我实例化

我有一些令我感到困惑的东西,特别是下面的代码触发了一个编译器错误“unresolved identifier self”,我不确定为什么会这样,懒惰的意思是在那个属性被使用的时候,这个类已经被实例化了。 我错过了什么吗? 提前谢谢了。 这是代码 class FirstClass { unowned var second: SecondClass init(second:SecondClass) { self.second = second print("First reporting for duty") } func aMethod() { print("First's method reporting for duty") } } class SecondClass { lazy var first = FirstClass(second: self) func aMethod() { first.aMethod() } }

什么时候执行一个类的静态块?

我有2个jar子,让我们叫他们a.jar和b.jar。 b.jar依赖于a.jar。 在a.jar中,我定义了一个类,我们称之为StaticClass。 在StaticClass中,我定义了一个静态块,调用一个名为“init”的方法: public class StaticClass { static { init(); } public void static init () { // do some initialization here } } 在b.jar,我有一个主,所以在主要的,我期望的init()方法已被调用,但实际上不是。 我怀疑是因为StaticClass没有被jvm加载,谁能告诉我 我的结论是正确的吗? 什么触发jvm加载类? 我怎样才能得到静态块自动执行? 谢谢

类C,构造函数和统一初始化之间有什么区别?

TTBOMK,在C ++中有三种方法来初始化一个variables。 int x = 0; // C-like initialization int x (0); // Constructor initialization int x {0}; // Uniform initialization C ++ 11为统一初始化提供了一个更统一的语法来初始化不同types的variables,这些variables在C ++ 03中需要不同的语法。 类C,构造函数和统一初始化之间有什么区别? 我应该总是使用统一的初始化?

如何用C ++中的新运算符初始化内存?

我刚刚开始进入C ++,我想挑选一些良好的习惯。 如果我刚刚为new运算符分配了一个inttypes的数组,我怎样才能将它们全部初始化为0,而无需循环遍历它们呢? 我应该只使用memset ? 有没有一个“C ++”的方式来做到这一点?

为什么我的结构的成员没有使用`{}`正确初始化?

我有以下代码: #include <iostream> struct T { int a, b, c; }; int main() { T t = {0}; std::cout << ta << ',' << tb << ',' << tc << '\n'; } 输出 : 0,0,0 经过多年的代码运行,在关键的生产环境中快乐地工作,发挥了至关重要的作用,项目的需求发生了变化,需要的输出是1,1,1 。 所以,我将{0}更改为{1} : #include <iostream> struct T { int a, b, c; }; int main() { T t = […]