标签: auto

函数标题中的箭头运算符( - >)

我找到了这样的代码:

template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) {
   return a+b;
}
Run Code Online (Sandbox Code Playgroud)

我想到了所有细节,这对我来说是新的,但只有一个.请告诉我,在哪里可以阅读,箭头操作符(->)在函数标题中的含义是什么?我纯粹从逻辑上说,那个->算子确定了一个类型,auto但是我希望得到这个,但找不到信息.

c++ decltype auto c++11

111
推荐指数
3
解决办法
3万
查看次数

通用lambda如何在C++ 14中工作?

auto在C++ 14标准中,通用lambda如何工作(关键字作为参数类型)?

它是基于C++模板的,每个不同的参数类型编译器生成一个具有相同主体但替换类型(编译时多态)的新函数,还是更类似于Java的泛型(类型擦除)?

代码示例:

auto glambda = [](auto a) { return a; };
Run Code Online (Sandbox Code Playgroud)

c++ lambda auto c++14

108
推荐指数
3
解决办法
4万
查看次数

Java中有自动类型推断吗?

autoJava中是否有像C++一样的变量类型?

一个例子:

for ( auto var : object_array)
    std::cout << var << std::endl;

for( auto var : object_array)
    var.do_something_that_only_this_particular_obj_can_do();
Run Code Online (Sandbox Code Playgroud)

我知道Java中有一个增强的for循环,但是有自动吗?如果没有,是否有这样做的黑客?我指的是C++ 11中的新功能

c++ java auto

96
推荐指数
6
解决办法
6万
查看次数

新关键字"自动"; 什么时候应该用它来声明一个变量类型?

可能重复:
使用C++ 0x auto关键字多少钱

我们(作为社区)是否有足够的经验来确定何时和/或是否滥用汽车?

我真正想要的是最佳实践指南

  • 什么时候使用auto
  • 何时应该避免

简单的经验法则可以在80%的情况下快速遵循.

由于上下文这个问题由我的回应引发了这里

c++ type-safety auto c++11

88
推荐指数
4
解决办法
7万
查看次数

尾随返回类型语法样式应该成为新C++ 11程序的默认样式吗?

C++ 11支持新的函数语法:

auto func_name(int x, int y) -> int;
Run Code Online (Sandbox Code Playgroud)

目前此函数将声明为:

int func_name(int x, int y);
Run Code Online (Sandbox Code Playgroud)

新风格似乎还没有被广泛采用(比如在gcc stl中)

但是,这种新风格是否应该在新的C++ 11程序中随处可见,还是仅在需要时使用?

就个人而言,我更喜欢旧款式,但是混合风格的代码库看起来很丑陋.

c++ auto c++11 trailing-return-type

80
推荐指数
4
解决办法
2万
查看次数

为什么我需要明确写出'auto'关键字?

我正在从C++ 98转向C++ 11并熟悉该auto关键字.我想知道为什么我们需要显式声明auto编译器是否能够自动推断出类型.我知道C++是一种强类型语言,这是一个规则但是如果没有明确声明变量就不可能实现相同的结果auto吗?

c++ auto c++11

78
推荐指数
6
解决办法
8624
查看次数

lambda的返回类型可以通过返回值推导出来,那么为什么函数不能?

#include <iostream>

int main(){

    auto lambda = [] {
        return 7;
    };

    std::cout << lambda() << '\n';

}
Run Code Online (Sandbox Code Playgroud)

该程序编译并打印7.
lambda的返回类型基于返回值7推导为整数类型.


为什么普通功能不能实现这一点?

#include <iostream>

auto function(){
    return 42;
}

int main(){

    std::cout << function() << '\n';
}
Run Code Online (Sandbox Code Playgroud)

错误:'function'函数使用'auto'类型说明符而没有尾随返回类型

c++ lambda function auto c++11

75
推荐指数
5
解决办法
5138
查看次数

在 C++ 中限制“auto”是否违背了它的目的?

在 C++20 中,我们现在能够将auto关键字限制为仅属于特定类型。因此,如果我有一些如下所示的代码,没有任何限制:

auto something(){
  return 1;
}

int main(){
  const auto x = something();
  return x;
}
Run Code Online (Sandbox Code Playgroud)

这里的变量x被推导为一个int。然而,随着 C++20 的引入,我们现在可以将 约束auto为某种类型,如下所示:

std::integral auto something(){
  return 0;
}

int main(){
  const auto x = something();
  return x;
}
Run Code Online (Sandbox Code Playgroud)

这不是违背了来这里的目的吗auto?如果我真的需要一个std::integral数据类型,我不能完全省略吗auto?我是否完全误解了使用auto

c++ auto c++-concepts c++20

72
推荐指数
3
解决办法
7730
查看次数

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; }
Run Code Online (Sandbox Code Playgroud)

我试着auto像这样使用:

auto my_foo = GetFoo();
Run Code Online (Sandbox Code Playgroud)

我希望这my_foo将是一个常量引用Foo,这是函数的返回类型.但是,类型autoFoo,而不是参考.此外,my_foo是通过复制创建的g_temp.这种行为对我来说并不那么明显.

为了获得引用Foo,我需要这样写:

const auto& my_foo2 = GetFoo();
      auto& my_foo3 = GetFoo();
Run Code Online (Sandbox Code Playgroud)

问题:为什么auto推断出GetFoo作为对象的返回类型,而不是引用?

c++ reference auto c++11

71
推荐指数
1
解决办法
3万
查看次数

使用'auto'类型推导 - 如何找出编译器推导出的类型?

如何找出编译器在使用auto关键字时推断出的类型?

示例1:更简单

auto tickTime = 0.001;
Run Code Online (Sandbox Code Playgroud)

这被推断为a float或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;
Run Code Online (Sandbox Code Playgroud)

什么类型nextTickTime

我遇到的问题是当我尝试发送nextTickTimestd::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
            ^
In file included from /usr/include/c++/4.8.2/iostream:39:0,
             from ./main.cpp:10:
/usr/include/c++/4.8.2/ostream:602:5: error:   initializing argument 1 of ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) …
Run Code Online (Sandbox Code Playgroud)

c++ auto c++11 c++-chrono

71
推荐指数
4
解决办法
8991
查看次数