openoffice跨平台编程中的代码统一问题(临时变量赋值给引用问题)

本文探讨了一个关于在不同操作系统上编译同一段C++代码时出现的问题,特别是在Windows与Linux平台之间的差异。代码中尝试传递一个临时对象作为引用类型参数,这种做法在Linux下会导致编译错误,而在Windows下则会产生非标准扩展警告。

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

代码如下:

class A{
   public:
A(int a){}

};
void fun1 (A & a )
{
   return;
}
int fun2()
{
   fun1(A(1));
   return 0;
}


保存为test.cpp

在windows下编译会编译通过,在linux下不会编译通过

linux下会出现以下错误
$ g++ test.cpp
test.cpp: In function `int fun2()':
test.cpp:12: error: invalid initialization of non-const reference of type 'A&' from a temporary of type 'A'
test.cpp:7: error: in passing argument 1 of `void fun1(A&)'

说明不能从一个临时对象转换到一个非const的引用。

在windows下会出现一个警告。

m:/test.cpp(12) : warning C4239: 使用了非标准扩展 : “参数”: 从“A”转
换到“A &”
        非常量引用只能绑定到左值
       
如果要统一到一致的情况,需要在windows编译时添加参数 -we4239,意思是将4239这个警告视为一个错误,强制开发人员修改代码。

openoffice代码在solenv/inc/wntmsci11.mk  194行添加CFLAGSWARNCXX += -we4239

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值