C++(表达式必须是可修改的左值)

typedef struct bf {
    char h[70];
}BF;
int main()
{
    string b = "BACK",v="VISIT",f="FORWARD",q="QUIT";
    BF*h= (BF*)malloc(sizeof(BF));
    char a[70]= "http://www.acm.org/";
    h->h=a;
}

在本次示例中,h->h=a会显示表达式左值必须可修改。

原因:数组和数组之间不能直接赋值,需要使用头文件#include<cstring>,使用strcpy函数进行赋值。

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 中,表达式必须是可修改左值是一种限制,是为了确保程序的正确性和安全性。如果表达式不是可修改左值,将会导致编译错误。 如果需要修改一个非可修改左值,可以考虑使用指针或引用的方式来间接修改。指针和引用都是 C++ 中常用的解决方案,可以有效地解决表达式必须是可修改左值的限制。 下面是一个使用指针修改非可修改左值的示例: ```c++ #include <iostream> int main() { const int a = 1; int* ptr = const_cast<int*>(&a); //使用 const_cast 将 const int* 转换为 int* *ptr = 2; //修改指针指向的值 std::cout << a << std::endl; //输出 1,a 的值没有被修改 std::cout << *ptr << std::endl; //输出 2,指针指向的值被修改了 return 0; } ``` 这里使用 const_cast 将 const int* 类型的指针转换为 int* 类型的指针,然后通过指针修改原本不可修改左值。需要注意的是,这种方式只适用于非常量类型的左值,对于常量类型的左值修改是不被允许的。 除了使用指针,还可以使用引用的方式来修改非可修改左值,例如: ```c++ #include <iostream> int main() { const int a = 1; const int& ref = a; //使用 const 引用 int& ref2 = const_cast<int&>(ref); //使用 const_cast 将 const 引用转换为非 const 引用 ref2 = 2; //修改引用指向的值 std::cout << a << std::endl; //输出 1,a 的值没有被修改 std::cout << ref << std::endl; //输出 2,引用指向的值被修改了 return 0; } ``` 这里使用 const 引用来引用 a,然后使用 const_cast 将 const 引用转换为非 const 引用,最后通过引用修改原本不可修改左值。需要注意的是,这种方式也只适用于非常量类型的左值,对于常量类型的左值修改是不被允许的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值