Questions tagged «auto»

auto关键字在C ++ 11中被重新用作推导类型。当用于替换初始化变量声明中的类型名称时,该变量的类型与初始化程序相同。当用作返回类型时,将返回类型指定为尾随返回类型,或从return-expression推导得出。

7
为什么需要显式编写'auto'关键字?
我正在从C ++ 98迈向C ++ 11,并且已经熟悉了auto关键字。我想知道为什么我们需要显式声明auto编译器是否能够自动推断类型。我知道C ++是一种强类型语言,这是一条规则,但是如果不显式声明一个变量,auto是否有可能实现相同的结果?
80 c++  c++11  auto 

1
C ++ 11 auto:如果得到一个常量引用怎么办?
请看下面的简单代码: class Foo { public: Foo(){} ~Foo(){} Foo(const Foo&){} Foo& operator=(const Foo&) { return *this; } }; static Foo g_temp; const Foo& GetFoo() { return g_temp; } 我试图这样使用auto: auto my_foo = GetFoo(); 我希望这my_foo将是对的常量引用Foo,这是函数的返回类型。但是,类型auto为Foo,而不是引用。此外,my_foo通过复制创建g_temp。这种行为对我而言并不那么明显。 为了获得对的引用Foo,我需要这样编写: const auto& my_foo2 = GetFoo(); auto& my_foo3 = GetFoo(); 问题:为什么auto推断出GetFoo作为对象而不是引用的返回类型?
77 c++  reference  c++11  auto 


5
Lambda的返回类型可以通过返回值来推断,那么为什么函数不能呢?
#include <iostream> int main(){ auto lambda = [] { return 7; }; std::cout << lambda() << '\n'; } 该程序编译并打印7。lambda 的返回类型根据返回值7推导为整数类型。 为什么普通功能无法做到这一点? #include <iostream> auto function(){ return 42; } int main(){ std::cout << function() << '\n'; } 错误:“函数”函数使用“自动”类型说明符,而没有尾随返回类型
75 c++  function  c++11  lambda  auto 

11
使用“自动”类型推导-如何找出编译器推导的类型?
我如何找出使用auto关键字时编译器推断出的类型? 示例1:更简单 auto tickTime = 0.001; 是推导为afloat还是adouble? 示例2:更复杂(和我目前的头痛): typedef std::ratio<1, 1> sec; std::chrono::duration<double, sec > timePerTick2{0.001}; auto nextTickTime = std::chrono::high_resolution_clock::now() + timePerTick2; 什么类型的nextTickTime? 我遇到的问题是尝试发送nextTickTime给时std::cout。我收到以下错误: ./main.cpp: In function ‘int main(int, char**)’: ./main.cpp:143:16: error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’ std::cout << std::setprecision(12) << nextTickTime << std::endl; // time in seconds ^ …
74 c++  c++11  auto  chrono 

1
'auto'作为函数参数的模板参数占位符
C ++ 20允许使用auto函数参数类型。 它是否还允许将函数参数类型auto用作模板参数占位符(不相似,但以C ++ 17 template <auto>的精神)。 因此,以下代码是C ++ 20之前的版本: template<typename First, typename Second> void printPair(const std::pair<First, Second>& p) { std::cout << p.first << ", " << p.second; } 可以写成: void printPair(const std::pair<auto, auto>& p) { std::cout << p.first << ", " << p.second; } 它确实可以编译,并且可以很好地与实验性GCC实现概念配合使用。 它是C ++ 20的合法语法吗?
22 c++  templates  auto  c++20 

6
通过C ++中的重载构造函数初始化未知类型的变量
来自主要来自python的背景,我在使用C ++类型方面有些挣扎。 我试图通过几个采用不同类型作为参数的重载构造函数之一来初始化类变量。我已经读到使用auto关键字可以用于变量的自动声明,但是在我的情况下,直到选择构造函数后,它才会被初始化。但是,编译器对不初始化并不满意value。 class Token { public: auto value; Token(int ivalue) { value = ivalue; } Token(float fvalue) { value = fvalue; } Token(std::string svalue) { value = svalue; } void printValue() { std::cout << "The token value is: " << value << std::endl; } }; 在python中,它可能看起来像: class Token(): def …

1
std :: pair <自动,自动>返回类型
我玩弄auto在std::pair。在下面的代码中,函数f应该返回std::pair依赖于模板参数的类型的。 一个工作示例: 例1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // pair of doubles else return std::pair{0.0f, 0.0f}; // pair of floats } 这适用于gcc 9.2,gcc 10.0,clang 9.0和clang 10.0。 接下来,std::pair出于清楚的原因,我想显式地将返回类型编写为: 例子2 …

2
不同C ++编译器之间的自动类型推导不匹配
因此,我试图以某种现代C ++的形式实现点积(https://en.wikipedia.org/wiki/Dot_product),并提出了以下代码: #include &lt;iostream&gt; template&lt;class... Args&gt; auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, i2 = v2.begin(); typename std::common_type&lt;Args...&gt;::type s = 0; while( i1 != v1.end() &amp;&amp; i2!= v2.end()) { s …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.