相当于R' s<< - 在C ++中:extern用于局部变量

时间:2018-01-30 00:47:36

标签: c++ r extern

我已经在C ++中为函数本地定义了一个变量,但是希望它可以被包含在单独文件中的另一个C ++函数访问。

在R中,<< - 允许通过复制本地变量进行全局访问。

在C ++中是否有等价的<< - - 允许我通过另一个C ++文件中的extern声明调用局部变量(否则不是全局定义的)?

下面的代码是否正常并按预期工作?

例如,要访问y:

### File 1.cpp ###
void func() {
    const std::vector x
    int y = x.size()
}

### File 2.cpp ###
extern int y 
y // Call y somewhere else within program

1 个答案:

答案 0 :(得分:2)

在C ++中,函数不能将声明泄漏到封闭的范围中。你最接近的是:

public static void helper(final Exception e) {
    Throwable throwable = e.getCause();
        if (throwable instanceOf XXXX) {
            throw (XXXX) throwable;
        } else if (e instance of YYYY) {
            throw (YYYY) throwable;
        } else if (throwable != null) {
            throw new RuntimeException(throwable);
        } else {
            throw new RuntimeException(e);
        }
}  

public static A createA() throws XXXX, YYYY {
    try {
        return somethingThatThrows();
    } catch (InterruptedException | ExecutionException e) {
        handle(e);
    }
}         

这会导致void f() { extern int x; } 引用在程序中其他位置定义的全局变量。另一个包含相同声明的翻译单元中的另一个函数可以引用同一个变量。但是,声明都没有定义变量,您必须在全局范围内提供定义才能使程序链接。

如果它是您需要的全局变量,则应定义全局变量。但是,可变的全局状态通常会使程序更难以推理,因此通常最好尽可能避免它。通常,您需要构建程序,以便两个函数尽可能通过函数调用机制相互通信(在函数参数中传递信息),或者最坏的情况是共享封装在类中的可变状态,以便它可以在课堂外泄漏。