C++ primer第六章

1 引用的底层实现是指针常量 int* const
但是指针常量>引用 比如数组就不可以用引用的方式,比如int &arr[] 这样会导致arr[0] = 8 ,程序不知道是将数组下标0的内容置为8,还是所引用的值置为8.
2 函数传参的时候会忽略顶层const

3 函数传参的时候,如果不改变参数的值,还是设置为常量比较好,这样可以传入字符串字面值
4

编写一个函数声明,使其返回数组的引用并且该数组包含10个string对象。不用使用尾置返回类型、decltype或者类型别名。

std::string (&fun(std::string (&arrs)[10]))[10];
5

为上一题的函数再写三个声明,一个使用类型别名,另一个使用尾置返回类型,最后一个使用decltype关键字。你觉得哪种形式最好?为什么?

using ARRS = std::string[10];
ARRS &fun(ARRS &arrs);

auto fun(std::string (&arrs)[10]) -> std::string (&)[10];

std::string arrs1[10];
decltype(arrs1) &fun(decltype(arrs1) &arrs);

using 最简洁

6
int ff(int a, int b = 0, int c = 0);
char* init(int ht = 24, int wd, char bckgrnd);

第一条声明是正确的。
第二条声明是错误的,因为形参ht被赋予了默认值,那么它后面的所有形参wd,bckgrnd必须要有默认值。

7
char* init(int ht, int wd = 80, char bckgrnd = ' ');



int main() {
	init();           //错误:第一个形参没有初始化
	init(24, 10);     //正确
	init(14, '*');    //正确:但是与程序员意图不符合,等价于init(14,'*',' ')
	                  //此处是将char类型转换成int类型再初始化了wd
	init(14,80, '*'); //更改后
}
8

内联函数在程序中可以多次定义,它的多个定义必须完全一致,所以放在头文件中比较好;

9

不能。
因为constexpr函数要求返回值类型一定是constexpr类型。而s1.size()<s2.size()无法构成常量表达式,原因有下:
1、constexpr关键字不能进行强制类型转换:即无法将s1.size()<s2.size()的结果强制转成constexpr类型。
2、虽然s1.size()<s2.size()的结果可以强制转换成常量类型,但由于常量≠常量表达式,即const≠constexpr,原因是:一个常量可能在运行时才能确定值,而常量表达式要求在编译阶段就确定值。因此在这里s1.size()<s2.size()无法构成常量表达式(它们在运行时才能确定值,只可能转成常量)

10
using pf = int(*)(int,int);
vecotr<pf> vec;//6.54


int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
int multiply(int a, int b) { return a * b; }
int divide(int a, int b) { return b != 0 ? a / b : 0; }

int main()
{
	vector<int (*)(int, int)> vf{add, subtract, multiply, divide};

	for(const auto &e : vf) cout << e(4, 2) << endl;

	return 0;
}//6.56


posted @   xiazichengxi  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