使用没有 std::literals 的后缀
Posted
技术标签:
【中文标题】使用没有 std::literals 的后缀【英文标题】:Using suffixes without std::literals 【发布时间】:2016-04-09 16:27:33 【问题描述】:我最近读到 C++14 中的 s
、h
、ms
等字面量已被放入命名空间 std::literals
。因此,如果我要使用它们,那么我应该包含命名空间或使用 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 中尝试过这个,并且到处都得到了相同的输出。有什么问题?
【问题讨论】:
你确实有using namespace std;
,并且文字驻留在std
内的内联命名空间中,不是吗?
始终标记“c++”,否则例如语法高亮被禁用。
【参考方案1】:
literals
和 chrono_literals
是内联命名空间 - 在这种特殊情况下请参阅 [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都被找到了。
【讨论】:
然后将它们放在其他命名空间中而不是单独使用std
@AnkitAcharya 所以如果你不想溢出整个命名空间std
,你可以写using namespace std::literals;
。以上是关于使用没有 std::literals 的后缀的主要内容,如果未能解决你的问题,请参考以下文章
spark中的lit()有啥用?下面的两段代码返回相同的输出,使用 lit() 有啥好处 [重复]
具有javascript依赖关系的lit-element,未打包为es6模块(尚未)
使用 rollup、postcss 和 tailwind 框架打包使用 lit-element 制作的 web 组件