草庐IT

unique_name

全部标签

c++ - "Universal character name conversion"在 C++ 中是什么意思?

C++98显然将此作为编译阶段的标准之一。什么意思,为什么一开始就执行? 最佳答案 通用字符名称类似于\uFFFD或\U0010FFFD。这是一种在源代码中写入字符的方法,其中源代码编码不包含该字符。C++规定在翻译的第一阶段将不在基本源字符集中的字符转换为通用字符名称。这样做的原因是通用字符名称和不在基本源字符集中但在源字符集中的字符得到相同的处理。as-if规则意味着实际上不需要实现来执行此通用字符名称转换,只要它把写为通用字符名称的扩展字符与字面上显示的扩展字符相同在源代码中。 关

c++ - 将 std::unique_ptr 类成员标记为 const

许多使用std::unique_ptr来管理类依赖项所有权的示例如下所示:classParent{public:Parent(Child&&child):_child(std::make_unique(std::move(child))){}private:std::unique_ptr_child;};我的问题是将_child成员标记为const是否会产生意想不到的副作用?(除了确保不能在_child上调用reset()、release()等)。我问是因为我还没有在示例中看到它,也不知道这是故意的还是只是为了简洁/一般性。 最佳答案

c++ - std::make_unique(以及 emplace、emplace_back)对 initializer_list 参数的笨拙推导

假设我有这个结构:structposition{intx,y;};和另一个将this作为构造函数参数的类:classpositioned{public:positioned(positionp):pos(p){}private:positionpos;};我怎样才能得到简单的autobla=std::make_unique({1,2});上类?目前,编译器试图通过initializer_list匹配并调用make_unique的数组变体,这很愚蠢,因为positioned只有一个构造函数。emplace出现同样的问题和emplace_back功能。几乎所有将其可变模板参数转发给类的构造

c++ - 使用 make_shared 和 make_unique 时需要检查 nullptr 吗?

如果我使用make_shared或make_unique创建指针,我是否必须检查它是否为nullptr,例如:std::unique_ptrp=std::make_unique();if(p==nullptr){........}如果您真的内存不足,std::make_unique将通过预期。所以你永远不会从std::make_unique得到空指针。这是正确的吗?所以在执行make_shared和make_unique时不需要检查nullptr吗? 最佳答案 来自std::make_unique上的cppreference(类似于

c++ - std::list< std::unique_ptr<T>>:传递它

假设我有一个std::list的classT:std::listl;将其传递给函数时,我会使用引用:someFunction(std::list&l)传递unique_ptr的std::list(元素)的最佳方式是什么?std::list>l;像这样:someFunction(std::unique_ptrptr)或者这个:someFunction(T*ptr)或者这个:someFunction(T&ref)例如,我如何使用std::list的back()函数来调用它?恕我直言,这些都是“有点”等同的,但我确定我在这里遗漏了一些东西。谢谢 最佳答案

没有宏的 C++ 简单反射 : Print Variable Name and Its Value

在C++中是否有一种非宏的方式来打印变量名及其值。这是宏方法:#defineSHOW(a)std::coutPS:我用的是Linux,不需要跨平台的解决方案 最佳答案 不,C++不支持反射,唯一的方法(据我所知)是使用宏。 关于没有宏的C++简单反射:PrintVariableNameandItsValue,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6849965/

c++ - 使用 typeinfo::name() 后内存泄漏

我有一个程序,其中部分用于信息日志记录,我在使用时输出一些类的名称(具体来说,我在日志中添加了一个条目,上面写着Messages::CSomeClasstransmittedto127.0.0.1)。我使用类似于以下的代码执行此操作:std::stringgetMessageName(void)const{returnstd::string(typeid(*this).name());}是的,在有人指出之前,我意识到typeinfo::name的输出是特定于实现的。根据MSDNThetype_info::namememberfunctionreturnsaconstchar*toanu

c++ - 将 unique_ptr 用于所有权,否则使用原始指针?

我正在使用C++11编写一些代码。我有classX{/**/};classA{std::vectorva_x;};classB{std::vectorvb_x;std::vectorvb_a;};我的类A中“va_x”的X*指向的对象也被我的类B中的“vb_x”的X*指向。现在我想使用智能指针。对我来说,很明显B类拥有X*指向的对象的所有权(特别是因为我的A实例属于B)所以我应该为B中的X使用unique_ptr:classB{std::vector>vb_x;std::vectorvb_a;};我的问题是,我应该为A类做什么?我应该保留原始指针吗?通过这样做,在我的单元测试中,我必须

c++ - 模板错误 : nontype ".. [with T=T] is not a type name"

尝试对我的内存对齐进行类型定义,我得出了以下结构(由于我需要更正GNU版本,该结构仍在进行中):#ifdefined(__GNUG__)templatestructsfo_type{typedefT*restrict__attribute__((aligned(32)))aptr32;};#elifdefined(__INTEL_COMPILER)templatestructsfo_type{typedefT*restrict__attribute__((aligned(32)))aptr32;};#endif然后我尝试像这样使用它:templateclasstsfo_vector{p

c++ - 将 std::unique_ptr 与 lambda 交换为删除器——GCC

我们可以使用lambda作为带有std::unique_ptr的删除器吗?实际上,我是用clang++做的,它很高兴这样做。我正在使用std::swap换成std::unique_ptr;其中autodeleter=[](structaddrinfo*ptr){if(ptr!=nullptr){freeaddrinfo(ptr);}};.Clang的交换似乎不需要复制赋值运算符,但gcc的std::swap需要,正如您在这些日志中看到的那样:Infileincludedfrom/usr/include/c++/4.8.1/memory:81:0,from/home/zenol/proj