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

当我在第一个循环中使用'auto‘时,它工作得很好,但是使用'int’时,它给出了一个错误,为什么?

当在第一个循环中使用'auto'时,编译器会根据初始化表达式的类型推断变量的数据类型。这意味着变量将根据初始化值来确定为何种类型,因此代码可以正常运行。

然而,当在第一个循环中使用'int'时,变量被明确声明为整数类型。如果初始化表达式的结果不是整数类型,编译器将无法将其转换为'int'类型,从而导致错误。

例如,假设初始化表达式返回一个浮点数,使用'int'声明变量时将会导致编译错误,因为浮点数无法直接赋值给整数类型。

解决此问题的方法是,确保初始化表达式的结果与所声明的变量类型相匹配,或者将变量声明为与初始化表达式结果相适应的类型,例如使用'float'类型。

腾讯云相关产品:无

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

相关·内容

【C++】基础知识讲解(引用、内联、auto,基于范围for循环)

引用 概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。 比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。...作返回值 上图中,func返回a的值,但是在函数调用结束时,栈帧就销毁了,这时a返回的就是随机值。但是在VS中,它会先把a拷贝给一个临时变量,然后再把值返回。...后面两个引用返回都是错误的例子。(局部变量)返回变量出了函数作用域,(即生命周期到了)就要销毁,不能用引用返回。全局变量、静态变量、堆上变量等可以用引用返回。 在CPP中,结构体内可以定义函数。...当我们声明和定义没有分离时,会发生重定义的错误,这是因为add的定义会在stack.cpp展开。 解决方案:声明和定义分离。...注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环 指针空值nullptr(C++11) 由于CPP的重载,我们可以判断出第一个打印int,第二个打印int

23610

C++入门

的编译错误的提示 而这里我们的C++就给出了很好的解决办法:命名空间!...,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...来结束本次循环,也可以用break来跳出整个循环 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end

