标签: auto

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

C++ auto&vs auto

创建局部变量时,使用(const) auto&或是正确的auto吗?

例如:

SomeClass object;
const auto result = object.SomeMethod();
Run Code Online (Sandbox Code Playgroud)

要么 const auto& result = object.SomeMethod();

SomeMethod()返回非原始值 - 可能是另一个用户定义的类型.我的理解是const auto& result正确的,因为SomeMethod()返回的结果将为返回的类型调用复制构造函数.如果我错了,请纠正我.

原始类型怎么样?我认为const auto sum = 1 + 2;是正确的.

这是否也适用于基于范围的循环?

for(const auto& object : objects)
Run Code Online (Sandbox Code Playgroud)

c++ auto

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

为什么auto x {3}推导出initializer_list?

我喜欢autoC++ 11.太棒了.但它有一个不一致,真的让我紧张,因为我一直绊倒它:

int i = 3;       // i is an int with value 3
int i = int{3};  // i is an int with value 3
int i(3);        // i is an int with value 3 (possibly narrowing, not in this case)
int i{3};        // i is an int with value 3

auto i = 3;      // i is an int with value 3
auto i = int{3}; // i is an int with value 3
auto i(3); …
Run Code Online (Sandbox Code Playgroud)

c++ initializer-list auto c++11 type-deduction

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

使用"auto"的声明是否匹配使用具体类型说明符的extern声明?

考虑以下程序:

extern int x;
auto x = 42;
int main() { }
Run Code Online (Sandbox Code Playgroud)

Clang 3.5接受它(现场演示),GCC 4.9和VS2013不接受(前者的现场演示).谁是对的,C++标准中指定的正确行为在哪里?

c++ extern language-lawyer auto

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

C++ 11基于范围的for循环效率"const auto&i"与"auto i"

在C++ 11中,我可以迭代一些容器,如下所示:

for(auto i : vec){
   std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但我知道这是不必要的 - 不必要的,因为我只需要打印 -的值vec- 制作(编辑:每个元素)的副本vec,所以我可以这样做:

for(auto &i : vec){
   std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是我想确保它们的值vec永远不会被修改并遵守const-correctness,所以我可以这样做:

for(const auto &i : vec){
   std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如果我只需要查看某个容器的值,那么最后的循环(const auto &i)是否总是首选,因为没有额外副本(编辑:每个元素)的效率提高vec

我正在开发一个我正在开发的程序,我正在考虑在整个过程中进行这种改变,因为效率是至关重要的(我在第一时间使用C++的原因).

c++ for-loop auto c++11

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

如何使用auto获取const_iterator?

第一个问题:是否有可能"强迫" const_iterator使用汽车?例如:

map<int> usa;
//...init usa
auto city_it = usa.find("New York");
Run Code Online (Sandbox Code Playgroud)

我只是想查询的不是改变的任何东西指出,city_it,所以我想有city_itmap<int>::const_iterator.但是通过使用auto,city_it返回类型是相同的map::find(),也就是说map<int>::iterator.有什么建议吗?

c++ auto c++11

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

带有和不带指针声明符的C++ 11自动声明

bar1和和的类型有什么区别bar2

int foo = 10;
auto bar1 = &foo;
auto *bar2 = &foo;
Run Code Online (Sandbox Code Playgroud)

如果这两个bar1bar2int*,确实是有意义的写指针声明符(*)在bar2声明?

c++ variable-declaration auto c++11

51
推荐指数
6
解决办法
7719
查看次数

C++中模板参数中auto的优点17

auto在(可能)用C++ 17引入的模板参数中有哪些优点?

它只是auto我想要实例化模板代码的自然扩展吗?

auto v1 = constant<5>;      // v1 == 5, decltype(v1) is int
auto v2 = constant<true>;   // v2 == true, decltype(v2) is bool
auto v3 = constant<'a'>;    // v3 == 'a', decltype(v3) is char
Run Code Online (Sandbox Code Playgroud)

我还从这个语言功能中获得了什么?

c++ templates auto c++17

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

C++ 11 - 将非静态数据成员声明为"auto"

如果在声明中初始化了非静态数据成员,它们是否允许将非静态数据成员声明为"auto"?例如:

struct S
{
    auto x = 5;  // in place of 'int x = 5;', which is definitely allowed
};
Run Code Online (Sandbox Code Playgroud)

GCC 4.7拒绝上述代码,但它接受了int x = 5;.

假设这不是编译器错误,而是标准真的不允许它,为什么不呢?它与声明局部变量一样有用auto.

c++ variable-declaration auto c++11

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

在C++ 11中使用auto

当我auto用来推断指针类型时,我发现了一个奇怪的现象.我的代码是这样的:

#include <iostream>
using namespace std;
int main()
{
    int i = 100;
    auto p1 = &i;
    auto *p2 = &i;

    cout << *p1 << " " << *p2 << endl;

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

在编译和执行之后,我们可以发现结果*p1*p2是相同的,都是100.这意味着p1并且p2都是指向对象的指针int对象.

[user@host ~]$ ./test 
100 100
Run Code Online (Sandbox Code Playgroud)

有没有哪个定义这两个语句之间有什么区别p1p2

c++ auto c++11

45
推荐指数
2
解决办法
3000
查看次数