编译器是否具有用 C++ 中的推断类型替换 auto 的功能?
Is there a feature of the compiler for substituting auto with the inferred type in C++?
auto
使用起来很舒服,但有时,为了编程时的易读性,我更愿意将推断类型写在源代码中,而不是自动编写。
是否有 gcc/clang 或其他一些 tool/VSCode 扩展(用于 linux 或 macos)的功能将源文件作为输入并吐出相同的源文件,但auto
替换为它的推断类型?
我试过谷歌搜索,但我发现的最接近的东西是这个 Whosebug question,它没有回答我的问题。
一般来说,这并不总是可行的。在以下情况下,编译器无法将 auto
替换为 one 类型,因为实际上实例化了 3 个不同的函数。
template<typename T>
auto f(T x) {
auto y = x;
return y;
}
int main() {
f(1);
f('c');
f("c");
}
评论中有人说它应该用 auto
代替 T
,因为这实际上是我的简单示例中发生的情况:auto
被推断为相同类型 因为T
被推导为,在我看来这只是意味着在这个例子中auto
扮演着与T
相同的角色,即“占位符”(也许这不是正确的术语)编译器将在每个调用站点推断出的类型。即使你用 auto
代替 T
(在这个简单的例子中),你得到的信息比你得到的多多少?没有。
如果上面的main
改为
int main() {
f(1);
}
那么是的,你或编译器可以用 int
(或其他)替换 auto
,但在原始代码中,不会有 single 替换将使 main
中的所有三行都快乐。编译可以用它需要的各种实例的序列替换整个模板函数。这些的数量取决于在使用 f
.
的整个代码库中有多少不同类型传递给 f
如果你写了一个库,里面有一个很好的模板函数,你无法知道它将用哪些类型实例化,当I 将在 my 代码中使用它;那么你用什么代替 T
或 auto
?
结合使用 clang
作为编译器,您使用 clangd
进行自动完成,...它会在鼠标悬停时显示 auto
的类型(只要它不依赖于模板变量)
auto
使用起来很舒服,但有时,为了编程时的易读性,我更愿意将推断类型写在源代码中,而不是自动编写。
是否有 gcc/clang 或其他一些 tool/VSCode 扩展(用于 linux 或 macos)的功能将源文件作为输入并吐出相同的源文件,但auto
替换为它的推断类型?
我试过谷歌搜索,但我发现的最接近的东西是这个 Whosebug question,它没有回答我的问题。
一般来说,这并不总是可行的。在以下情况下,编译器无法将 auto
替换为 one 类型,因为实际上实例化了 3 个不同的函数。
template<typename T>
auto f(T x) {
auto y = x;
return y;
}
int main() {
f(1);
f('c');
f("c");
}
评论中有人说它应该用 auto
代替 T
,因为这实际上是我的简单示例中发生的情况:auto
被推断为相同类型 因为T
被推导为,在我看来这只是意味着在这个例子中auto
扮演着与T
相同的角色,即“占位符”(也许这不是正确的术语)编译器将在每个调用站点推断出的类型。即使你用 auto
代替 T
(在这个简单的例子中),你得到的信息比你得到的多多少?没有。
如果上面的main
改为
int main() {
f(1);
}
那么是的,你或编译器可以用 int
(或其他)替换 auto
,但在原始代码中,不会有 single 替换将使 main
中的所有三行都快乐。编译可以用它需要的各种实例的序列替换整个模板函数。这些的数量取决于在使用 f
.
f
如果你写了一个库,里面有一个很好的模板函数,你无法知道它将用哪些类型实例化,当I 将在 my 代码中使用它;那么你用什么代替 T
或 auto
?
结合使用 clang
作为编译器,您使用 clangd
进行自动完成,...它会在鼠标悬停时显示 auto
的类型(只要它不依赖于模板变量)