10410
  • 【C→C++】打开C++世界的大门

    8.2 auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可以思考下为什么?...8.3 auto的使用细则 auto与指针和引用结合起来使用 用auto声明指针类型时,用auto和auto*都可以,但用auto声明引用类型时则必须加& int main() { int...9.2 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围...指针空值nullptr(C++11) 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。...欸,NULL不是指针嘛,为什么f(NULL);调用的也是第一个函数呢? 原因在于NULL在C++ 中的定义发生了一些改变。

    18910

    【C++】内联函数&auto&范围for循环&nullptr

    没有任何区别,但用auto声明引用类型时则必须加**&** 在同一行定义多个变量 当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量...2.范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围...---- 指针空值nullptr(C++11) 1.C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。...int*)"<<endl; } int main() { f(0); f(NULL); f((int*)NULL); return 0; } 这里前面两个居然都打印出了第一个...在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。

    70330

    开启C++之旅(下):引用、内联函数及现代特性(auto和范围for循环)

    这也是为什么对a进行类型转换后赋值,但是a不发生变化 1.4引用使用场景 1.4.1做参数 在函数中使用引用作为参数,可以让你直接操作传递给函数的变量,而不是对其进行复制。...概念 C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得 int main...,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量 3.3auto不能使用的场景 auto不能作为函数的参数 auto不能直接用来声明数组 为了避免与C++98中的auto发生混淆...{ cout << e << " "; } } 4.2范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin...不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦* 所以我们使用nullptr来对指针进行初始化,来替代NULL,以免NULL定义为0时出现错误 注意: 在使用nullptr表示指针空值时

    25010

    STL容器的线程安全性了解多少?

    2 * 3,在插入和删除时,它们负责任何需要得内存管理 * 4,报告了容纳了多少对象和最多可能容纳得数量 size和max_size * 5, 容器自己被销毁时会自动销毁容纳得每个对象 * * 但是真的不用清楚工作了吗...//看似合理,但结果却是错的:因为在排序过程中widgets中的一个或多个auto_ptr可能已经被设为NULL //为什么会这样?...remove_if得成员函数,所有必须自己写一个循环来迭代c中得元素 //很快,你写出了如下代码 std::setint> caaaa = {2,3,4,1,2,6,7,8,4,3,7,5,6};...list 使用 list::remove_if * 2.3 如果容器是标准关联容器 使用 remove_copy_if 和 swap 或写一个循环来遍历容器得元素,当你把迭代器传给erase时记得后置递增它...将不会释放互斥量 * * 1,基于Lock得方法可以保证在异常情况下依然是稳健得,C++保证如果抛出了异常,局部对象就会被销毁 * ,所有即使当我们正在使用 Lock对象时有异常抛出,Lock也将释放它得互斥量

    1.5K10

    【C++修炼之路】1. 初窥门径

    然而,d在赋值给int类型的a时,在底层会发生强转,即double类型强转成int类型,这就涉及到一个新的知识,在强转赋值的时候,并不是直接把d取整赋值给a,而是会产生一个临时的变量来储存d强转后的结果并且赋值给...但当我们继续输出时,下面的第一个cout(函数)会创建栈帧,也就是有新的客人来,这样你的东西就有可能不复存在,因此第二次输出的ret变成了随机值。...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...8.2 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围...指针空值nullptr(C++11) 9.1 C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。

    1.1K00

    C++ 入门基础

    32个关键字在 C++ 中均可以使用,当然 C++ 在此基础上新增了31个关键字,使得 C++ 中的关键字数达到了63,当然这么多关键字现在没必要全部看懂,在学习后面知识时会用到 ️C++第一个程序...在使用 C语言 时,我们自己定义的名字可能和库函数起冲突,或者在同一个项目组中,多人定义的名字起冲突 此时我们只有改名字这一条路可选,显然祖师爷本贾尼对于这种方法很不满, 于是他想出来这种解决方法 通过不同的命名空间将...,当我们使用普通指针或引用指向常量数据时,会引发错误 int main() { const int a = 10; //此时a为常变量,具有常量属性 const int* pa = &a;...指定 pa 为 int& 在后期学习中,某个变量类型可能非常长,此时可以利用 auto 自动识别类型 auto 支持一行声明多个变量,当然类型得统一 auto a = 1, b = 2, c = 3;...endl; return 0; } 范围 for 配上 auto 自动识别类型,写出来的循环很简单,在加上引用,使得我们可以轻而易举的给数组赋值 #include using

    19610

    【C++修行之道】引用、内联函数、auto关键字、for循环(C++)、nullptr(C++11)

    3.2 auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,大家可思考下为什么?...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...4.2 范围for的使用条件 1. for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供 begin和end的方法,begin和end就是...(关于迭代器这个问题,以后会讲,现在提一下,没办法 讲清楚,现在大家了解一下就可以了) 五、指针空值nullptr(C++11) 5.1 C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值...在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器 默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)

    6000

    【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

    3.2 -> auto简介 在早期C/C++中auto的含义为:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,为什么呢?...C++11中,标准委员会赋予了auto全新的含义,即auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...4.2 -> 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中的第一个元素和最后一个元素的范围; 对于类而言,应该提供begin和end方法,begin和end就是for...迭代的对象要实现++和==的操作 5 -> 指针空值nullptr(C++11) 5.1 -> C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误...在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下,将其看成一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void*)0。

    15310

    C++入门(2)

    8.2 auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,大家可思考下为什么?...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...9.2 范围for的使用条件 1. for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供 begin和end的方法,begin和end就是for...指针空值nullptr(C++11) 10.1 C++98中的指针空值  在良好的 C/C++ 编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针...在 C++98 中,字面常量 0 既可以是一个整形数字,也可以是无类型的指针 (void*) 常量,但是编译器 默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转 (

    10910

    一文掌握C++基本语法

    引用 6.1 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...在下面将double赋给int别名的过程中,编译器会产生“临时变量”,将double d中整数部分赋给临时变量, 这个临时变量再将这个整数赋给另一个int类型的临时变量,最后int把临时变量赋给rd,也就是说...:使用auto修饰的变量,是具有自动存储器的局部变量 C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得...为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法 4. auto在实际中最常见的优势用法就是C++11提供的新式for循环,还有lambda表达式等进行配合使用。...9.2 范围for的使用条件 1. for循环迭代的范围必须是确定的对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围

    1.8K10

    【C++初阶】--- C++入门(下)

    2.1 auto简介 在早期C/C++中auto的含义是:使用 auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...3.2 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin()和end()的方法,begin()和end()...(此处++, ==是在迭代器的类域中重载后的操作符,关于迭代器这个问题,后面会讲) 四、 指针空值nullptr(C++11) 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,...在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。

    10710

    C++入门必备知识(你真的入门C++了吗?)

    无法解析的外部符号_Add,该符号在函数. main 中被引用 引用 1、引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间...auto关键字(C++11) 1、auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?...C++11中,标准委员会赋予了auto全新的含义即: auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...<< e << " "; } 2、范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin...(关于迭代器这个问题,以后会讲,现在大家了解一下就可以了) C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量-个合适的初始值,否则可能会出现不可预料的错误,比如末初始化的指针

    49820

    解析C++内联函数与auto关键字

    return 0; } 使用typedef给类型取别名确实可以简化代码,但是如果复杂的类型特别多,一个个写typedef也有点麻烦了。..."得声明,而是一个类型声明时得"占位符",编译器在编译时,会将auto替换位变量实际的类型。...2.3 auto的使用规则 auto与指针和引用结合起来使用 用auto声明指针类型时,用auto和auto*没有任何区别,但是auto声明引用类型时必须加&。...3.2 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的用法,begin和end就是范围for循环迭代的范围...指针空值nullptr 4.1 C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。

    8410

    C++:C++入门基础

    11.2 auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,因为所谓自动存储就是函数结束(出了作用域),这个变量自动销毁...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 ​...11.4 auto的使用场景 1、简化代码,类型很长时,可以考虑自动推导 2、auto在实际中最常见的优势用法就是C++11提供的新式for循环,还有lambda表达式等进行配合使用。...12.2 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围...<endl; } 十三、指针空值nullptr 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。

    36310

    c++基础

    在输出型的参数时,形参修改了,实参也修改了。 ②做返回值: 这里再补充两个点:第一个点就是,函数在返回值时,函数栈帧销毁后,会创建一个临时变量,用来接收这个返回值,然后再传给调用函数的那个变量。...8.2 auto简介 ++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得 int...9.2 范围for的使用条件 1. for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for...迭代的对象要实现++和==的操作 以后会提到这点 10.指针空值--nullptr 10.1 C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误...可以看到下面的结果,f(NULL)调用了第一个函数 在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器 默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用

    64530

    VS调试技巧

    Debug 称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序; Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户更好的使用。...当我们继续按F10给 arr[12] 赋0值后,i 的值也跟着变为0。如此循环下去,程序就陷入了死循环。...至于为什么 arr 数组和变量 i 之间恰好是2个 int 型的空间,这纯属是巧合,在不同的编译器中两者之间空出来的大小是不一样的。...注意:栈区的默认使用习惯是先使用高地址再使用低地址,但是这个具体还要看编译器的实现,比如:在VS上切换x64,这个使用的顺序就是相反的,在 Release 版本中,这个使用顺序也是相反的。...(如果你已经看出了问题所在,还请不要声张),但是运行起来才发现有问题,程序陷入了死循环。

    10510

    如何处理前任程序员留下的代码

    虽然这里列出的 5 个方法并不全面,但是使用下面的技术将确保在结束改动其他开发人员编写的代码时,我们有信心保持现有功能的工作状态,同时确保我们的新功能与现有的代码库协调一致。 ? 1....通过的原因不是因为它正好是阈值,而是因为它超出了阈值。如果此测试组件包含这样一个测试用例:当薪水低于阈值 1 美元时,过滤器就返回 false,这样第二个测试将会失败,表明阈值是错误的。...即使我们在创建新代码时进行沟通,但是当我们接触现有的代码时,风险会增加。因为此时我们对现有的代码并不太了解,因此我们所了解的内容可能是被误导的,或只代表了其中的一小部分。...一个简单方法是删除来自我们正在使用的整个包或模块中的所有警告。至于未使用或添加注释的代码,删除它。如果我们稍后需要这部分代码,那么在存储库中,我们总是可以从先前的提交中检索它。...这个定义的关键在于它涉及的更改不会改变系统可观察的行为。这意味着当我们重构代码时,我们必须要有方法来确保代码的外部可见行为不会改变。在我们的例子中,这意味着是在我们继承或自己开发的测试套件中。

    40020

    【C++】智能指针

    auto_ptr 的实现原理:在拷贝时使用管理权转移的思想,下面简化模拟实现了一份 auto_ptr 来了解它的原理: template class auto_ptr...在以下场景中,shared_ptr 会存在循环引用的问题,那么什么是循环引用呢?...但是如果我们加上 n2->prev = n1; 这句代码,图就变成如下所示: 根据上图,我们分析一下,当 n1 出了作用域,它的 _pcount 减一,变为 1;当 n2 出了作用域,它的 _pcount... _del; 这样如果使用我们自己实现的定制删除器也没有问题了,如下: 但是还存在一个问题,当我们 new 一个数据的时候,如下: Young::shared_ptr sp3(new ListNode); 上面这种情况也会出现问题,因为这个时候我们没有传可调用对象,它就默认调了第一个个构造函数,即没有定制删除器的构造函数,但是我们在析构函数的时候是使用包装器进行释放资源的

    13310

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券