标签: auto

可以使用C++ 11的'auto'来提高性能吗?

我可以看到为什么autoC++ 11中的类型提高了正确性和可维护性.我读过它也可以提高性能(Herb Sutter 几乎总是自动),但我错过了一个很好的解释.

  • 如何auto提高性能?
  • 谁能举个例子?

c++ performance auto c++11

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

使用C++ 11 auto关键字多少钱?

我一直在使用autoC++ 11标准中提供的新关键字来处理复杂模板类型,这是我认为它的设计目标.但我也用它来做:

auto foo = std::make_shared<Foo>();
Run Code Online (Sandbox Code Playgroud)

更加怀疑的是:

auto foo = bla(); // where bla() return a shared_ptr<Foo>
Run Code Online (Sandbox Code Playgroud)

我没有看到很多关于这个话题的讨论.似乎auto可能过度使用,因为类型通常是文档和健全性检查的一种形式.您在哪里绘制使用线auto以及此新功能的推荐用例是什么?

澄清:我不是要求哲学观点; 我要求标准委员会对该关键字的预期用途,可能还有关于如何在实践中实现该预期用途的评论.

旁注:此问题已移至SE.Programmers,然后返回Stack Overflow.关于这一点的讨论可以在这个元问题中找到.

c++ types type-inference auto c++11

210
推荐指数
8
解决办法
4万
查看次数

auto &&告诉我们什么?

如果您阅读的代码如下

auto&& var = foo();

where foo是按类型值返回的任何函数T.然后var是左值类型的左值引用T.但这意味着var什么呢?这是不是意味着,我们被允许窃取资源var?是否有任何合理的情况,您应该使用auto&&告诉读者您的代码与您在返回时unique_ptr<>告诉您拥有独占所有权时的行为?例如什么T&&时候T类型?

我只是想了解,如果有任何其他用例auto&&比模板编程中的用例; 喜欢这篇文章中的例子中所讨论的那些通用参考斯科特迈尔斯.

c++ auto c++11 forwarding-reference

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

在C++中使用auto声明变量是否存在缺点?

这似乎auto是一个相当重要的功能,在C++ 11中添加似乎遵循许多较新的语言.与像Python这样的语言一样,我没有看到任何显式变量声明(我不确定是否可以使用Python标准).

使用auto声明变量而不是显式声明它们有缺点吗?

c++ type-inference auto c++11

141
推荐指数
7
解决办法
1万
查看次数

为什么我可以在私有类型上使用auto?

以下代码编译并运行时,我感到很惊讶(vc2012&gcc4.7.2)

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

int main() {
    Foo f;
    // Foo::Bar b = f.Baz();  // error
    auto b = f.Baz();         // ok
    std::cout << b.i;
}
Run Code Online (Sandbox Code Playgroud)

这段代码编译得好吗?为什么这是正确的?为什么我可以auto在私有类型上使用,而我不能使用它的名字(如预期的那样)?

c++ private-members auto c++11

134
推荐指数
4
解决办法
4172
查看次数

decltype(auto)有哪些用途?

在c ++ 14 decltype(auto)中引入了成语.

通常,它的用途是允许auto声明使用decltype给定表达式的规则.

搜索成语的"好"用法示例我只能想到以下内容(由Scott Meyers提供),即函数的返回类型推导:

template<typename ContainerType, typename IndexType>                // C++14
decltype(auto) grab(ContainerType&& container, IndexType&& index)
{
  authenticateUser();
  return std::forward<ContainerType>(container)[std::forward<IndexType>(index)];
}
Run Code Online (Sandbox Code Playgroud)

这个新语言功能有用吗?

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

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

C++自动关键字.为什么它很神奇?

从我以前学习C++的所有材料来看,auto一直是一个奇怪的存储持续时间说明符,它没有任何用途.但就在最近,我遇到的代码将其用作类型名称.出于好奇,我尝试了它,它假设我碰巧分配给它的类型!

突然间,STL迭代器以及使用模板的任何东西都比写入容易10倍.感觉就像我正在使用像Python这样的"有趣"语言.

这个关键词一直在哪里?你会说它是视觉工作室独有的还是不可移植的?

c++ types auto c++11

130
推荐指数
7
解决办法
10万
查看次数

在C++ 11中用"auto"推导出lambda的类型是什么?

我有一种感觉,lambda的类型是一个函数指针.当我进行以下测试时,我发现它是错误的(演示).

#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
  long (*pFptr)(int) = LAMBDA;  // ok
  auto pAuto = LAMBDA;  // ok
  assert(typeid(pFptr) == typeid(pAuto));  // assertion fails !
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是否缺少任何一点?如果不是那么,typeofauto关键字推导出的lambda表达式是什么?

c++ lambda typeof auto c++11

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

为什么auto a = 1; 用C编译?

代码:

int main(void)
{
    auto a=1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当文件具有.c扩展名时,MS Visual Studio 2012编译器会编译无错误.我一直认为,当你使用.c扩展名时,编译应该是根据C语法,而不是C++.而且,据我所知,自C++ 11以来允许在C++中使用auto类型,这意味着该类型是从初始化程序推导出来的.

这是否意味着我的编译器不坚持C,或者C语言中的代码实际上是否正确?

c auto c11

125
推荐指数
5
解决办法
4万
查看次数

Lambda回归:这是合法的吗?

考虑这个相当无用的程序:

#include <iostream>
int main(int argc, char* argv[]) {

  int a = 5;

  auto it = [&](auto self) {
      return [&](auto b) {
        std::cout << (a + b) << std::endl;
        return self(self);
      };
  };
  it(it)(4)(6)(42)(77)(999);
}
Run Code Online (Sandbox Code Playgroud)

基本上我们正在尝试制作一个返回自己的lambda.

  • MSVC编译程序,然后运行
  • gcc编译程序,并且它是段错误的
  • clang用一条消息拒绝该程序:

    error: function 'operator()<(lambda at lam.cpp:6:13)>' with deduced return type cannot be used before it is defined

哪个编译器是对的?是否存在静态约束违规,UB或两者都没有?

clang接受更新此轻微修改:

  auto it = [&](auto& self, auto b) {
          std::cout << (a + b) << std::endl;
          return [&](auto p) { return …
Run Code Online (Sandbox Code Playgroud)

c++ lambda language-lawyer auto c++17

122
推荐指数
6
解决办法
9029
查看次数