相关疑难解决方法(0)

静态变量初始化顺序

C++保证编译单元(.cpp文件)中的变量按声明顺序初始化.对于编译单元的数量,此规则分别适用于每个(我的意思是类外的静态变量).

但是,变量的初始化顺序在不同的编译单元中是不确定的.

我在哪里可以看到关于gcc和MSVC的这个订单的一些解释(我知道依赖于这是一个非常糟糕的想法 - 它只是为了理解我们在迁移到新的GCC主要和不同操作系统时遗留代码可能遇到的问题) ?

c++ linker static gcc visual-studio

60
推荐指数
3
解决办法
7万
查看次数

C++全局初始化顺序忽略依赖关系?

我认为我的问题最好在代码中描述:

#include <stdio.h>

struct Foo;

extern Foo globalFoo;

struct Foo {
    Foo() {
        printf("Foo::Foo()\n");
    }

    void add() {
        printf("Foo::add()\n");
    }

    static int addToGlobal() {
        printf("Foo::addToGlobal() START\n");

        globalFoo.add();

        printf("Foo::addToGlobal() END\n");

        return 0;
    }
};

Foo globalFoo;

int dummy = Foo::addToGlobal();

int main() {
    printf("main()\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以上打印(使用gcc 4.4.3):

Foo::Foo()
Foo::addToGlobal() START
Foo::add()
Foo::addToGlobal() END
main()
Run Code Online (Sandbox Code Playgroud)

这是我的期望,似乎合乎逻辑.

但是,当我交换以下行时:

Foo globalFoo;
int dummy = Foo::addToGlobal();
Run Code Online (Sandbox Code Playgroud)

进入这个:

int dummy = Foo::addToGlobal();
Foo globalFoo;
Run Code Online (Sandbox Code Playgroud)

该计划输出以下内容:

Foo::addToGlobal() START
Foo::add()
Foo::addToGlobal() END
Foo::Foo()
main()
Run Code Online (Sandbox Code Playgroud)

似乎使用尚未构造的实例调用 …

c++

17
推荐指数
2
解决办法
1万
查看次数

什么时候实例化 VBA 变量

我很犹豫要问,但我找不到VBA 的文档。

相关(但我不认为是骗子):

我想我使用“实例化”这个词是正确的,但如果我错了,请纠正我。实例化是在创建变量并为其分配所需的资源时?所以在 VBA 中,我看到了两种方法。

一切都在顶部!

Public Sub ToTheTop()
    Dim var1 As Long
    Dim var2 As Long
    Dim var3 As Long

    var1 = 10
    var2 = 20
    var3 = var1 + var1
    Debug.Print var3
End Sub
Run Code Online (Sandbox Code Playgroud)

或接近使用

Public Sub HoldMeCloser()
    Dim var1 As Long
    var1 = 10
    Dim var2 As Long
    var2 = 20
    Dim var3 As Long

    var3 …
Run Code Online (Sandbox Code Playgroud)

variables vba scope

4
推荐指数
1
解决办法
449
查看次数

标签 统计

c++ ×2

gcc ×1

linker ×1

scope ×1

static ×1

variables ×1

vba ×1

visual-studio ×1