小编use*_*666的帖子

用数字初始化常量引用

下面这行是什么意思?为什么允许这样做,因为 0 是右值而不是变量名?const这句话的意义何在?

const int &x = 0;
Run Code Online (Sandbox Code Playgroud)

c++ reference constants rvalue-reference

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

C++模板类操作符重载具有相同的签名

一个简单的C++ OO问题重新定位模板和运算符重载:在下面的类中,我重载了索引运算符两次:

template<class A, class B>
class test
{
  A a1;
  B a2;
public:
  A& operator[](const B&);
  B& operator[](const A&);
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用相同的类型名实例化此模板类的对象:

test<int, int> obj;
Run Code Online (Sandbox Code Playgroud)

调用索引运算符将导致错误,因为两个重载函数将具有相同的签名.

有什么方法可以解决这个问题吗?

对不起,如果这是一个基本问题.我仍在学习!

c++ templates class operator-overloading

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

C++,静态数组,指针,长度

有人可以向我解释为什么这段代码有效吗?!!

我知道A持有&A [0]并且它不是一个真正的指针,就好像你想要<< A,你会得到&A [0],但这个结果对我来说看起来很奇怪.

int main()
{
    double A[] = {2.4, 1.2, 4.6, 3.04, 5.7};
    int len =  *(&A+1) - A; // Why is this 5?
    cout << "The array has " << len << " elements." << endl;
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

为什么这段代码不起作用?你怎么能让它发挥作用?

void test(double B[])
{
  int len = *(&B+1) - B;
  cout << len << endl;

}
int main()
{
    double A[] = {2.4, 1.2, 4.6, 3.04, 5.7};
    test(A);
    system("pause");
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers pointer-arithmetic

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

基于不同字段的对象向量的排序函数

我有一个对象向量:

struct Student{   
  string name;   
  string id;   
  string major;
  int age;
};

vector<Student> s;
Run Code Online (Sandbox Code Playgroud)

有没有办法编写一个通用(可能是模板)函数来根据不同的字段对这个向量(或数组)进行排序,而不是编写四个不同的函数?

c++ struct function vector member-variables

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

引发多个异常时catch块执行的顺序是什么?为什么?

在以下代码中,该函数在一条语句中引发两个异常。现在,为什么int catch块处理异常而不是其他块?是否总是存在最后一个异常是要处理的异常的情况?


    try
    {
        quotient = safe_divide(numerator , denominator);
    }
    catch(DivideByZero)
    {
        cout << "Error: Division by zero!\n"
            << "Program aborting.\n";
        system("pause");
    }

    catch (int )
    {
        cout << "got you " << endl;
        cout << "top : " << numerator << endl;

        system("Pause");
        exit(0);
    }

    double safe_divide(int top, int bottom) throw(DivideByZero,int)
    {
        if(bottom == 0)
            throw (DivideByZero(),top);

        return top/static_cast<double>(bottom);
    }


Run Code Online (Sandbox Code Playgroud)

c++ exception try-catch throw

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