从range-v3的文档中:
view::all返回包含源中所有元素的范围.用于将容器转换为范围.
让我困惑的是:
view::all使用?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 1和version 2?
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>();足够了?
在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)
我的问题是:
_?没有参数,那么,如何使用_??刚用double var = _?;?在阅读Microsoft's implementation of Cpp Core Guidelines 时,我遇到了两个问题:
gsl::string_span在gsl::span已经运行良好的地方提供?gsl::zstring_span在std::string自 C++11 以来已保证以空值终止的地方提供?任何说明情况都将受到高度赞赏。