我最近读到C++ 14中的文字就足够了,例如s
,h
,ms
等,已经放在 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
*/
如您所见,我还没有包含任何
namespace
或std::literals::
,但我的程序仍然可以正常运行。我在Orwell DevC++,C++ Shell,Coliru中进行了尝试,并且到处都有相同的输出。有什么问题? 最佳答案
literals
和chrono_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/