C++初认识(namespace、cout、cin、函数重载、缺省参数)

cout、cin、endl
cout是标准输出流对象,<<是输出操作符;cin是标准输入流对象,>>是输入操作符;endl是换行符操作符。他们都属于C++标准库,所以都在std的名字空间里。
在写C++程序时,一般会加上using namespace std,这是为什么呢?
首先,先了解下关键字namespace:
namespace:
namespace,即名字空间,C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。不指定名字空间的变量或函数都是当前名字空间下的变量或函数。不定义名字空间的情况下,都属于全局名字空间。

namespace name1
{
	int a = 10;
}
namespace name2
{
	int a = 20;
}
int a = 3;
int main()
{
	std::cout << name1::a << std::endl;//10
	std::cout << name2::a << std::endl;//20
	std::cout <<a << std::endl;//3
	system("pause");
	return 0;
}

标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准C++的平台上使用标准C++库中的组件,只要写一个using指示符:using namespace std;就可以直接使用标准C++库中的所有成员。 或者 std::成员 的方式也可以使用C++库里的成员。
::是作用域解析符。

#include<iostream>
int main()
{
	cout << "hello world" << endl;//必须加上using namespace std;
	std::cout << "hello world" <<std:: endl;//如果没有用using namespace std
}

总结namespace:
用法:名字::或者using namespace std;
作用:解决命名冲突。
一般会使用using namespace std,当冲突时再区别名字空间域(名字::)。
cout、cin自动识别类型

#include<iostream>
using namespace std;
int main()
{
	int i = 0;
	cin >> i;//scanf("%d", &i);
	cout << i << endl;//printf("%d\n",i);
	cout << "hello world" << "\n";//printf("%s\n", "hello world");
	system("pause");
	return 0;
}

函数重载

//func.h
#include<stdio.h>
void func(int i);//函数声明

//func.c
#include"func.h"
void func(int i)
{
	printf("%d\n", i);
}

//test.c
#include"func.h"
#include<stdlib.h>
int main()
{
	func(10);
	system("pause");
	return 0;
}

如果将func.c的func函数注释掉,将会出现一种链接错误:
这里写图片描述
为什么会出现这种错误呢?首先了解程序的编译过程:
这里写图片描述
所谓链接错误是有声明,没有定义。当把func.c的func函数注释掉,main函数无法找到func的地址,就出现了链接错误。(有声明,没有定义编译可以通过)
C++支持函数重载,而C不支持函数重载:
函数重载是指在同一作用域内,一组函数的函数名相同,参数列表不同(类型或者个数不同,返回值可同可不同)。
C++支持函数重载:
这里写图片描述
C不支持函数重载:
这里写图片描述
那为什么C++支持函数重载,而C不支持函数重载?
C++在链接时:C++符号表是函数名修饰规则:第一个void func(int i, char c),符号表是_Z4funcic(函数地址),第二个void func(char c, int i),符号表是_Z4funcci(函数地址)(_Z4funcic中4代表函数名字符个数,i是int型,c是字符型),C++在链接时将两个函数区别开,就可链接成功。
而c在连接时认是func(函数地址),即无法区分两个func函数,链接错误。
缺省函数

//全缺省,即全部参数给缺省参数
int func1(int a = 2, int b = 3)
{
	return a + b;
}
//半缺省,缺省必须连续
//int func3(int a=2,int b,int c=3) 错误,没有连续
int func2(int a, int b=3)
{
	return a + b;
}

