我最近读到C++ 14中的文字就足够了,例如shms等,已经放在 namespace std::literals中。因此,如果要使用它们,则应该包括 namespace 或使用std::literals::表示这些后缀。但是,当我不使用上述任何程序而尝试以下程序(cpp.sh/9ytu)时,却得到了所需的输出:-

#include <iostream>
#include <thread>
using namespace std;
int main()
{
    auto str = "He is there"s;
    auto timegap = 1s;
    cout << "The string is :-" << endl;
    this_thread::sleep_for(timegap);
    cout << str;
    return 0;
}
/*Output:-
The string is :-
He is there
*/

如您所见,我还没有包含任何namespacestd::literals::,但我的程序仍然可以正常运行。我在Orwell DevC++,C++ Shell,Coliru中进行了尝试,并且到处都有相同的输出。有什么问题?

最佳答案

literalschrono_literals是内联 namespace -在这种特殊情况下,请参见[time.syn]:

inline namespace literals {
inline namespace chrono_literals {
    // 20.12.5.8, suffixes for duration literals
    constexpr chrono::hours h(unsigned long long);
    […]

因此,由于using namespace std;,将找到所有UDL。

关于c++ - 使用不带std::literals的后缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34618597/

10-16 08:16