显式调用重载的运算符函数
题目:已知表达式++a中的”++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为:
a.operator++();
要点分析:
- 当重载运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数显式参数数目比运算对象数目少一个。(C5 P490)
- 递增(递减)运算符显式调用(C5 P504)
- 前置版本:
a.operator++();
- 后置版本:
a.operator++(0);
- 前置版本:
格式化输出
题目:以下程序的运行结果是()
int main(void)
{
printf("%s , % 5.3s\n","computer","computer");
return 0;
}
要点分析:
1. %m.ns 表示输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
2. 格式化输出如果规定了输出列的,不够的时候是右对齐,左侧补零。够了就全部输出。
答案:computer,com
题目:假设在一个 32 位 little endian (小端模式) 的机器上运行下面的程序,结果是多少? ( 1,0,2)
#include <stdio.h>
int main()
{
long long a = 1, b = 2, c = 3;
printf("%d %d %d\n", a, b, c);
return 0;
}
要点分析:
- long在32位机器是4字节,在64位机器是8字节,但是long long,不管在哪个机器都是8字节;(后续再博客里会整理的)
- printf函数的原型是printf(const char*,…);
- printf函数是自右向左一股脑压入栈的;
- %d输出的是4个字节,int类型所占的字节数。
有了上述四条,本题目就相对比较简单了。由于a,b,c
是long long
类型,占8个字节,因此:
不知道算什么
问题: math.h的abs返回值( )?
要点分析:</