C++中几个问题

C++中,关键字const在函数前/后使用分别的意义

以下代码:用链表实现stack

// Stack类中:
template <class T>
const T Stack<T>::Top() const {
    if (top == nullptr || count == 0) {
        cout << "There have no data, can't top." << endl;
        return 0;
    }
    return top->data;
}
// main函数中:
Stack<int> s;
s.Push(1);
int t = s.Top();
cout << t << endl; // output: 1

关键字const在函数之前

返回值:const int 对象

int &t = s.Top(); // error

关键字const在函数之后

这是说 函数Func是一个const成员函数,const成员函数不能修改成员变量(除非声明为mutable的变量):

在class Stack中有一个成员变量:count;

如果在函数Top)_中,你要:this->count = 1; // compiler error

// Top()函数体中
this->count = 1; // error

关键字const在变量前后不同位置,含义不同

  • first:

    const int *Constant1;

    int const *Constant1;

    Constant1 是指针类型,指向constant int类型。

  • second

    int * const Constant2;

    这是一个constant指针,指向一个integer

  • third

    int const * const Constant3;

    Constant3是一个constant指针指向constant int类型数据。

可以试下它:

#include <iostream>
using namespace std;
int main(void) {
    // first
    const int *p = nullptr; //int const *p = nullpte;
    int a = 0;
    const int b = 1;
    p = &a;
//    *p = 2;
    cout << *p << endl;
    p = &b;
//    *p = 1;
    cout << *p << endl;
    // second
    a = 0;
    int * const q = &a;
//    b = 1; // error, it's a const integer
    int c = 2;
//    q = &c; // error, pointer q is constant
    cout << *q << endl;   
    return 0;
}

C中检查输入是否是numeric

for (int i = 0; str[i] != '\0'; i++) {
    if (!isdifit(str[i]))
        return false;
}
return true;

malloc VS new

C: malloc; free

C++: new; delete

一句话:如果不是被用C,那就不要去用malloc

NULL vs nullptr

  • nullptr 总是指针类型
  • C的NULL直接带到C++中了,其中,cout << NULL << endl; // 0

在建立一个指针时,要立马给它初始化,若指向为空,则:

int *p = nullptr;

void类型函数是否可以用return返回

可以

return void(); // return;

gcc 参数 -Wall

gcc -Wall [options] [source files] [object files] [-o output file]

gcc -Wall -o test test.c

区别在于可以更为详细详细地输出信息,可以试一下:

// test.c
#include <stdio.h>
int main(void) {
    printf("Hello World!\n");
    int i = 0;
}

文件重定向

当反复从键盘敲入测试用例时,繁琐,可以用文件重定向

// hello.cpp
#include <iostream>
using namespace std;

int main(void) {
    int a, b;
    cin >> a >> b;
    cout << a << ", " << b << endl;

    return 0;
}
$ g++ -o hello hello.cpp
$ ./hello < helloIn.txt > helloOut.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值