You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Stroustrup在PPP第二版称char不支持++运算符?实际测试可用

C中char类型的/--运算符支持问题

我在Stroustrup所著《C编程原理与实践》(Programming Principles and Practice Using C,简称PPP)第二版的「常用类型的实用运算符」表格中看到,char类型不支持++运算符,但实际测试发现并非如此,因此有以下疑问:

测试代码与运行结果

我编写了一段测试代码验证char的自增自减行为:

#include <iostream>
using namespace std;

int main() {
  char ch=24;
  cout << "Enter ch: ";
  cin >> ch; cout << "ch: " << ch << endl;
  ch=ch+1; cout << "ch + 1: " << ch << endl;
  ch++; cout << "ch++: " << ch << endl;
  ch--; cout << "ch--: " << ch << endl;
  return 0;
}

使用g++ 12.2.0-14编译运行,输入字符'g'后得到结果:

$ g++ 2.cpp 
$ ./a.out 
Enter ch: g
ch: g
ch + 1: h
ch++: i
ch--: h

$ g++ --version
g++ (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

从结果可见,char类型可以正常使用++、--运算符。

核心疑问

  1. C11和C14标准是否支持char类型的++、--运算符?
  2. 为何Stroustrup会做出char不支持该运算符的表述?

解答

关于标准支持

C11和C14标准完全支持char类型使用++(自增)和--(自减)运算符。
在C++标准中,char属于算术类型(signed char、unsigned char、char都是整数类型的子集),而自增/自减运算符的适用范围明确包含所有可修改的左值算术类型,因此char类型在语法上天然支持这些运算符,你的测试结果也符合标准规定。

关于书中表述的可能原因

书中的表述大概率是存在歧义或笔误,而非标准层面的事实,常见的可能性有两种:

  • 语义层面的建议而非语法限制:Stroustrup可能想强调,当char作为「字符语义」使用时(比如存储字母、符号),并非所有场景下的自增/自减都有合理的业务意义(比如对非字母字符自增可能得到无意义的结果),因此不建议滥用这种写法,但这并不代表语法上不支持。
  • 早期教学语境的遗留表述:在C的早期教学资料中,有时会为了区分「字符类型」和「整数类型」的语义差异,刻意弱化char的算术运算特性,但从C98开始,标准就明确了char的算术类型属性,C++11/14自然延续了这一规则。

内容的提问来源于stack exchange,提问作者fedya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:22:24