Ade*_*erg 6 milliseconds c++11 c++-chrono
场景
我有一个 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))
}
Run Code Online (Sandbox Code Playgroud)
问题
以上所有内容都可以,但是当我使用Fun值调用时,无法编译并收到以下错误:
没有从“bool”到“std::chrono::milliseconds”(又名“duration >”)的可行转换
问题:
我在这里做错了什么?我希望 的调用者在调用 时Fun明确意识到它正在使用. 但编译器似乎不允许用作参数?std::chrono::millisecondsFunstd::chrono::milliseconds
如何使用std::chrono::milliseconds作为默认参数?
在 macOS High Sierra 上使用的环境
编译器是 clang
修复了其他语法错误后,在 GCC 9 中编译时不会出现警告:
#include <iostream>
#include <chrono>
void Fun(const std::chrono::milliseconds someNumberInMillis
= std::chrono::milliseconds(100))
{
if (someNumberInMillis > std::chrono::milliseconds{0}) {
std::cout << "someNumberInMillis is: " << someNumberInMillis.count()
<< std::endl;
}
}
int main()
{
unsigned int someValue = 500;
Fun(std::chrono::milliseconds(someValue));
}
Run Code Online (Sandbox Code Playgroud)