【发布时间】:2019-11-06 12:55:24
【问题描述】:
场景
我有一个 C++ 函数,它接收一个参数为std::chrono::milliseconds。它基本上是一个超时值。而且,它是一个默认参数,默认设置为某个值。
代码
#include <iostream>
#include <chrono>
void Fun(const std::chrono::milliseconds someTimeout = std::chrono::milliseconds(100)) {
if (someTimeout > 0) {
std::cout << "someNumberInMillis is: " << someNumberInMillis.count() << std::endl;
}
}
int main() {
unsigned int someValue = 500;
Fun(std::chrono::milliseconds(someValue))
}
问题
以上都可以,但是当我用一个值调用Fun 时编译失败,我得到以下错误:
没有从 'bool' 到 'std::chrono::milliseconds' 的可行转换(又名 '持续时间>')
问题:
我在这里做错了什么?我希望Fun 的调用者在调用Fun 时明确知道它正在使用std::chrono::milliseconds。但是编译器好像不允许使用std::chrono::milliseconds作为参数?
如何使用std::chrono::milliseconds作为默认参数?
环境
使用的编译器是 macOS High Sierra 上的 clang
【问题讨论】:
-
if (someTimeout > 0)?我的编译器找不到匹配的重载。someNumberInMillis来自哪里?当我修复这些和其他明显的语法错误时,在 GCC9 上编译对我来说很好。 -
我更新了代码。请再检查一次。我正在改进变量名称:-D
-
用 gcc 编译??惊人的!我在 macOS 上使用 clang 作为编译器。我更新了问题的环境详细信息
-
正如我所说,我必须修复一些语法错误,即不一致的名称、与整数比较和缺少分号。您能否更新到除了我们感兴趣的错误之外没有任何错误的minimal reproducible example?谢谢!
标签: c++11 chrono milliseconds