C/C++中的“L_value”

今天师弟问到我关于“L_value”的概念这个概念如果分的话可以为左值、左值表达式。可以用一句话来表述,“可以放在赋值运算符左边的量或者表达式”。

这个理解起来有些困难,看到网上有个帖子写的还不错,转述如下:

左值通常不会是常量,字面量,一些临时变量(只存在一瞬间的变量).
比如:
const int A = 10;
A = 20; //错,不能是常量
10 = 20; //错,更不能是字面量
int a=1,b=2;
a+b=5; //错,也不能是只存在一瞬间的临时变量(a+b的和)

 

经过了这些规定,似乎左值就只能是普通变量了.其实不然,也是有左值表达式的(能在赋值号左边的表达式就称为左值表达式).

C语言中,最常见的左值表达式有,左自增,左自减,指针取内容.
例如:
++i=5;
--i=5;
int a,*p=&a;
*p=5; //*p其实也是表达式,因为它是由操作符(*),和操作数(p)组成.
以上的操作都是合法的;

 

而在C++中,左值表达式就不仅仅是上面这些,由于引用的存在,所以左值表达式可以是函数.
int& add10(int& a){
a+=10;
return a;
}

int main(){
int n = 1;
add10(n)=20; //完全可以.
return 0;
}

以上操作也是合法的。

 

看到这里大家应该对“L_value”有一定的认识,但是我们不可能列出所有左值或者左值表达式,我认为比较好的办法是,写一个判断程序,把一个变量或者表达式放在赋值符号的左边如果不出错,那就是“L_value”了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake Warning: Ignoring extra path from command line: "../openMVS" -- Detected version of GNU GCC: 94 (904) Compiling with C++17 CMake Error at /home/xujx/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.26/Modules/CMakeDetermineCompilerId.cmake:751 (message): Compiling the CUDA compiler identification source file "CMakeCUDACompilerId.cu" failed. Compiler: /usr/bin/nvcc Build flags: Id flags: --keep;--keep-dir;tmp -v The output was: 255 #$ _SPACE_= #$ _CUDART_=cudart #$ _HERE_=/usr/lib/nvidia-cuda-toolkit/bin #$ _THERE_=/usr/lib/nvidia-cuda-toolkit/bin #$ _TARGET_SIZE_= #$ _TARGET_DIR_= #$ _TARGET_SIZE_=64 #$ NVVMIR_LIBRARY_DIR=/usr/lib/nvidia-cuda-toolkit/libdevice #$ PATH=/usr/lib/nvidia-cuda-toolkit/bin:/usr/local/cuda-11.8/bin:/home/xujx/anaconda3/bin:/home/xujx/anaconda3/condabin:/home/xujx/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin #$ LIBRARIES= -L/usr/lib/x86_64-linux-gnu/stubs -L/usr/lib/x86_64-linux-gnu #$ rm tmp/a_dlink.reg.c #$ gcc -D__CUDA_ARCH__=300 -E -x c++ -DCUDA_DOUBLE_MATH_FUNCTIONS -D__CUDACC__ -D__NVCC__ -D__CUDACC_VER_MAJOR__=10 -D__CUDACC_VER_MINOR__=1 -D__CUDACC_VER_BUILD__=243 -include "cuda_runtime.h" -m64 "CMakeCUDACompilerId.cu" > "tmp/CMakeCUDACompilerId.cpp1.ii" #$ cicc --c++14 --gnu_version=90400 --allow_managed -arch compute_30 -m64 -ftz=0 -prec_div=1 -prec_sqrt=1 -fmad=1 --include_file_name "CMakeCUDACompilerId.fatbin.c" -tused -nvvmir-library "/usr/lib/nvidia-cuda-toolkit/libdevice/libdevice.10.bc" --gen_module_id_file --module_id_file_name "tmp/CMakeCUDACompilerId.module_id" --orig_src_file_name "CMakeCUDACompilerId.cu" --gen_c_file_name "tmp/CMakeCUDACompilerId.cudafe1.c" --stub_file_name "tmp/CMakeCUDACompilerId.cudafe1.stub.c" --gen_device_file_name "tmp/CMakeCUDACompilerId.cudafe1.gpu" "tmp/CMakeCUDACompilerId.cpp1.ii" -o "tmp/CMakeCUDACompilerId.ptx" #$ ptxas -arch=sm_30 -m64 "tmp/CMakeCUDACompilerId.ptx" -o "tmp/CMakeCUDACompilerId.sm_30.cubin" ptxas fatal : Value 'sm_30' is not defined for option 'gpu-name' # --error 0xff -- Call Stack (most recent call first): /home/xujx/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.26/Modules/CMakeDetermineCompilerId.cmake:8 (CMAKE_DETERMINE_COMPILER_ID_BUILD) /home/xujx/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.26/Modules/CMakeDetermineCompilerId.cmake:53 (__determine_compiler_id_test) /home/xujx/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.26/Modules/CMakeDetermineCUDACompiler.cmake:307 (CMAKE_DETERMINE_COMPILER_ID) CMakeLists.txt:109 (ENABLE_LANGUAGE)是什么问题
07-08

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值