std :: this_thread :: sleep_for(2s)中的s是什么?

时间:2018-11-15 09:06:53

标签: c++ c++14

我发现std::this_thread::sleep_for可以处理时间单位s。

std::this_thread::sleep_for(2s);

但是我不知道s中的2s是什么。

3 个答案:

答案 0 :(得分:11)

  

s中的std::this_thread::sleep_for(2s)是什么?

s用户定义的文字,使2s成为类型为chrono::second的文字值。


内置文字

您可能熟悉integer literalsfloating literals;这些是内置的后缀:

+--------+---------+---------------+
| Suffix | Example |     Type      |
+--------+---------+---------------+
|      U |     42U | unsigned int  |
|     LL |     1LL | long long int |
|      f |   3.14f | float         |
+--------+---------+---------------+

它们使您可以提供其类型符合您需要的文字值。例如:

int   half(int n)   { return n/2; }
float half(float f) { return f/2; }
half(3);   // calls the int   version, returns 1    (int)
half(3.f); // calls the float version, returns 1.5f (float)

用户定义的文字

C ++ 11添加了一个新功能:user-defined literal后缀:

  

通过定义用户定义的后缀,允许整数,浮点数,字符和字符串文字产生用户定义类型的对象。

语法

它们允许提供用户定义类型或标准库定义类型的文字。定义文字就像定义operator""一样容易:

// 0_<suffix> is now a <type> literal
<type> operator "" _<suffix>(unsigned long long); // ull: one of the height existing forms

示例

#include <iostream>

class Mass
{
    double _value_in_kg;
public:
    Mass(long double kg) : _value_in_kg(kg) {}
    friend Mass          operator+ (Mass const& m1, Mass const& m2)  { return m1._value_in_kg + m2._value_in_kg; }
    friend std::ostream& operator<<(std::ostream& os, Mass const& m) { return os << m._value_in_kg << " kg"; }
};

Mass operator "" _kg(long double kg) { return Mass{kg}; }
Mass operator "" _lb(long double lb) { return Mass{lb/2.20462}; }

int main()
{
    std::cout << 3.0_kg + 8.0_lb  << '\n';
}

Outputs "6.62874 kg" (demo)it should

std::chrono

与“真实”的用户提供的文字不同,标准库提供的文字不以下划线(_)开头。 s是其中之一,并且在<chrono>中定义(自C ++ 14起):

constexpr chrono::seconds operator "" s(unsigned long long secs);

使用其他持续时间文字,它可以使您写得像这样漂亮:

#include <chrono>
using namespace std::chrono_literals;
const auto world_marathon_record_2018 = 2h + 1min + 39s;

答案 1 :(得分:3)

“ s”代表第二个,实际上是标准库中定义的文字运算符。文字是C ++ 14标准的一部分。您可以通过using namespace std::chrono_literals;

访问它们

答案 2 :(得分:-1)

该表达式中的

s实际上是标准库中定义的chrono库函数