首页 > 解决方案 > C++:基于条件的局部引用变量值

问题描述

我在考虑已声明为引用类型的局部变量的用途。我发现它没用,因为在任何地方我都使用 ref 变量,我可以很好地只使用我分配给引用的变量。直到我意识到一个 ref 变量可能引用一个难以计算的变量。

所以我“发明”了那个代码:

system::path& pathSeparator;

if( system::is_mswindows() ) {
    pathSeparator = long::namespace::access::path::mswindows::pathSeparator;
} else {
    pathSeparator = long::namespace::access::path::posix::pathSeparator;
}

/* code which uses pathSeparator a lot */

但我收到一个错误,因为pathSeparator在示例代码的第一行初始化期间未为其分配值。如果我对pathSeparator声明为指针做同样的事情,那么它工作正常,但现在我每次使用它时都被迫取消引用该变量。

那么,对于经常使用该变量的代码,是否可以使用基于条件的引用变量(以便在每次代码需要其值时不编写 if-s)?

标签: c++reference

解决方案


您可以使用条件运算符:

system::path& pathSeparator = system::is_mswindows()
    ? long::namespace::access::path::mswindows::pathSeparator
    : long::namespace::access::path::posix::pathSeparator;

...或者,如果您需要更多空间,可以立即调用 lambda:

auto& pathSeparator = [&]() -> system::path& {
    if( system::is_mswindows() ) {
        return long::namespace::access::path::mswindows::pathSeparator;
    } else {
        return long::namespace::access::path::posix::pathSeparator;
    }
}();

推荐阅读