首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么&运算符只适用于变量而不适用于内联语句

&运算符(取地址运算符)用于获取变量在内存中的地址。当我们需要操作变量的地址时,可以使用&运算符来获取该地址。

然而,&运算符只能用于变量,而不能用于内联语句。这是因为内联语句(或内联表达式)是一种编译器的优化技术,它将代码片段直接嵌入到调用点处,以减少函数调用的开销。内联语句在编译时展开,不会创建一个具体的变量,因此无法获取其地址。

另外,使用&运算符获取变量地址有时是有必要的,例如在传递指针参数、动态内存分配或某些底层操作时。但对于内联语句来说,它们通常是短小且不需要获取地址的,因此没有必要使用&运算符。

总结起来,&运算符只适用于变量,因为它用于获取变量在内存中的地址。而内联语句通常是短小且不需要获取地址的,所以不适用于&运算符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】Chapter 0:当你学习C++之前首先需要了解的

C 适用于底层开发,C++ 适用于大型软件工程。 如果是系统级、嵌入式开发,C 是更好的选择;如果是应用软件、游戏开发,C++ 更适合。...Java 适用于 企业应用、Web 开发、移动应用(Android)。 5....C++ 更快,更适用于底层开发和高性能应用,而 Java 适合企业应用和移动开发。 如果追求性能,选 C++;如果追求跨平台和开发效率,选 Java。...、动态分配等 使用引用的场景 需要给变量取别名(而不是指针) 需要函数参数的传递(避免了低效率的拷贝过程) 常量引用(不需要修改) 右值引用(用于移动语义) auto关键字 能根据右边的表达式自动推导左边变量的类型...✅ 受作用域影响 ❌ 无作用域 是否能使用 return ✅ 可以 ❌ 不能 5.2 不适合内联的情况 ❌ 递归函数: 内联展开会导致无限递归,编译失败。

7200

转-Go语言开发常见陷阱,你遇到过几个?

导入包未调用错误——导入包后,如果不进行调用,例如函数,接口,结构及变量等对象,那么会出现编译错误。这里建议使用空白表示符“_”来避免类似错误。 变量简写只适用于函数内部。...不可改变的字符串——如果想通过索引运算符来更新一个字符串变量中的独立字符是会出现错误的,由于字符串是只读的字节片。正确做法是使用一个单字节片进行操作而不是转成字符串类型进行操作。...字符串和索引运算符——字符串中的索引运算符返回的是字节值而不是字符。 字符串不总是UTF8文本——字符串没有被限定为UTF8文本。它们可以包含任何字节。只有当使用字符串常数时才是UTF8文本。...按位不是运算符:很多语言使用~来作为一元逻辑非运算符,而Go中则使用^。 运算符优先级差异。 导出结构域是没有编码。 程序结束时没有销毁Go线程。 当目标接收器就绪时就发送一个缓冲区通道返回。...有值接收器的方法不能用于改变原始值。 中级开发者应该注意的地方: 关闭HTTP响应。 关闭HTTP连接。 结构,数组,切片和图的比较。 可以使用==运算符来比较不同的结构变量。 从异常中恢复。

