草庐IT

OPERATOR

全部标签

c++ - 从 C++11 智能指针继承并覆盖相对运算符是否可以?

根据cppreference.com,std::shared_ptr提供了一整套相对运算符(==,!=,出于某些目的,我更喜欢使用相对运算符来根据比较引用的对象(而不是指向它们的指针)对智能指针进行排序。这已经是我经常做的事情,但是使用我自己的“哑指针”,除了相对运算符之外,它们的行为大多类似于原始指针。我也想用标准的C++11智能指针做同样的事情。所以...是否可以继承C++11智能指针(shared_ptr、weak_ptr和unique_ptr)并覆盖相关运算符?有什么我需要注意的偷偷摸摸的问题吗?例如,我需要实现或使用using的其他方法来确保一切正常吗?为了终极懒惰,是否有可

c++ - 为什么在空指针上调用 "operator delete"时会调用 "delete"?

阅读thisquestion的答案时我注意到答案(例如this)暗示即使在空指针上执行delete语句时也可以调用operatordelete。所以我写了一个小片段:classTest{public:void*operatornew(size_t){/*doesn'tmatter*/return0;}voidoperatordelete(void*ptr){ptr;//tosuppresswarningandhavealinetoputbreakpointon}};intmain(){Test*ptr=0;deleteptr;}而且-令我惊讶的是-Test::operatordelet

c++ - 为什么在空指针上调用 "operator delete"时会调用 "delete"?

阅读thisquestion的答案时我注意到答案(例如this)暗示即使在空指针上执行delete语句时也可以调用operatordelete。所以我写了一个小片段:classTest{public:void*operatornew(size_t){/*doesn'tmatter*/return0;}voidoperatordelete(void*ptr){ptr;//tosuppresswarningandhavealinetoputbreakpointon}};intmain(){Test*ptr=0;deleteptr;}而且-令我惊讶的是-Test::operatordelet

c++ - 如何使用 C++11 风格的强类型定义创建新的原始类型?

我正在尝试在C++中模拟distincttype来自Nimprogramminglanguage.下面的例子不会在Nim中编译,因为编译器会捕获变量e和d尽管有不同的类型(Error:typemismatch:got(Euros,float))两者都是二进制级别的float:typeEuros=distinctfloatwhenisMainModule:vare=Euros(12.34)d=23.3echo(e+d)在C++中实现此目的的一种方法是为float编写一个包装类。但是这不适用于导出类型的API,因为大小不会与float相同。或者即使一个类的大小与一个类的存储长度相匹配flo

c++ - 如何使用 C++11 风格的强类型定义创建新的原始类型?

我正在尝试在C++中模拟distincttype来自Nimprogramminglanguage.下面的例子不会在Nim中编译,因为编译器会捕获变量e和d尽管有不同的类型(Error:typemismatch:got(Euros,float))两者都是二进制级别的float:typeEuros=distinctfloatwhenisMainModule:vare=Euros(12.34)d=23.3echo(e+d)在C++中实现此目的的一种方法是为float编写一个包装类。但是这不适用于导出类型的API,因为大小不会与float相同。或者即使一个类的大小与一个类的存储长度相匹配flo

c++ - 如何将 lambda 的 operator() 声明为 noreturn?

如何将lambda的operator()声明为noreturn?Ideone接受以下代码:#includeintmain(){[]()[[noreturn]]{std::exit(1);}();return0;}Clang3.5拒绝它:error:'noreturn'attributecannotbeappliedtotypes你可以在godbolt中试试:http://goo.gl/vsuCsF哪个是对的?更新:相关的标准部分似乎是5.1.2.5、7.6.3、7.6.4但在阅读后我仍然不是100%清楚(i)什么是正确的行为,(ii)如何将lambda的operator()标记为nor

c++ - 如何将 lambda 的 operator() 声明为 noreturn?

如何将lambda的operator()声明为noreturn?Ideone接受以下代码:#includeintmain(){[]()[[noreturn]]{std::exit(1);}();return0;}Clang3.5拒绝它:error:'noreturn'attributecannotbeappliedtotypes你可以在godbolt中试试:http://goo.gl/vsuCsF哪个是对的?更新:相关的标准部分似乎是5.1.2.5、7.6.3、7.6.4但在阅读后我仍然不是100%清楚(i)什么是正确的行为,(ii)如何将lambda的operator()标记为nor

c++ - 使用 ? 返回可选值: operator

我经常需要对函数使用可选类型:std::optionalget(conststd::string&field){autoit=map.find(field);if(it!=map.end())returnit->second;return{};}有没有办法在一行中返回可选值?例如这个:std::optionalget(conststd::string&field){autoit=map.find(field);returnit!=map.end()?it->second:{};}导致错误error:expectedprimary-expressionbefore'{'tokenretu

c++ - 使用 ? 返回可选值: operator

我经常需要对函数使用可选类型:std::optionalget(conststd::string&field){autoit=map.find(field);if(it!=map.end())returnit->second;return{};}有没有办法在一行中返回可选值?例如这个:std::optionalget(conststd::string&field){autoit=map.find(field);returnit!=map.end()?it->second:{};}导致错误error:expectedprimary-expressionbefore'{'tokenretu

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD