warning C4552: '>>' : operator has no effect; expected operator with side-effect

本文通过一个具体的C++示例解释了为什么直接使用位移操作符可能导致编译器发出警告,并展示了如何正确地实现整数的位右移操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1》编写一个自定义的函数shift_right:利用引用形参实现对一个int型的数据右移n位。

代码如下:

#include<iostream>
using namespace std;
void shift_right(int &num,int n);
int main(){


	int num=8;
	cout<<"before shift ,num:"<<num<<endl;
	shift_right(num,2);
	cout<<"after shift ,num:"<<num<<endl;


	return 0;
}

void shift_right(int &num,int n){

	num>>n;
}

运行结果如下:

为什么 没有实现右移的功能呢?

看编译的提示:warning C4552: '>>' : operator has no effect; expected operator with side-effect

大致意思是:操作符“>>”未产生任何影响;期望使用能产生side-effect的操作符。

2》将上述shift_right函数做如下更改:

void shift_right(int &num,int n){

	num>>=n;
}

即将“>>”更改为“>>=”.

再次运行该程序,结果如下:

可以发现,结果正常了,warning也没有了。

ps:warning有时候也是不可忽视的。




改正代码中的错误 这是代码:#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_TRAINS 10 #define MAX_NAME 20 // 列车信息结构体 typedef struct { char number[MAX_NAME]; // 车次 char start[MAX_NAME]; // 始发站 char end[MAX_NAME]; // 终点站 char depart[6]; // 发车时间(HH:MM) int seats; // 座位数 } Train; Train trains[MAX_TRAINS]; // 列车数据存储 int trainCount = 0; // 当前列车数量 // 主菜单显示函数 void displayMainMenu() { printf("\n===== 铁路运输管理系统 =====\n"); printf("1. 添加列车信息\n"); printf("2. 显示所有列车\n"); printf("3. 查询列车信息\n"); printf("4. 修改列车信息\n"); printf("5. 删除列车信息\n"); printf("6. 列车时刻表查询\n"); printf("7. 余票信息查询\n"); printf("8. 退出系统\n"); printf("============================\n"); printf("请输入您的选择 (1-8): "); } // 添加列车信息 void addTrain() { if (trainCount >= MAX_TRAINS) { printf("列车信息已满,无法添加!\n"); return; } printf("请输入车次: "); scanf("%s", trains[trainCount].number); printf("请输入始发站: "); scanf("%s", trains[trainCount].start); printf("请输入终点站: "); scanf("%s", trains[trainCount].end); printf("请输入发车时间(HH:MM): "); scanf("%s", trains[trainCount].depart); printf("请输入座位数: "); scanf("%d", &trains[trainCount].seats); trainCount++; printf("列车信息添加成功!\n"); } // 显示所有列车 void displayAllTrains() { if (trainCount == 0) { printf("没有列车信息!\n"); return; } printf("\n===== 所有列车信息 =====\n"); for (int i = 0; i < trainCount; i++) { printf("车次: %s\n", trains[i].number); printf("路线: %s -> %s\n", trains[i].start, trains[i].end); printf("发车: %s 座位: %d\n\n", trains[i].depart, trains[i].seats); } } // 查询列车信息 void searchTrain() { char number[MAX_NAME]; printf("请输入要查询的车次: "); scanf("%s", number); for (int i = 0; i < trainCount; i++) { if (strcmp(trains[i].number, number) == 0) { printf("\n===== 查询结果 =====\n"); printf("车次: %s\n", trains[i].number); printf("路线: %s -> %s\n", trains[i].start, trains[i].end); printf("发车: %s 座位: %d\n", trains[i].depart, trains[i].seats); return; } } printf("未找到该车次信息!\n"); } int main() { int choice; do { displayMainMenu(); scanf("%d", &choice); switch(choice) { case 1: addTrain(); break; case 2: displayAllTrains(); break; case 3: searchTrain(); break; case 4: printf("修改功能将在第三阶段实现\n"); break; case 5: printf("删除功能将在第三阶段实现\n"); break; case 6: printf("时刻表功能将在第三阶段实现\n"); break; case 7: printf("余票查询功能将在第三阶段实现\n"); break; case 8: printf("感谢使用,系统退出!\n"); break; default: printf("无效输入,请重新输入1-8之间的数字!\n"); } } while(choice != 8); return 0; } 这是报错提示 :任务二.c C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2143: syntax error : missing ';' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2143: syntax error : missing ';' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2143: syntax error : missing ')' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2143: syntax error : missing ';' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2065: 'i' : undeclared identifier C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : warning C4552: '<' : operator has no effect; expected operator with side-effect C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2059: syntax error : ')' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(65) : error C2143: syntax error : missing ';' before '{' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : error C2143: syntax error : missing ';' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : error C2143: syntax error : missing ';' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : error C2143: syntax error : missing ')' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : error C2143: syntax error : missing ';' before 'type' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : warning C4552: '<' : operator has no effect; expected operator with side-effect C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : error C2059: syntax error : ')' C:\Users\wpp\Desktop\文档合集\作业\数据结构\新建文件夹\任务二.c(78) : error C2143: syntax error : missing ';' before '{' 执行 cl.exe 时出错.
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值