标签: auto

c ++ 11中'auto'类型的指针类型是否需要'*'?

鉴于我的变量是一个指针,如果我将它分配给"auto"类型的变量,我是否指定"*"?

std::vector<MyClass> *getVector(); //returns populated vector
//...

std::vector<MyClass> *myvector = getVector();  //assume has n items in it
auto newvar1 = myvector;

// vs:
auto *newvar2 = myvector;

//goal is to behave like this assignment:
std::vector<MyClass> *newvar3 = getVector();
Run Code Online (Sandbox Code Playgroud)

我对autoc ++ 11的工作方式有点困惑(这是c ++ 11的新功能,对吧?)

更新:我修改了上面的内容,以更好地阐明我的向量是如何在函数中填充的,我只是尝试将返回的指针赋给变量.对困惑感到抱歉

c++ pointers auto c++11

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

为什么“auto”关键字对于 C 语言的编译器编写者有用?

我目前正在阅读“专家 C 编程 - 深层 C 秘密”,刚刚发现了这个:

\n
\n

auto永远不需要存储类说明符。这对于编译器编写者来说最有意义\n在符号表 \xe2\x80\x94 中创建一个条目,它表示“此存储在进入\n块时自动分配”(而不是在编译时静态分配,或在编译时动态分配)堆)。auto\n对于所有其他程序员来说几乎没有意义,因为它只能在函数内部使用,但是\n函数中的数据声明默认具有此属性。

\n
\n

我看到有人在这里问了同样的事情,但他们没有任何答案,评论中给出的链接仅解释了为什么 C 中有这样一个继承自B 的关键字,以及与 C++ 的差异11 或 C++11 之前版本。

\n

无论如何,我发布的内容是为了重点说明auto关键字在编译器编写中以某种方式有用的部分,但是这个想法是什么以及与符号表的联系是什么?

\n

我确实坚持这样一个事实:我只询问用 C 语言编写编译器时的潜在用法(而不是编写 C 编译器)。

\n

为了澄清这一点,我问这个问题是因为我想知道是否有一个auto可以证明合理的代码示例,因为作者在编写编译器时表示会有。

\n

这里的重点是我认为已经理解了auto(继承自B,它是强制性的,但在C中无用),但我无法想象使用它时的任何示例是有用的(或者至少不是无用的)。

\n

看起来确实没有任何理由使用auto,但是是否有任何旧的源代码或类似的内容与引用的语句相对应?

\n

c compiler-construction keyword auto automatic-storage

40
推荐指数
4
解决办法
5650
查看次数

在lambda函数中使用auto

#include <vector>
#include <algorithm>

void foo( int )
{
}

int main()
{
  std::vector< int > v( { 1,2,3 } );

  std::for_each( v.begin(), v.end(), []( auto it ) { foo( it+5 ); } );
}
Run Code Online (Sandbox Code Playgroud)

编译时,上面的示例启动错误输出,如下所示:

h4.cpp: In function 'int main()':
h4.cpp:13:47: error: parameter declared 'auto'
h4.cpp: In lambda function:
h4.cpp:13:59: error: 'it' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

这是否意味着auto不应在lambda表达式中使用关键字?

这有效:

std::for_each( v.begin(), v.end(), []( int it ) { foo( it+5 ); } );
Run Code Online (Sandbox Code Playgroud)

为什么带有auto关键字的版本不起作用?

c++ lambda auto c++11

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

auto &&做什么?

这是来自Scott Meyers的C++ 11 Notes Sample的代码,

int x;
auto&& a1 = x;             // x is lvalue, so type of a1 is int&
auto&& a2 = std::move(x);  // std::move(x) is rvalue, so type of a2 is int&&
Run Code Online (Sandbox Code Playgroud)

我理解困难auto&&.
我有一定的了解auto,从中我会说,auto& a1 = x应该使类型a1int&

哪个来自引用代码,似乎有误.

我写了这个小代码,并在gcc下运行.

#include <iostream>

using namespace std;

int main()
{
    int x = 4;
    auto& a1 = x;           //line 8
    cout << a1 << endl;
    ++a1;
    cout << x;
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ auto c++11

35
推荐指数
1
解决办法
9481
查看次数

lambda中使用的"auto"变量在自己的初始值设定项中

今天我发现了这段代码

#include <cstdio>

auto terminal = [](auto term)           
{                                       
    return [=] (auto func)             
    {                                   
        return terminal(func(term));
    };
};
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,GCC接受了它.Clang拒绝它,因为它terminal在自己的初始化器中使用并被声明auto.

我期待clang给出的错误,但它实际上是不正确的吗?或者必须接受代码?

c++ lambda auto c++14

35
推荐指数
1
解决办法
1613
查看次数

有没有办法在PC中将auto作为参数传递?

有没有办法将auto作为参数传递给另一个函数?

int function(auto data)
{
    //DOES something
}
Run Code Online (Sandbox Code Playgroud)

c++ arguments function auto

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

在匿名类中返回 *this 时,“自动”返回类型的类型是什么?

在这段代码中:

struct
{
    auto operator[](const char*)
    {
        return *this;
    }

} m_some_class;
Run Code Online (Sandbox Code Playgroud)

这里的类型是什么auto

c++ class auto c++11

35
推荐指数
4
解决办法
2216
查看次数

auto和decltype之间的关系

auto x = initializer;
Run Code Online (Sandbox Code Playgroud)

相当于

decltype(initializer) x = initializer;
Run Code Online (Sandbox Code Playgroud)

要么

decltype((initializer)) x = initializer;
Run Code Online (Sandbox Code Playgroud)

还是两个?

c++ type-inference decltype auto c++11

34
推荐指数
3
解决办法
3504
查看次数

使用auto in循环c ++

我收到以下代码的警告签名/未签名不匹配:

auto n = a.size();
for (auto i = 0; i < n; i++) {
}
Run Code Online (Sandbox Code Playgroud)

问题是通过为i它分配0 int而不是size_t.那么更好的是:

size_t n = a.size();
for (size_t i = 0; i < n; i++) {
}
Run Code Online (Sandbox Code Playgroud)

或这个:

auto n = a.size();
for (size_t i = 0; i < n; i++) {
}
Run Code Online (Sandbox Code Playgroud)

或者你有更好的解决方案?我更喜欢第一个,因为它更加一致,它只是使用size_t而不是两个size_t并且auto 用于相同的目的.

c++ loops auto c++11

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

自动返回类型推导强制多个函数具有相同的返回类型吗?

请考虑以下代码段:

struct A
{
  auto foo(), bar();
};

auto A::foo() { return 1; }
auto A::bar() { return 'a'; }

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

它在Clang ++ 3.7.0中编译得很好.

它在G ++ 5.2.0中失败:

main.cpp: In member function 'auto A::bar()':
main.cpp:7:24: error: inconsistent deduction for 'auto': 'int' and then 'char'
auto A::bar() { return 'a'; }
Run Code Online (Sandbox Code Playgroud)

自动返回类型推导是否强制在单个语句中声明的多个函数具有相同的返回类型?

c++ auto return-type-deduction c++14

34
推荐指数
2
解决办法
1918
查看次数