1.3K101
  • C++小白成长记:从基础到实战的详细入门教程

    >> 是流提取运算符,将从输入流中提取的数据赋值给变量。 流提取运算符会自动处理空格和换行符,字符串输入时只读取第一个单词(遇到空格、换行停止)。 4....与普通函数不同,内联函数在编译时将函数体嵌入到每个调用点,而不是通过常规的函数调用机制跳转到函数地址。这种机制主要用于短小、频繁调用的函数。...7.3 内联函数的使用场景 内联函数适用于短小的、频繁调用的函数,特别是那些函数体代码量较少且执行简单的函数,如getter、setter等。...7.5 不适合作为内联函数的场景 递归函数:递归函数不适合内联化,因为内联函数要求在编译时展开,而递归会导致无限的展开。...总结: 内联函数是一种优化工具,用于减少函数调用的开销,同时保持了函数的类型检查和调试功能。它比宏函数更安全、可靠,适用于简单、短小的函数。

    11110

    C++:21---仿函数

    什么是仿函数 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。   ...因此,这里需要明确两点:   1 仿函数不是函数,它是个类;   2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。...2、函数的参数;   这种方法我们已经讨论过了,多个参数不适用于count_if函数。...你也可以自己加一些输出语句看一看。 为什么使用仿函数(functor) 迭代和计算逻辑分离 使用仿函数可以使迭代和计算分离开来。...这意味着它可以内联这个函数调用。而如果使用函数指针,编译器不能直接确定指针指向的函数,而这必须在程序运行时才能得到并调用。

    51830

    shell 基本语法

    逻辑运算符 && || 逻辑的 AND 和逻辑的 OR if [[ 1 == 1 && 1 > 2 ]]; then echo true; else echo false; fi # false 这种运算符只能适用于...true; else echo false; fi # false,因为长度不为0 if [ $a ]; then echo true; else echo false; fi # true 这种运算符适用于...[] 和 [[]] 这两种,不适用于 (()) 文件测试运算符 -d -r -w -x -s -e -f 检测文件是否是普通文件(既不是目录,也不是设备文件) -r 检测文件是否可读 -w 检测文件是否可写...fi # 检测 test.sh 文件是否存在 if [ -d $a ]; then echo true; else echo false; fi # 检测 test.sh 是否存在且是否是目录 这类运算符适用于...[] 和 [[]] 这两种,不适用于 (()) 涉及计算的判断条件 大部分场景下,if 的条件判断,使用上述的运算符结合 [[]] 使用就可以了,但有某些场景,比如先进行算术运算之后,再判断结果: if

    1.3K30

    C++:从C语言过渡到C++

    cout、cin、endl都属于C++标准库(std) cout:用于屏幕输出 cin:用于键盘输入 endl:输出时,增加换行符('\n') 运算符,>>是流提取运算符。...(在C语言是左移/右移运算符)。 cout和cin的输出输入通过函数重载实现自动识别变量类型,无须像C语言那样指定格式。...),但是要开空间 2.引用的指向不能改变,而指针可以随意更改。...//正确的宏实现 #define ADD(x, y) ((x) + (y)) // 为什么不能加分号? // 为什么要加外面的括号? // 为什么要加里面的括号?...|y) //+的优先级比& | 高,所以里面也要加括号 return 0; } 需要注意的点: 1.inline对于编译器只是建议,并不是说加了一定会在调用的地方被展开,一般来说,inline适用于简短而又被频繁调用的函数

    6200

    两万字总结《C++ Primer》要点

    {} 5.2 语句作用域 定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量就超出其作用范围。...::: (2)内联函数 使用关键词inline来声明内联函数。 内联用于优化规模较小,流程直接,频繁调用的函数。 (3)constexpr函数 constexpr函数是指能用于常量表达式的函数。...) c.max_size() c中可保存的最大元素数目 c.empty() 若c中存储了元素,返回false,否则返回true 添加/删除元素(不适用于array) c.insert(args) 将...只适用于queue q.top() 返回最高优先级元素,但不删除该元素。...,指向第一个关键字大于k的元素;不适用于无序容器 c.equal_bound(k) // 返回一个迭代器pair,表示关键字等于k的元素的范围。

    1.8K20

    两万字总结《C++ Primer》要点

    {} 5.2 语句作用域 定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量就超出其作用范围。...::: (2)内联函数 使用关键词inline来声明内联函数。 内联用于优化规模较小,流程直接,频繁调用的函数。 (3)constexpr函数 constexpr函数是指能用于常量表达式的函数。...) c.max_size() c中可保存的最大元素数目 c.empty() 若c中存储了元素,返回false,否则返回true 添加/删除元素(不适用于array) c.insert(args) 将...只适用于queue q.top() 返回最高优先级元素,但不删除该元素。...,指向第一个关键字大于k的元素;不适用于无序容器 c.equal_bound(k) // 返回一个迭代器pair,表示关键字等于k的元素的范围。

    2.1K30

    C++学习知识点

    内联函数 答:作用:提高程序运行时调用函数的效率。 用法:用关键字inline修饰,而内联函数在调用时,是将调用表达式用内联函数体来替换,类似于宏定义。...为什么函数形参多是const修饰的引用 使用引用是防止值传递,值传递之前会将实参在堆栈产生一份拷贝,而引用则不会,因此引用传递会改变实参的值。...使用const修饰的引用表示常引用,即引用的变量是常变量,这样一来,是防止在函数中对常引用的修改,多用于修饰类的常对象。如果将值调用的形参声明为常量,则没有多大的使用价值。...而不将析构函数定义为虚函数时,只调用基类的析构函数。析构子类对象时候,基类部分也会被析构! 8. 多态的理解 多态(Polymorphism)按字面的意思就是“多种状态”。...对于类定义对象什么时候用new,什么时候不用new的认识 (1) 构造函数只适用于类成员的初始化,与分配类对象的空间无关; (2) 隐式执行默认构造函数,初始化申明在栈上的类对象,直接申明,不要使用

    1.7K20

    CTF实战8 SQL注入漏洞

    是我们的第二个实战课程 我们还是那句话先 重要声明 该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关 SQL注入漏洞产生的原因 SQL...id=100 and 1=2 返回失败 为什么第一个会返回成功,而第二个是返回失败呢?...这个SQL已经闭合了 还是一样的,这里and的左边是一定成立的,而and右边也是一样的成立,所以and逻辑之后,整个语句返回成功 同理可知如果后面是1'='2就会返回失败,当然,这里不一定非要是1或者2...那么这个语句肯定就会返回失败了,就是这个原理 内联式SQL注入 内联注入是指查询注入SQL代码后,原来的查询仍然全部执行 假设我们的网站SQL查询语句是这样的 SELECT * FROM admin...Union不适用的地方 注入语句无法截断,且不清楚完整的SQL查询语句 Web页面中有两个SQL查询语句,查询语句的列数不同 枚举数据库 最后我们来讲一下枚举数据库 SQL Server 获取当前用户名

    1.7K30

    const、sizeof与内联函数相关面试题

    const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符匹配,没有类型安全检查,并且在字符替换中可能会产生意想不到的错误(边际效应)。...在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。 在C++程序中,类里面的数据成员加上mutable后,修饰为const的成员变量,就可以修改它了。...数组作为参数传给函数时传递的是指针而不是数组,传递的是数组的首地址。 sizeof操作符不能用于函数类型,不完全类型或位字段。...4.内联函数和宏函数的区别是什么? 内联函数和普通函数相比可以加快程序运行的速度,因此不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。...inline一般只用于以下情况: 一个函数不断被重复调用 函数只有简单的几行,且函数不包括for、while、switch语句。

    47340

    【C++】从入门到精通第一弹——基础知识

    例如,一个递归函数不能在调用于,一个100行代码的函数也不可能在调用时展开,内联函数只能在优化程序时使用。 在抽计中,它对支持信息隐藏起主要作用。...auto变量的作用域仅仅限于定义在该变量的个体内。在函数定义的auto变量只在该函数中有效,在复合语句中定义的auto变量只在该复合语句中有效。...注意,此设置不是一直有效,而只是对下一个输出数据有效。...C++语言中,运算符十分丰富,共有30多个,如算术、关系、逻辑、位、赋值、指针、条件、逗号、下标、类型转换等。 C++语言的控制语句形式多样,使用方便。...C++语句具有很强的可移植性,用C++语言编写的程序基本不用修改太多就可以用于不同型号的计算机上,C++标准可在多种操作系统下使用。

    22150

    内联函数 c-浅谈内联函数与宏定义的区别详解

    用内联取代宏:   1.内联函数在运行时可调试,而宏定义不可以;   2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;   3.内联函数可以访问类的成员变量,...(i) : (j) + 2 ;   由于运算符‘+'比运算符‘:'的优先级高,所以上述语句并不等价于期望的   result = ( (i) > (j) ?...所以在C++ 程序中,应该用内联函数取代所有宏代码,“断言assert”恐怕是唯一的例外。assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况。...  {   …   }   所以说,inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。...  内联能提高函数的执行效率,为什么不把所有的函数都定义成内联函数?

    71440

    EasyC++50,存储方案和动态分配

    存储方案和动态分配 在之前的文章当中,我们讨论了C++用来为变量分配内存的5种方案,但是这些方案并不适用于使用new运算符分配的内存,这种内存被称为动态内存。...我们在之前的文章当中也曾介绍过,动态内存由new和delete控制,而不是由作用域和链接性规则控制。所以我们可以在一个函数当中分配动态内存,在另外一个函数中释放。...通常C++编译器当中有三块独立的内存,一块用于静态变量,一块用于自动变量,还有一块用于动态存储。 虽然存储方案的概念不适用于动态内存,但是适用于动态内存的自动和静态指针。...C++ Primer当中有这么一个例子,我们在一个函数当中有如下语句: float * p_fees = new float[20]; 很明显,我们通过new创建了一个长度为20的float数组,这块数组的内存将会一直停留在内存当中...,直到使用delete语句释放。

    35620

    栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类

    C++ 动态内存 栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。...虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。...Box operator+(const Box&); 声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。...##运算符可以用于宏函数的替换部分。这个运算符把两个语言符号组合成单个语言符号。...1.在内联函数内不允许使用循环语句和开关语句;2.内联函数的定义必须出现在内联函数第一次调用之前;3.类结构中所在的类说明内部定义的函数是内联函数。

    5400

    【C++掌中宝】用最少的话让你全方位理解内联函数

    什么是内联函数 内联函数是使用inline关键字修饰的函数,目的是让编译器在函数调用时,将函数体直接展开到调用处,而不是通过常规的函数调用机制。...使用限制 函数体必须足够简单:内联函数适用于小型、频繁调用的函数,过于复杂的函数不适合内联,因为代码膨胀会带来内存开销问题。...递归函数不适合内联:内联函数不支持直接递归,即函数不能调用自身,因为这会导致无限展开,编译器将忽略内联请求。 不适用于带有复杂控制结构的函数:如while、switch等结构控制语句。 5....调试友好:内联函数的调试信息更丰富,调试器能够识别函数的调用和执行路径,而宏则不易调试。 作用范围:宏的文本替换可能会引发命名冲突和作用域污染,而内联函数则使用标准的函数调用机制。...内联的局限性:并非所有函数都适合内联,编译器也可能选择不进行内联。 7. 何时使用内联函数 内联函数适用于小型、频繁调用且不涉及复杂逻辑的函数。

    19710

    C++ 初探:不要‘下次一定’,立即开始你的C++之旅

    namespace,命名空间 在C/C++中,变量、函数、类大量存在,由于它们的大量存在而可能导致名称使用上的冲突。namespace关键字,是针对名称冲突而出现的。...使用流提取运算符(>>), cin >> 变量名 << endl, std::cout,是ostream类的对象,主要面向窄字符的标准输出流,不需要使用占位符,%d、%s、%c这些东西,可以自动识别任意类型的变量...内联函数一般用于代码短小,频繁带哦用的函数。 内联函数易错点,含有循环语句、含有递归语句、含代码量大,满足这三点其一,都不能称之为内联函数,加上inline后会被编译器忽略。...例如if语句调用加分号的ADD函数 // 为什么要加外⾯的括号,为什么要加⾥⾯的括号? C语言debug版本默认不展开inline。debug版本想要展开需要设置这两点。...找到C/C++选项里的常规,将调试信息格式,设置为 程序数据库(/Zi) 找到C/C++选项里的优化,将内联函数拓展设置为 只适用 _inline(/Ob1) nullptr NULL是一个宏,在C

    5610
    领券