小编meg*_*ium的帖子

以下两个涉及自动返回类型的声明是否相同?如果是这样,为什么?

我很困惑为什么我正在阅读的书说以下两个声明具有相同的效果:

template<typename T1, typename T2> auto max (T1 a, T2 b) -> decltype(b<a?a:b);

template<typename T1, typename T2> auto max (T1 a, T2 b) -> decltype(true?a:b);
Run Code Online (Sandbox Code Playgroud)

在第一个声明中,返回类型max(a, b)可以是类型a或类型b.在第二个声明中,返回类型是类型a.两个声明如何具有相同的效果?

以下是我读到的文章:

在此输入图像描述

在此输入图像描述

c++ c++11 c++14

5
推荐指数
3
解决办法
122
查看次数

自由函数运算符==()或成员函数运算符==()中哪个优先?

当同时定义了自由运算符函数和成员运算符函数时,使用哪一个进行比较?

#include <iostream>

class A;
class B;

bool operator==(const A &a, const B &b){ return true; };

class A
{
  public:
      bool operator==( const B &rhs ){ return false; };
};

class B
{
};

int main( int argc, char **argv )
{
  A a;
  B b;
  if( a == b )
  { 
      std::cout << "a==b" << std::endl;
  }
};
Run Code Online (Sandbox Code Playgroud)

我运行了几次代码,似乎成员运算符胜出了。总是这样吗?

c++ c++11 c++14 c++17

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

为什么为派生类定义复制构造函数需要定义基类的默认构造函数?

我在单个 cpp 文件中有以下代码:

class Base
{
  public:
    //constructor
    Base() = delete;
};

class Derived : public Base
{
  public:
    //copy constructor
    Derived( const Derived & other ){};
};

int main( int argc, char* argv[] )
{
  //empty
}
Run Code Online (Sandbox Code Playgroud)

但是编译cpp文件会报错

exp.cpp:在复制构造函数'Derived::Derived(const Derived&)'中:
exp.cpp:15:37: 错误:使用已删除的函数'Base::Base()'
Derived(const Derived & other){};

exp.cpp:7:5: 注意:这里声明
Base() = delete;
^~~~

我不明白为什么。当您为派生类定义复制构造函数时,基类默认构造函数如何发挥作用?

c++ constructor derived-class copy-constructor

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