标签: auto

使用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万
查看次数

为什么const auto&p {nullptr}工作而auto*p {nullptr}不能在C++ 17中工作?

这个定义有效:

const auto &b{nullptr};
Run Code Online (Sandbox Code Playgroud)

虽然失败了:

auto *b{nullptr};
Run Code Online (Sandbox Code Playgroud)

我试图在Visual C++,GCC和Clang中编译它.他们都抱怨"不能推断出类型".

在第二种情况下,不b应该推断出有某种类型的std::nullptr_t

c++ nullptr auto c++17

31
推荐指数
3
解决办法
2105
查看次数

针对课堂朋友功能的返回类型扣除

这是一个关于类内朋友函数的返回类型推导的小实验(std=c++1y在两种情况下都使用Clang 3.4 SVN和g ++ 4.8.1 ),链接工作文件中没有记录

#include <iostream>

struct A
{
    int a_;
    friend auto operator==(A const& L, A const& R) 
    { 
        return L.a_ == R.a_; // a_ is of type int, so should return bool
    }
};

template<class T>
struct B
{
    int b_;
    friend auto operator==(B const& L, B const& R) 
    { 
        return L.b_ == R.b_; // b_ is of type int, so should return bool
    }
};

using BI = B<int>;

int main() …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在一般的lambda中完美地转发`auto &&`?

C++ 14支持通用lambda.但是,clang 3.4拒绝以下代码.

#include <utility>

void f(int);
void f(int&);

int main()
{
    [](auto&& v) { f(std::forward<auto>(v)); }(8); // error
}
Run Code Online (Sandbox Code Playgroud)

如何auto&&在一般的lambda中完美前进?

c++ lambda perfect-forwarding auto c++11

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

有`decltype(auto)`变量的实际用例吗?

从我的个人经验以及从咨询答案到诸如decltype(auto)有什么用途的问题我可以找到许多有价值的用例decltype(auto)作为函数返回类型占位符

但是,我在努力思考decltype(auto)变量的任何有效(即有用,现实,有价值)用例时都非常费劲。我想到的唯一可能性是存储函数返回的结果以decltype(auto)供以后传播,但auto&&也可以在此使用,这样会更简单。

我什至搜索了我所有的项目和实验,其中391个出现的decltype(auto)都是返回类型的占位符。

那么,变量是否有实际的用例decltype(auto)还是仅当用作返回类型占位符时此功能才有用?


您如何定义“现实”?

我正在寻找一个能提供价值的用例(即,不仅仅是显示功能如何工作的示例)decltype(auto),与诸如auto&&或根本不声明变量的替代方案相比,哪里是最佳选择。

问题域无关紧要,它可能是一些晦涩的元编程极端案例或神秘的功能编程构造。但是,该示例需要使我接受“嘿,这很聪明/很漂亮!” 而使用任何其他功能来达到相同的效果将需要更多样板,或者存在某种缺陷。

c++ auto type-deduction c++14 decltype-auto

27
推荐指数
2
解决办法
541
查看次数

`static constexpr auto` data-member用未命名的枚举初始化

我正在使用C++ 11项目clang++-3.4,并决定编译使用g++-4.8.2,以防产生的错误有任何差异.事实证明,g ++拒绝了一些clang ++接受的代码.我已将问题减少到下面给出的MWE.


enum { a };

template <class T>
struct foo
{
    static constexpr auto value = a;
};

int main()
{
    static constexpr auto r = foo<int>::value;
}
Run Code Online (Sandbox Code Playgroud)

foo.cpp:5:23:错误:' const<anonymous enum> foo<int>::value',使用匿名类型声明,但是使用但从未定义[-fpermissive]

static const auto value = A;
Run Code Online (Sandbox Code Playgroud)

我想帮助回答以下两个问题:

  • 哪个编译器在解释标准时是正确的?我假设一个编译器正确接受或拒绝代码,另一个是错误的.

  • 我该如何解决这个问题?我无法命名匿名枚举,因为它来自第三方库(在我的情况下,枚举是Eigen::RowMajorEigen::ColMajor).

c++ enums language-lawyer auto c++11

26
推荐指数
3
解决办法
4419
查看次数

如何在C++ 11中使用lambda auto参数

我有一个C++ 14代码.但是,当我在C++ 11中使用它时,它有一个错误const auto.如何在C++ 11中使用它?

vector<vector <int> > P;  
std::vector<double> f;
vector< pair<double, vector<int> > > X; 
for (int i=0;i<N;i++)
        X.push_back(make_pair(f[i],P[i]));

////Sorting fitness descending order
stable_sort(X.rbegin(), X.rend());
std::stable_sort(X.rbegin(), X.rend(),
                [](const auto&lhs, const auto& rhs) { return lhs.first < rhs.first; });
Run Code Online (Sandbox Code Playgroud)

c++ auto c++11

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

为什么decltype(auto)会在这里返回引用?

我想(想)我明白了auto.同样的decltype.但是,在C++ 14中,可以有一些像decltype(auto)生成函数的返回类型那样的代数.考虑以下:

decltype(auto) foo()
{
    int m = 1;
    return m;
}
Run Code Online (Sandbox Code Playgroud)

返回类型是int,一切都有意义.

然而,

decltype(auto) foo()
{
    int m = 1;
    return (m);
}
Run Code Online (Sandbox Code Playgroud)

返回int&(即引用int).

我绝对没有想到为什么会发生这种情况,为什么这些括号根本没有任何区别!?希望有人可以对此有所了解.

PS:我也标记过,C++因为有更多的人检查C++标签C++14.

c++ decltype auto c++14

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

使用C++ 11 auto关键字声明两个(或更多)变量

我有这样的代码:

template<class ListItem>
static void printList(QList<ListItem>* list)
{
    for (auto i = list->size() - 1, j = -1; i >= 0; --i) {
        std::cout << i << ", " << j << ": " << list->at(i) << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我用g ++ 6.2.1编译它时,我得到以下编译器输出:

test.cpp: In function ‘void printList(QList<T>*)’:
test.cpp:10:7: error: inconsistent deduction for ‘auto’: ‘auto’ and then ‘int’
  for (auto i = list->size() - 1, j = -1; i >= 0; --i) {
       ^~~~
Run Code Online (Sandbox Code Playgroud)

我理解这一点,如果变量有不同的类型auto i = 0.0, j …

c++ templates auto c++11

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

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

可以写成:

void printPair(const std::pair<auto, auto>& p) {
    std::cout << p.first << ", " << p.second;
}
Run Code Online (Sandbox Code Playgroud)

确实可以编译并与概念的实验性 GCC 实现一起很好地工作

它是 C++20 的合法语法吗?


相关:C++ 概念的通配符说“接受这个模板参数的任何东西”

c++ templates auto c++20

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