c++ - 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)?
解决方案
您可以使用条件运算符:
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;
}
}();
推荐阅读
- node.js - 发出 post 请求时 npm 服务器关闭
- javascript - 如何在 Django 中保存范围滑块(多输入表单)的值
- sql - SQL - 如何在 XML 标记中插入唯一 ID
- c++ - 如果 g++ 已经对此进行了优化,那么向量化代码是否有用?
- github - 即使您有学分,如何在出错时从 git-lfs 获取大文件
- xml - XML / XSLT 1.0 - 如何对文本字符串使用 XSL 模板匹配?
- java - Generating Pyramid to Show Numbers in Module 10
- python - 移动最大值
- c# - 跨越整行的 DataGrid ProgressBar
- drupal - 有没有办法让我的验证消息内联