我读过并听说C++ 11支持Unicode.关于这一点的一些问题:
std::string
做自己应该?在C++ 11中有像这样的可变参数模板:
template< class T, class... Args >
unique_ptr<T> make_unique( Args&&... args )
{
return unique_ptr<T>(new T(std::forward<Args>(args)...));
}
Run Code Online (Sandbox Code Playgroud)
有一些好奇这个问题:表达std::forward<Args>(args)...
同时使用Args
和args
,但只有一个...
令牌.此外,std::forward
是一个非可变参数模板函数,只接受一个模板参数和一个参数.那个(大致)的语法规则是什么?如何概括?
另外:在函数实现中,省略号(...
)位于感兴趣的表达式的末尾.有没有理由在模板参数列表和参数列表中省略号位于中间?
在C++ 11之前我使用过boost::bind
或者boost::lambda
很多.该bind
部分使其成为标准库(std::bind
),另一部分成为核心语言(C++ lambdas)的一部分,并使lambdas的使用变得更加容易.如今,我几乎没用std::bind
,因为我几乎可以用C++ lambdas做任何事情.std::bind
我可以想到一个有效的用例:
struct foo
{
template < typename A, typename B >
void operator()(A a, B b)
{
cout << a << ' ' << b;
}
};
auto f = bind(foo(), _1, _2);
f( "test", 1.2f ); // will print "test 1.2"
Run Code Online (Sandbox Code Playgroud)
相当于C++ 14的等价物
auto f = []( auto a, auto b ){ cout << a << ' ' << b; }
f( "test", 1.2f …
Run Code Online (Sandbox Code Playgroud) 在C++ 11标准中,我们std::scoped_allocator_adaptor
在动态内存管理库中.这个班级最重要的用例是什么?
在C++中,堆栈溢出通常会导致程序无法恢复的崩溃.对于需要非常强大的程序,这是一种不可接受的行为,特别是因为堆栈大小有限.关于如何处理问题的一些问题.
有没有办法通过一般技术来防止堆栈溢出.(一种可扩展,强大的解决方案,包括处理大量堆栈的外部库等)
有没有办法处理堆栈溢出,以防它们发生?优选地,堆栈被解开,直到有处理器来处理该类问题.
有些语言,有可扩展堆栈的线程.这样的东西在C++中是可能的吗?
关于C++行为解决方案的任何其他有用的评论将不胜感激.
"标准还为成员函数调用参考限定符"的最常见用例是"用于*this的rvalue引用"?
顺便说一句,有关于这个语言功能一个很好的解释在这里.
在关于C++ 17进展的博客上,我阅读了以下内容:
P0007
提出一个辅助函数模板as_const
,它只需要一个引用并将其作为引用返回const
.Run Code Online (Sandbox Code Playgroud)template <typename T> std::add_const_t<T>& as_const(T& t) { return t } template <typename T> void as_const(T const&&) = delete;
为什么const&&
删除了重载?
写表达式之间是否存在语义差异
std::tie( x, y, z )
Run Code Online (Sandbox Code Playgroud)
和以下表达式?
std::make_tuple( std::ref(x), std::ref(y), std::ref(z) )
Run Code Online (Sandbox Code Playgroud)
如果是这样,有什么区别?
顺便说一句,这个问题并不是一样的问题.分配给std::tie
引用和元组之间的区别是什么?因为引用元组不是通过std::ref
,而是通过显式指定类型创建的.
我有没有抓住任何东西的lambdas,比如
[](){};
Run Code Online (Sandbox Code Playgroud)
我有一个模板类,包含这样一个lambda.由于lambda不包含非静态数据成员,也不包含虚函数,因此它应该是一个空类和DefaultConstructible.它只是一种可用于模板元编程的策略类.我想知道,为什么这样的类不是C++标准的默认构造.
旁注: 了解Lambda闭包类型如何删除默认构造函数是一个不同的问题,尽管标题看起来非常相似.它询问如何在没有可用的默认构造函数的情况下创建无状态lambda对象.我问为什么没有可用的默认构造函数.
模板类std::common_type
计算可变参数类型列表的公共类型.它是x:y?z
递归地使用三元运算符的返回类型定义的.从这个定义来看,对我而言,计算a是否std::common_type<X,Y>
是关联的,即是否是,这一点并不明显
using namespace std;
static_assert( is_same<common_type< X, common_type<Y,Z>::type >::type,
common_type< common_type<X,Y>::type, Z >::type>::value, "" );
Run Code Online (Sandbox Code Playgroud)
不会抛出一个编译时错误,所有类型X
,Y
并Z
为其is_same<...>
表达是有效的.
请注意,我不是在问
static_assert( is_same<common_type<X,Y>::type,
common_type<Y,X>::type>::value, "" );
Run Code Online (Sandbox Code Playgroud)
永远都会开火.显然不会.以上是一个完全不同的问题.
另请注意,std::common_type
C++ 14 中的规范略有变化,并且可能会在C++中再次发生变化17.因此,对于不同版本的标准,答案可能会有所不同.