小编szx*_*pmj的帖子

容器肯定是概念上的范围吗?

range-v3的文档中:

view::all

返回包含源中所有元素的范围.用于将容器转换为范围.

让我困惑的是:

  1. 在什么情况下view::all使用?
  2. 标准容器(std::vector,std::list等)在概念上不是范围吗?

例如:

auto coll = std::vector{ 1, 2, 2, 3 };  
view::all(coll) | view::unique; // version 1
coll | view::unique; // version 2
Run Code Online (Sandbox Code Playgroud)

有什么区别version 1version 2

c++ standards language-design range-v3 c++-experimental

12
推荐指数
1
解决办法
227
查看次数

为什么"a.template foo <0>();" 即使"a.foo <0>();"也允许 足够?

struct A
{
    template<int>
    void foo()
    {}
};

int main()
{
    A a;
    a.foo<0>(); // ok
    a.template foo<0>(); // also ok
}
Run Code Online (Sandbox Code Playgroud)

显然,比起来a.foo<0>();更简洁,直观和富有表现力a.template foo<0>();.

为什么C++允许a.template foo<0>();即使a.foo<0>();足够了?

c++ syntax standards templates member-functions

11
推荐指数
1
解决办法
751
查看次数

C++ 17是否允许非ascii字符作为标识符?

cppref,我找到一个奇怪的C++代码,它在源代码中使用非ascii字符,如下所示:

template <char...> double operator "" _?(); // OK
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码不能用clang 6.0进行编译.错误消息是:

error : source file is not valid UTF-8
1>double operator "" _<A6><D0>()
1>                    ^
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这符合C++ 17吗?
  2. 注意用户定义_?没有参数,那么,如何使用_??刚用double var = _?;

c++ standards compiler-errors user-defined-literals c++17

6
推荐指数
1
解决办法
658
查看次数

`gsl::string_span` 的目的是什么?

在阅读Microsoft's implementation of Cpp Core Guidelines 时,我遇到了两个问题:

  1. 为什么gsl::string_spangsl::span已经运行良好的地方提供?
  2. 为什么gsl::zstring_spanstd::string自 C++11 以来已保证以空值终止的地方提供?

任何说明情况都将受到高度赞赏。

c++ library-design c++11 cpp-core-guidelines

5
推荐指数
1
解决办法
1231
查看次数