使用没有 std::literals 的后缀

Posted

技术标签:

【中文标题】使用没有 std::literals 的后缀【英文标题】:Using suffixes without std::literals 【发布时间】:2016-04-09 16:27:33 【问题描述】:

我最近读到 C++14 中的 shms 等字面量已被放入命名空间 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
*/

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

【问题讨论】:

你确实有using namespace std;,并且文字驻留在std 内的内联命名空间中,不是吗? 始终标记“c++”,否则例如语法高亮被禁用。 【参考方案1】:

literalschrono_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 在列中插入值?

spark中的lit()有啥用?下面的两段代码返回相同的输出,使用 lit() 有啥好处 [重复]

具有javascript依赖关系的lit-element,未打包为es6模块(尚未)

使用 rollup、postcss 和 tailwind 框架打包使用 lit-element 制作的 web 组件

使用带有 lit-html 的打字稿编写测试时出现“语法错误:无法在模块外使用 import 语句”

具有对象类型属性的Lit元素