[整理自用]c++错题(长期更新)

本文整理了C++编程中的一些常见错题,涉及显式调用重载的运算符函数、格式化输出的规则、类型安全的概念,以及时间复杂度、内存管理、结构体、纯虚函数与抽象基类等多个方面的问题和解析,旨在帮助读者巩固C++基础知识。

显式调用重载的运算符函数

题目:已知表达式++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;
}

要点分析:

  1. long在32位机器是4字节,在64位机器是8字节,但是long long,不管在哪个机器都是8字节;(后续再博客里会整理的)
  2. printf函数的原型是printf(const char*,…);
  3. printf函数是自右向左一股脑压入栈的;
  4. %d输出的是4个字节,int类型所占的字节数。

有了上述四条,本题目就相对比较简单了。由于a,b,clong long类型,占8个字节,因此:
图1

不知道算什么

问题: math.h的abs返回值( )?
要点分析:

c中的函数申明为 int abs(int num);

int取值范围是负数比正数多1的,因此:
1. num为0或正数时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值