标签: auto

无效使用自动

在这段代码中:

for ( ;(auto i = std::find(some_string.begin(),some_string.end(),'%')) != some_string.end();)
    {

    }  
Run Code Online (Sandbox Code Playgroud)

我从gcc 4.7.1收到错误:

error: invalid use of 'auto'|   
Run Code Online (Sandbox Code Playgroud)

任何想法为什么?不应该正确编译?

c++ auto c++11

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

基于范围的for循环的对象生存期问题

我目前正在将我的代码转换为C++ 11并且在以下基于范围的for循环中遇到问题(FWIW,相同的代码在使用BOOST for_each之前运行得很好).

所述mLibraryFiles构件(STL向量)是一个单件实例的一部分,并且保证当呼叫者检查返回的对象只包含垃圾的方法返回后存在,但是.

通过它进行调试似乎在从方法返回之后从预期内容转为垃圾,所以我想我必须对C++ 11基于范围的循环实际如何工作有所不妥:

Entry* FindEntry(string inName)
{  Entry *rs = NULL;

   for (auto libraryEntry : mLibraryFiles)
   {
      if (libraryEntry.filename.compare(inName) == 0)
      {
         rs = &libraryEntry;
         break;
      }
   }

   return rs;
}
Run Code Online (Sandbox Code Playgroud)

我原以为libraryEntry变量代表mLibraryFiles向量中的实际对象?

任何见解都非常感谢!
(编译器是LLVM 5.0虽然我怀疑这很重要..)

c++ for-loop object-lifetime auto c++11

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

C++确定auto的类型并传递给函数模板

我有一个功能:

template<typename T> f(T x) { do something with x; }
Run Code Online (Sandbox Code Playgroud)

我想将此自动指针传递给函数

auto x = ...
f<???>(x)
Run Code Online (Sandbox Code Playgroud)

反正我是这样做的吗?

c++ auto c++11

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

C++ 14自动扣除错误:函数返回一个数组

社区!我正在尝试应用新的C++ 14功能,并在我尝试将const char []参数传递给下面给出的函数时意外遇到错误:

 decltype(auto) autofunc( const auto& a)
 {
     cout<<"Hello World\n";
     cout<<a<<endl;

 }


 auto lambd = [](const auto& word){  autofunc(std::forward< decltype(word) > (word));};

int main()
{


 lambd("Goodbye World\n");


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但是compilier的消息是函数试图返回一个数组(为什么会这样做?).如果我将函数的返回类型更改为void它将被编译.如果我传递另一种类型的参数(不是数组)它将被编译.数组有什么问题?

错误信息

../../untitled6/main.cpp: In instantiation of '<lambda(const auto:3&)> [with auto:3 = char [15]]':
../../untitled6/main.cpp:74:25:   required from here
../../untitled6/main.cpp:68:84: error: no matching function for call to 'autofunc(const char [15])'
  auto lambd = [](const auto& word){  autofunc(std::forward< decltype(word) > (word));};
                                                                                    ^
../../untitled6/main.cpp:68:84: note: candidate is:
../../untitled6/main.cpp:60:17: …
Run Code Online (Sandbox Code Playgroud)

c++ arrays auto c++14

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

在函数参数中使用auto关键字是否可以?

我知道auto关键字的含义已完全从C++ 11中改变.但是最近我编写了一个简单的程序,在编译=std=c++98选项时可以编译和运行.

#include <iostream>
void fun(auto int a)
{   
    a=3;
    std::cout<<a<<'\n';
}
int main()
{
    fun(3);
}
Run Code Online (Sandbox Code Playgroud)

Orwell Dev C++ IDE给出了如下警告:

[Warning] 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]
Run Code Online (Sandbox Code Playgroud)

那么,auto用于函数参数是否可以,或者我是否应该auto像上面的程序一样使用它来保持与C++ 11的兼容性?

c++ auto c++11

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

可能的编译错误?使用从模板化静态成员函数检索的指针调用模板化方法时,无法自动推导

更新2

为什么这标记重复?Where and why do I have to put the “template” and “typename” keywords?不回答这个问题.这里描述的行为在任何地方都没有提到(你不会找到关于auto那里的预期行为的单一评论).

