c++ - 避免默认参数中的异常
问题描述
我有一个这样的函数声明:
void foo(std::string const &bar = std::string(""));
现在,我们使用 MISRA C++,我们的代码验证器在默认值的构造函数上给出了错误:
规则 15-5-3:terminate()函数不应被隐式调用。
我知道在创建默认参数的某个地方可能有一个字符串构造(一个明智的编译器无疑会优化它,但 MISRA C++ 的规则也涵盖愚蠢的编译器),也就是说,可以翻译:
foo();
至
std::string tmp(std::string("")); // May run out of memory, etc
foo(tmp);
但是,有没有办法解决这个问题,除非很明显:
void foo(std::string const &bar);
void foo() { foo(std::string("")); }
这可能会因多个可选参数而变得混乱,但是......
解决方案
尝试在函数声明之外初始化默认参数:
const std::string def = "";
...
void foo(std::string const &bar = def);
推荐阅读
- java - 根据位置条件创建适配器
- powershell - 分组 CSV 文件数据以创建报告
- python - 无法使用 Python 连接到 Mysql
- multithreading - 如何安全地使用 Spring JPA 线程?
- continuous-integration - 尽管“仅:merge_requests”标签,Gitlab CI 管道仍可正常推送
- c++ - cpp libcurl 在 http post 调用中发送 zip 文件而不使用 multipart\form-data
- ruby-on-rails - 从 form_for rails 调用动作?
- php - 如何根据当前用户能力显示 WordPress 管理栏项目
- android - "layout_constraintBottom_totopOf" not found
- node.js - 如何从另一个模块获取结果 - Nodejs