int main()
{
	printf("%d\n",func1(3)); //6 将3传给a
	printf("%d\n", func1()); //5  没有传参则用缺省参数值
	printf("%d\n", func1(4,5)); //9  //给定实参值则用实参值

	printf("%d\n", func2(2)); // 5
	printf("%d\n", func2(2,6));// 8
	//printf("%d\n", func2()); 错误,半缺省必须将缺省参数左边参数进行传参
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要降低 coutcin 的输出速度,可以采取以下方法: 1. 减少输出频率:可以通过适当减少使用 cout 输出语句的次数来降低输出速度。避免在循环中使用 cout 输出大量信息,可以将输出集中到一个语句中,减少频繁的输出操作。 2. 提高缓冲区大小:可以通过设置缓冲区的大小来提高输出速度。使用 cout.rdbuf()->pubsetbuf() 函数可以设置输出的缓冲区大小。增加缓冲区的大小可以减少输出的次数,从而提高输出速度。 3. 禁用同步:可以通过将同步设置为 false 来禁用缓冲区的同步。使用 cout.sync_with_stdio(false) 函数可以关闭与 C 标准库的同步,从而提高输出速度。 4. 使用快速输入输出函数:可以使用更快速的输入输出函数如 printf 和 scanf 来代替 coutcin。这些函数在处理大量数据时比 iostream 库中的函数更快速。 5. 使用文件输出和输入:如果输出的数据量较大,可以将结果输出到文件中,然后再使用文件输入读取数据。使用文件输入输出可以避免频繁的控制台输出,从而提高速度。 需要注意的是,在降低输出速度的同时,也要注意保证程序的可读性和可维护性。有时候,牺牲一些速度换取代码的可读性和可维护性可能更为重要。 ### 回答2: 要降低cout/cin输出/输入的速度,可以考虑以下几个方面: 1. 减少输出/输入的信息量:只输出/输入必要的信息,避免不必要的输出/输入操作。例如,只输出/输入关键结果或用户必要的输入,避免冗余输出/输入。 2. 使用缓冲区:使用缓冲区可以减少每次输出/输入的系统调用次数,提高效率。可以使用endl来刷新缓冲区,但要注意过多的刷新会影响性能。 3. 使用格式化输出/输入:使用适当的格式化方法可以提高输出/输入速度。例如,使用setw来设置输出字段宽度,使用setprecision来控制浮点数的精度等。 4. 使用快速的IO流:可以使用更快的IO流,如iostream代替cstdio,来提高输出/输入的速度。 5. 使用多线程或异步IO:使用多线程或异步IO可以实现并行输出/输入操作,提高效率。但要注意多线程/异步IO的正确使用,避免出现竞态条件或不安全的操作。 6. 尽量避免频繁的输出/输入操作:尽量将多个输出/输入操作合并为一个,减少系统调用次数,提高效率。 总而言之,降低cout/cin输出/输入的速度可以通过减少信息量、使用缓冲区、使用格式化输出/输入、使用快速的IO流、使用多线程或异步IO以及减少频繁的输出/输入操作等方法来实现。这样可以提高程序的运行效率和用户体验。 ### 回答3: 要降低`c++`中`std::cout`和`std::cin`的速度,可以使用以下几种方法: 1. 使用`std::ios_base::sync_with_stdio(false)`函数:这个函数可以用来取消`std::cout`和`std::cin`与`stdio`的同步,默认情况下`sync_with_stdio`为`true`,即`cout`和`cin`与`stdio`同步,取消同步可以提高输入输出的速度。 ```c++ #include <iostream> int main() { std::ios_base::sync_with_stdio(false); // 取消同步 int x; std::cin >> x; std::cout << x << std::endl; return 0; } ``` 2. 使用`std::endl`替代`\n`:`std::endl`会刷新输出流缓冲区,以确保输出的内容立即显示在控制台上,但这样也会降低输出速度。相比之下,使用`\n`只是插入一个换行符,不会刷新缓冲区。 ```c++ #include <iostream> int main() { int x; std::cin >> x; std::cout << x << '\n'; // 使用'\n'而不是std::endl return 0; } ``` 3. 减少使用`std::endl`:如果不是必要的情况下,可以选择性地使用`std::endl`,在输出大量数据时可以通过将所有数据输出完后再刷新一次缓冲区。 ```c++ #include <iostream> int main() { int x; for (int i = 0; i < 1000; ++i) { std::cout << i << ' '; // 输出1000个数字 } std::cout << std::endl; // 输出完毕后再刷新缓冲区 std::cin >> x; return 0; } ``` 这些方法可以在一定程度上降低`std::cout`和`std::cin`的速度,提高程序的执行效率。但需要注意的是,在某些情况下,优化可能无法显著提高代码的运行速度,所以要根据具体情况选择合适的优化方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值