小编Ral*_*zky的帖子

C++ 11中支持Unicode的程度如何?

我读过并听说C++ 11支持Unicode.关于这一点的一些问题:

  • C++标准库如何支持Unicode?
  • 难道std::string做自己应该?
  • 我该如何使用它?
  • 潜在的问题在哪里?

c++ unicode c++11

176
推荐指数
5
解决办法
7万
查看次数

在可变参数模板的上下文中,"..."标记的规则是什么?

在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)...同时使用Argsargs,但只有一个...令牌.此外,std::forward是一个非可变参数模板函数,只接受一个模板参数和一个参数.那个(大致)的语法规则是什么?如何概括?

另外:在函数实现中,省略号(...)位于感兴趣的表达式的末尾.有没有理由在模板参数列表和参数列表中省略号位于中间?

c++ variadic-templates c++11

96
推荐指数
2
解决办法
3566
查看次数

为什么在C++ 14中使用std :: bind over lambdas?

在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++ lambda bind c++14

56
推荐指数
3
解决办法
3万
查看次数

std :: scoped_allocator_adaptor的目的是什么?

在C++ 11标准中,我们std::scoped_allocator_adaptor在动态内存管理库中.这个班级最重要的用例是什么?

c++ containers memory-management allocator c++11

28
推荐指数
2
解决办法
2575
查看次数

如何处理或避免C++中的堆栈溢出

在C++中,堆栈溢出通常会导致程序无法恢复的崩溃.对于需要非常强大的程序,这是一种不可接受的行为,特别是因为堆栈大小有限.关于如何处理问题的一些问题.

  1. 有没有办法通过一般技术来防止堆栈溢出.(一种可扩展,强大的解决方案,包括处理大量堆栈的外部库等)

  2. 有没有办法处理堆栈溢出,以防它们发生?优选地,堆栈被解开,直到有处理器来处理该类问题.

  3. 有些语言,有可扩展堆栈的线程.这样的东西在C++中是可能的吗?

关于C++行为解决方案的任何其他有用的评论将不胜感激.

c++ stack-overflow crash error-handling

24
推荐指数
2
解决办法
3万
查看次数

什么是"*this的右值参考"?

"标准还为成员函数调用参考限定符"的最常见用例是"用于*this的rvalue引用"?

顺便说一句,有关于这个语言功能一个很好的解释在这里.

c++ rvalue-reference c++11

24
推荐指数
2
解决办法
1922
查看次数

为什么删除了as_const的const &&重载?

关于C++ 17进展的博客上,我阅读了以下内容:

P0007提出一个辅助函数模板as_const,它只需要一个引用并将其作为引用返回const.

template <typename T> std::add_const_t<T>& as_const(T& t) { return t }
template <typename T> void as_const(T const&&) = delete;
Run Code Online (Sandbox Code Playgroud)

为什么const&&删除了重载?

c++ templates const c++17

20
推荐指数
1
解决办法
479
查看次数

std :: tie和std :: make_tuple与std :: ref参数有什么区别?

写表达式之间是否存在语义差异

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,而是通过显式指定类型创建的.

c++ tuples reference c++11

20
推荐指数
2
解决办法
1901
查看次数

为什么C++中的lambda永远不会是DefaultConstructible

我有没有抓住任何东西的lambdas,比如

[](){};
Run Code Online (Sandbox Code Playgroud)

我有一个模板类,包含这样一个lambda.由于lambda不包含非静态数据成员,也不包含虚函数,因此它应该是一个空类和DefaultConstructible.它只是一种可用于模板元编程的策略类.我想知道,为什么这样的类不是C++标准的默认构造.

旁注: 了解Lambda闭包类型如何删除默认构造函数是一个不同的问题,尽管标题看起来非常相似.它询问如何在没有可用的默认构造函数的情况下创建无状态lambda对象.我问为什么没有可用的默认构造函数.

c++ lambda default-constructor c++11

18
推荐指数
1
解决办法
856
查看次数

`std :: common_type`是关联的吗?

模板类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,YZ为其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_typeC++ 14 中的规范略有变化,并且可能会在C++中再次发生变化17.因此,对于不同版本的标准,答案可能会有所不同.

c++ templates types metaprogramming c++11

16
推荐指数
2
解决办法
514
查看次数