深入C++混乱地带 001 函数参数默认值

简介: 这个系列将推出一些让人通常意想不到的C++代码,我们的目的是通过这些代码来更深刻的认识C++这门编程语言。但是,这里很多做法在开发中都是不推荐的,应当避免。

1)后置声明函数默认参数来简化系统库。


#include <iostream>#include <ctime>externtime_ttime(time_t*=nullptr);
intmain()
{
std::cout<<time() <<std::endl;
// usuallystd::cout<<time(nullptr) <<std::endl;
return0;
}


2)声明单个默认参数

#include <iostream>usingnamespacestd;
voidshow_point(intx, inty, intz)
{
cout<<x<<" "<<y<<" "<<z<<endl;
}
externvoidshow_point(intx, inty, intz=0);
externvoidshow_point(intx, inty=0, intz);
externvoidshow_point(intx=0, inty, intz);
intmain()
{
show_point(1, 2, 3);
show_point(1);
show_point(1, 2);
return0;
}

3)来看下虚函数的默认参数

#include <iostream>usingnamespacestd;
classA{
public:
virtualvoidrun(intx=0)
    {
cout<<"this is A x="<<x<<endl;
    }
virtualvoidrun_x0()
    {
run();
    }
virtual~A() =default;
};
classB : publicA{
public:
virtualvoidrun(intx=1) override    {
cout<<"this is B x="<<x<<endl;
    }
};
intmain()
{
Bb;
B*pb=&b;
A*pa=pb;
pb->run(); // this is B x=1pa->run(); // this is B x=0 (用A的默认参数调用了B的run)pb->run_x0(); // this is B x=0 (同pa->run())pa->run_x0(); // this is B x=0 (同pa->run())return0;
}
相关文章
|
27天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
45 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
23 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
154 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
30 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
41 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
76 2
|
2月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
22 3
|
3月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法