草庐IT

OPERATOR

全部标签

c++ - 用于堆上内存分配的新运算符

我正在查看new运算符的签名。即:void*operatornew(std::size_tsize)throw(std::bad_alloc);但是当我们使用这个操作符时,我们从不使用强制转换。即int*arr=newint;那么,在这种情况下,C++如何将void*类型的指针转​​换为int*。因为,即使是malloc也会返回void*并且我们需要显式地使用强制类型转换。 最佳答案 operatornew和new操作符在C++中有一个非常细微的区别。(再读一遍……顺序很重要!)operatornew函数是C的malloc函数的C+

c++ - 用于堆上内存分配的新运算符

我正在查看new运算符的签名。即:void*operatornew(std::size_tsize)throw(std::bad_alloc);但是当我们使用这个操作符时,我们从不使用强制转换。即int*arr=newint;那么,在这种情况下,C++如何将void*类型的指针转​​换为int*。因为,即使是malloc也会返回void*并且我们需要显式地使用强制类型转换。 最佳答案 operatornew和new操作符在C++中有一个非常细微的区别。(再读一遍……顺序很重要!)operatornew函数是C的malloc函数的C+

c++ - 为什么非常量 std::array::operator[] 不是 constexpr?

我正在尝试使用给定函数在编译时填充二维数组。这是我的代码:templatestructTable{intdata[H][W];//std::array,W>data;//ThisdoesnotworkconstexprTable():data{}{for(inti=0;itable;//Ihavetable.dataproperlypopulatedatcompiletime它工作得很好,table.data在编译时正确填充。但是,如果我更改纯二维数组int[H][W]与std::array,W>,我在循环体中有错误:error:calltonon-constexprfunction'

c++ - 为什么非常量 std::array::operator[] 不是 constexpr?

我正在尝试使用给定函数在编译时填充二维数组。这是我的代码:templatestructTable{intdata[H][W];//std::array,W>data;//ThisdoesnotworkconstexprTable():data{}{for(inti=0;itable;//Ihavetable.dataproperlypopulatedatcompiletime它工作得很好,table.data在编译时正确填充。但是,如果我更改纯二维数组int[H][W]与std::array,W>,我在循环体中有错误:error:calltonon-constexprfunction'

确定类型是否可调用的 C++ 元函数

是否可以编写一个C++(0x)元函数来确定一个类型是否可调用?可调用类型是指函数类型、函数指针类型、函数引用类型(这些由boost::function_types::is_callable_builtin检测)、lambda类型以及任何具有重载operator()(也可能是任何具有隐式转换运算符到其中之一的类,但这不是绝对必要的)。EDIT:元函数应检测是否存在带有任何签名的operator(),包括模板化的operator()。我相信这是困难的部分。编辑:这是一个用例:templatestructand_predicate{templatebooloperator()(constAr

确定类型是否可调用的 C++ 元函数

是否可以编写一个C++(0x)元函数来确定一个类型是否可调用?可调用类型是指函数类型、函数指针类型、函数引用类型(这些由boost::function_types::is_callable_builtin检测)、lambda类型以及任何具有重载operator()(也可能是任何具有隐式转换运算符到其中之一的类,但这不是绝对必要的)。EDIT:元函数应检测是否存在带有任何签名的operator(),包括模板化的operator()。我相信这是困难的部分。编辑:这是一个用例:templatestructand_predicate{templatebooloperator()(constAr

C++ equal(==) 重载、快捷方式或比较所有属性的最佳方法

我必须在C++中为具有许多属性的类重载==运算符。当且仅当所有属性都相等时,运算符应该返回true。如果这些属性随时间发生变化,则可以使用快捷方式来避免错误。有比较一个类中每个属性的快捷方式吗? 最佳答案 没有捷径。您必须列出所有内容。通过引入一个名为tied()的成员函数可以减少一些错误来源,例如:structFoo{Aa;Bb;Cc;...private:autotied()const{returnstd::tie(a,b,c,...);}};这样您的operator==就可以使用它:booloperator==(Foocons

C++ equal(==) 重载、快捷方式或比较所有属性的最佳方法

我必须在C++中为具有许多属性的类重载==运算符。当且仅当所有属性都相等时,运算符应该返回true。如果这些属性随时间发生变化,则可以使用快捷方式来避免错误。有比较一个类中每个属性的快捷方式吗? 最佳答案 没有捷径。您必须列出所有内容。通过引入一个名为tied()的成员函数可以减少一些错误来源,例如:structFoo{Aa;Bb;Cc;...private:autotied()const{returnstd::tie(a,b,c,...);}};这样您的operator==就可以使用它:booloperator==(Foocons

c++ - 当有额外的括号时,在临时对象上调用用户定义的 operator+ 时出错

如果我有一个用户定义的operator+()如:classA{public:Aoperator+(A){returnA();}};然后以下工作按预期工作:Aa=A()+A();但是g++-4.7给出了以下错误消息:Aa=(A())+A();具体的错误信息是error:nomatchfor‘operator+’in‘+A()’。看起来(A())在表达式中被忽略了。我的问题是:Aa=(A())+A();是否应该编译,如果没有,为什么不呢?注意:当我执行#defineX(Identity())然后尝试执行X+X时,这发生在我身上。 最佳答案

c++ - 当有额外的括号时,在临时对象上调用用户定义的 operator+ 时出错

如果我有一个用户定义的operator+()如:classA{public:Aoperator+(A){returnA();}};然后以下工作按预期工作:Aa=A()+A();但是g++-4.7给出了以下错误消息:Aa=(A())+A();具体的错误信息是error:nomatchfor‘operator+’in‘+A()’。看起来(A())在表达式中被忽略了。我的问题是:Aa=(A())+A();是否应该编译,如果没有,为什么不呢?注意:当我执行#defineX(Identity())然后尝试执行X+X时,这发生在我身上。 最佳答案