C++ 在函数参数中使用auto关键字可以吗?

C++ 在函数参数中使用auto关键字可以吗?,c++,c++11,auto,C++,C++11,Auto,我知道auto关键字的含义已经从C++11完全改变了。但最近我编写了一个简单的程序,当使用=std=c++98选项编译时,它可以很好地编译和运行 P>这样,使用Autoto函数参数是否很好,或者我不应该像上面程序那样使用AutoCo来保持与C++ 11的兼容性?< P>直到C++ 11自动关键字为A,而C++ 11则变成了.< /P> 回答您的问题:根据C++标准编译代码,相应地调整Auto关键字的使用。在C++标准的前/后C++ 11边界上是不可移植的。< P>直到C++ 11,AutoTo

我知道auto关键字的含义已经从C++11完全改变了。但最近我编写了一个简单的程序,当使用=std=c++98选项编译时,它可以很好地编译和运行

<> P>这样,使用Autoto函数参数是否很好,或者我不应该像上面程序那样使用AutoCo来保持与C++ 11的兼容性?

< P>直到C++ 11自动关键字为A,而C++ 11则变成了.< /P>

回答您的问题:根据C++标准编译代码,相应地调整Auto关键字的使用。在C++标准的前/后C++ 11边界上是不可移植的。

< P>直到C++ 11,AutoToor是A+C,C++ 11则变成了.< /P>

回答您的问题:根据C++标准编译代码,相应地调整Auto关键字的使用。在C++标准的前/后C++ 11边界上,它不是可移植的。 所以,在函数参数中使用auto可以吗?或者我应该永远不要像上面的程序那样使用auto来保持与C++11的兼容性吗

这取决于你所说的罚款是什么意思:

如果你是说它会编译吗?那么是的

如果你的意思是这是一个好的做法,答案是它根本不是一个做法;这样做是可能的,而且代码在C++11之前是完全有效的,但是时间已经过去了,我不知道有谁这样做过,即使是为了一些棘手的面试问题

总之,不要这样做

所以,在函数参数中使用auto可以吗?或者我应该永远不要像上面的程序那样使用auto来保持与C++11的兼容性吗

这取决于你所说的罚款是什么意思:

如果你是说它会编译吗?那么是的

如果你的意思是这是一个好的做法,答案是它根本不是一个做法;这样做是可能的,而且代码在C++11之前是完全有效的,但是时间已经过去了,我不知道有谁这样做过,即使是为了一些棘手的面试问题

总之,不要这样做。

C++11之前的auto是一个存储类说明符,就像register、static或extern一样

但是,它是默认的存储类说明符。如果删除了有效的C++03代码,其含义也会相同,这就是为什么C++11觉得偷关键字很舒服的原因

简言之:

void fun1(auto int a) {   
  std::cout<<a<<'\n';
}
void fun2(int a) {   
  std::cout<<a<<'\n';
}
在C++03中具有相同的含义。在C++11中,fun1的格式不正确

只需将其从所有C++11之前的代码库中删除即可。如果代码是有效的C++03,它将继续具有相同的含义

<> P>有一个非常小的问题,有些编译器默认会实现K&R时代C,一个类型是int. Ie,他们可能会考虑AutoX;表示自动int x;。但是,这不是有效的C++03。在C++03模式下使用足够严格的标志进行编译时,应该会在滥用auto的情况下产生错误

另外,C++11还引入了一个新的存储类说明符thread_local。它窃取auto以使用自动类型变量,auto不再是存储类说明符。

C++11之前的auto是存储类说明符,如register、static或extern

但是,它是默认的存储类说明符。如果删除了有效的C++03代码,其含义也会相同,这就是为什么C++11觉得偷关键字很舒服的原因

简言之:

void fun1(auto int a) {   
  std::cout<<a<<'\n';
}
void fun2(int a) {   
  std::cout<<a<<'\n';
}
在C++03中具有相同的含义。在C++11中,fun1的格式不正确

只需将其从所有C++11之前的代码库中删除即可。如果代码是有效的C++03,它将继续具有相同的含义

<> P>有一个非常小的问题,有些编译器默认会实现K&R时代C,一个类型是int. Ie,他们可能会考虑AutoX;表示自动int x;。但是,这不是有效的C++03。在C++03模式下使用足够严格的标志进行编译时,应该会在滥用auto的情况下产生错误


另外,C++11还引入了一个新的存储类说明符thread_local。它偷取了自动类型变量的使用,而AUTO不再是存储类说明符。< /P>另一个问题的可能副本是,为什么你会在任何版本的C++中使用AutoWAY?我想不出原因。auto int应该是什么意思?我能想到的唯一原因是,如果C++98/C++03和C++11之间的一个无声更改破坏了代码,那么您是否有代码特别需要在C++11模式下发出错误。但是,在这种情况下,如果使用C++ 11,如果有错误的IF条件将更好地读。另一个问题的可能副本是为什么您会使用Auto-At,在任何版本的C++中?我想不出原因。auto int应该是什么意思?我能想到的唯一原因是,如果C++98/C++03和C++11之间的一个无声更改破坏了代码,那么您是否有代码特别需要在C++11模式下发出错误。然而,在这种情况下,如果使用C++11,则带有错误的if条件在可读性方面会更好 C++11,自动作为存储类说明符。但它也是一个存储类说明符,除了省略它没有什么不同……嗯,在C++11之前,自动作为存储类说明符。但它也是一个存储类说明符,除了省略它没有什么不同。。。
void fun1(auto int a) {   
  std::cout<<a<<'\n';
}
void fun2(int a) {   
  std::cout<<a<<'\n';
}