草庐IT

new-feature

全部标签

c++ - 如何结合 std::make_shared 和 new(std::nothrow)

C++的new有一个选项可以在分配失败时返回空指针而不是抛出bad_alloc异常。Foo*pf=new(std::nothrow)Foo(1,2,3);(是的,我知道这只会阻止new抛出bad_alloc;它不会阻止Foo的构造函数抛出异常。)如果您想使用共享指针而不是原始指针,您通常应该使用make_shared,因为它可以巧妙地分配控制block。autopf=std::make_shared(1,2,3);make_shared封装了新版本,这使得(?)无法选择nothrow版本。因此,您似乎必须放弃make_shared并明确调用new。std::shared_ptrpf(n

c++ - 如何结合 std::make_shared 和 new(std::nothrow)

C++的new有一个选项可以在分配失败时返回空指针而不是抛出bad_alloc异常。Foo*pf=new(std::nothrow)Foo(1,2,3);(是的,我知道这只会阻止new抛出bad_alloc;它不会阻止Foo的构造函数抛出异常。)如果您想使用共享指针而不是原始指针,您通常应该使用make_shared,因为它可以巧妙地分配控制block。autopf=std::make_shared(1,2,3);make_shared封装了新版本,这使得(?)无法选择nothrow版本。因此,您似乎必须放弃make_shared并明确调用new。std::shared_ptrpf(n

c++ - openCV features2D 中的 `query` 和 `train` 是什么

在features2D类的任何地方,我都会看到术语query和train。例如matches有trainIdx和queryIdx,而Matchers有train()方法.我知道英文train和query这两个词的定义,但是我不明白这个属性或方法的含义。附:我明白,这是个非常愚蠢的问题,但也许是因为英语不是我的母语。 最佳答案 为了完成sansuiso的回答,我想选择这些名称的原因应该是在某些应用程序中我们事先有一组图像(训练图像),例如在您的办公室内拍摄的10张图像。可以提取特征并且可以为这些图像计算特征描述符。并在运行时将图像提供

c++ - openCV features2D 中的 `query` 和 `train` 是什么

在features2D类的任何地方,我都会看到术语query和train。例如matches有trainIdx和queryIdx,而Matchers有train()方法.我知道英文train和query这两个词的定义,但是我不明白这个属性或方法的含义。附:我明白,这是个非常愚蠢的问题,但也许是因为英语不是我的母语。 最佳答案 为了完成sansuiso的回答,我想选择这些名称的原因应该是在某些应用程序中我们事先有一组图像(训练图像),例如在您的办公室内拍摄的10张图像。可以提取特征并且可以为这些图像计算特征描述符。并在运行时将图像提供

c++ - 元编程 : Declare a new struct on the fly

是否可以即时声明新类型(空结构体或没有实现的结构体)?例如constexprautomake_new_type()->???;usingA=decltype(make_new_type());usingB=decltype(make_new_type());usingC=decltype(make_new_type());static_assert(!std::is_same::value,"");static_assert(!std::is_same::value,"");static_assert(!std::is_same::value,"");“手动”解决方案是template

c++ - 元编程 : Declare a new struct on the fly

是否可以即时声明新类型(空结构体或没有实现的结构体)?例如constexprautomake_new_type()->???;usingA=decltype(make_new_type());usingB=decltype(make_new_type());usingC=decltype(make_new_type());static_assert(!std::is_same::value,"");static_assert(!std::is_same::value,"");static_assert(!std::is_same::value,"");“手动”解决方案是template

c++ - 通过 const 指针修改用 new 创建的对象是否合法?

所以thisanswer让我想到了将new的结果分配给指向const的指针的场景。AFAIK,在这种情况下,您没有理由不能合法const_castconstness并实际修改对象:structX{intx;};//....constX*x=newX;const_cast(x)->x=0;//okay但后来我想-如果你真的想要new创建一个const对象怎么办。所以我尝试了structX{};//....constX*x=newconstX;它编译好了!!!这是GCC扩展还是标准行为?我在实践中从未见过这种情况。如果它是标准的,我会尽可能开始使用它。 最佳答案

c++ - 通过 const 指针修改用 new 创建的对象是否合法?

所以thisanswer让我想到了将new的结果分配给指向const的指针的场景。AFAIK,在这种情况下,您没有理由不能合法const_castconstness并实际修改对象:structX{intx;};//....constX*x=newX;const_cast(x)->x=0;//okay但后来我想-如果你真的想要new创建一个const对象怎么办。所以我尝试了structX{};//....constX*x=newconstX;它编译好了!!!这是GCC扩展还是标准行为?我在实践中从未见过这种情况。如果它是标准的,我会尽可能开始使用它。 最佳答案

c++ - GCC 拒绝在 PowerPC 上对 operator new/delete 发出长时间的调用

PowerPC分支只有24位可用于目标偏移量,因此如果文本部分变得太大,一端的分支将无法到达另一端的目标。有更长的指令序列可以到达更远的目标(偏移量是32位而不是24位),但GCC默认不使用它,除非您将其传递给-mlongcall选项。然而,即使打开了这个选项,GCC仍然会为某些函数生成短调用,即operatornew和operatordelete例如,给定以下代码:externvoidfoo();intmain(intargc,char**argv){foo();newchar;}正常运行GCC将生成程序集:bl_Z3foov//voidfoo()bl_Znwj//operatorn

c++ - GCC 拒绝在 PowerPC 上对 operator new/delete 发出长时间的调用

PowerPC分支只有24位可用于目标偏移量,因此如果文本部分变得太大,一端的分支将无法到达另一端的目标。有更长的指令序列可以到达更远的目标(偏移量是32位而不是24位),但GCC默认不使用它,除非您将其传递给-mlongcall选项。然而,即使打开了这个选项,GCC仍然会为某些函数生成短调用,即operatornew和operatordelete例如,给定以下代码:externvoidfoo();intmain(intargc,char**argv){foo();newchar;}正常运行GCC将生成程序集:bl_Z3foov//voidfoo()bl_Znwj//operatorn