不是重复,特别是因为在不同的编译器中存在冲突的行为.


UPDATE

就像GCC一样,clang也无法编译:

17 : error: expected expression
return p->is<true>();
^
Run Code Online (Sandbox Code Playgroud)

但是,在MSVC上,具有auto检测的代码正在成功编译.

显然,某处存在编译器错误.


实例

考虑以下课程:

struct A {
    template<bool>
    bool is() const {
        return true;
    }

    template<bool>
    static A* get() {
        static A a;
        return &a;
    }
};
Run Code Online (Sandbox Code Playgroud)

如果是模板功能,如

template<bool cond>
bool foo() {
    auto p = A::get<cond>();
    return p->is<true>();
} …
Run Code Online (Sandbox Code Playgroud)

c++ templates auto c++11 c++14

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

C++ auto,不明白如何分配运营商?

我有这个代码.

CGraphicTextInstance*& prGuildNameInstance = pTextTail->pGuildNameTextInstance;
Run Code Online (Sandbox Code Playgroud)

我想应用一些c ++ 11功能,如auto转换.

自动后应该是这样的:

auto prGuildNameInstance = pTextTail->pGuildNameTextInstance;
Run Code Online (Sandbox Code Playgroud)

添加自动后,自动分配只是CGraphicTextInstance没有操作员*&我看到这与智能感知.

我的问题是为什么?我应该添加手动缺少的运营商?像这样 ?

auto &prGuildNameInstance = pTextTail->pGuildNameTextInstance;
Run Code Online (Sandbox Code Playgroud)

我的问题可以破坏我的代码吗?这可能是个问题吗?可以自动分配他想要的东西吗?

c++ auto c++11

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

在STL迭代器中使用`auto`关键字

我正在按照教程使用auto关键字和STL迭代器.

它说这种语法适用于C++ 11.

vector<int> vec;
auto itr = vec.iterator(); // instead of vector<int>::iterator itr
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试它时,我得到这个编译错误?

错误:无效使用'std :: vector :: iterator'

c++ iterator stl auto c++11

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

C++中的'auto'声明问题

我在使用auto声明时遇到问题.我在Visual Studio 2017中编写了一个程序,如下所示:

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;

class MyClass
{
public:
    struct mystruct {
        vector<int> vi;
    };
    vector<mystruct> TheStructV;
    void AddStructV() {
        TheStructV.push_back(mystruct());
    };
};

int main()
{
    MyClass MyObj[3];
    for (int a = 0; a < 3; a++) {
        MyObj[a].AddStructV();
        for (int i = 1; i <= 5; i++) {
            MyObj[a].TheStructV[MyObj[a].TheStructV.size() - 1].vi.push_back(i * 10 + idx);
        }
        idx++;
    }
    for (int b = 0; b<3; b++) {
        cout << …
Run Code Online (Sandbox Code Playgroud)

c++ auto

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

auto type默认为int而不是long

我遇到了以下示例,其中auto声明默认为int而不是long:

#include <stdio.h>
int main(int argc, char **argv)
{
    auto i = 999999999999999;
    // long i = 999999999999999;
    printf("i = %ld\n",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译这段代码时,gcc确实提供了一个相关的警告,i实际上是int:

$ gcc -o main main.c
main.c: In function ‘main’:
main.c:4:10: warning: type defaults to ‘int’ in declaration of ‘i’ [-Wimplicit-int]
     auto i = 999999999999999;
          ^
main.c:4:14: warning: overflow in implicit constant conversion [-Woverflow]
     auto i = 999999999999999;
              ^~~~~~~~~~~~~~~
main.c:6:19: warning: format ‘%ld’ expects argument of type ‘long int’, but …
Run Code Online (Sandbox Code Playgroud)

c c++ lexical-analysis auto

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

标签 统计

auto ×10

c++ ×10

c++11 ×7

c++14 ×2

arrays ×1

c ×1

for-loop ×1

iterator ×1

lexical-analysis ×1

object-lifetime ×1

stl ×1

templates ×1