网站制作主题思路,公司网站的建设哪家好,推广公司有哪些公司,wordpress获取输入框的值比较本博客将讲述我学习过程中对临时变量的疑惑与理解
为什么写这篇文章#xff1f;
我在学习C过程中#xff0c;发现C在发生隐式转换时或者出现未命名的变量如字符串再或者在求值的时候#xff0c;会出现C临时变量#xff08;系统自动生成#xff09;#xff0c;而这个临时…本博客将讲述我学习过程中对临时变量的疑惑与理解
为什么写这篇文章
我在学习C过程中发现C在发生隐式转换时或者出现未命名的变量如字符串再或者在求值的时候会出现C临时变量系统自动生成而这个临时变量往往会那么C临时变量有什么特性呢下面我们探讨一下毕竟我也是初学者如果有错误请大家多多担待
注意我们在这里说的临时变量不是平常函数里我们自己建立的变量如swap函数里的temp。这里说的临时变量是指系统自己产生的临时储存的变量不可见。
一.什么情况下会产生临时变量
1.在使用运算符时
C编译器会自动为表达式的求值结果生成一个临时变量。
//定义两个变量
int a 3,b4;//求和时会生成一个临时变量作为中间变量
int c a b;
2.在使用拷贝构造函数时
C编译器会在创建对象的过程中生成临时变量
//定义了一个类
class A
{
public:
//定义了拷贝构造函数
A(const A a){}
};//生成临时变量
A a1;
A a2(a1);
3.当将一个非class类型的变量传递给函数时
C编译器会给该变量创建一个临时变量
//定义一个函数
void func (int a)
{coutaendl;
}//调用函数时会生成一个临时变量
func(10);
二.临时变量有什么特性
大家先看一段代码
void printstring str
{coutstrendl;
}
//这样调用是错误的
print(hello world);
系统提示 意思是临时变量无法为非 const 引用初始化。出错的原因是编译器根据字符串 “hello world” 构造一个 string 类型的临时对象这个临时变量具有 const 属性当这个临时变量传递给非 const 的 string 引用类型时无法隐式完成 const 到非 const 的类型转换便出现上面的编译错误。解决办法是将 print() 函数的参数改为常引用。
void print(const string str)
{coutstrendl;
}
// 编译通过
print(hello world);这样就能编译通过啦
以上可以总结为 1.函数以 引用 作为形参时不可以接受常量作为实参传递
2. 函数以常引用作为形参时: 可以接受常量或变量作为实参传递。
所以在用引用做参数时尽量用常引用。 首先临时变量不是常量但是临时变量不能传递给非const使用编译器的缘故在这个方面和常量一样所以说临时变量有常性其实只能说在这个方面有常性。
但是绝大多数资料上显示临时变量有const性所以我们认为临时变量都被const修饰 有些函数参数后加const 表示传递的参数是const。
void func( )const
{
......
}
//与下面一样
void func(const )
{
......
} 少年没有乌托邦心向远方自明朗
如果这个博客对你有帮助给博主一个免费的点赞就是最大的帮助❤ 欢迎各位点赞收藏和关注哦❤ 如果有疑问或有不同见解欢迎在评论区留言❤ 后续会继续更新大连理工大学相关课程和有关C的内容和代码点赞加关注学习不迷路好本次的学习就到这里啦
我们下次再见