auto相关内容
我在理解具体来说,对标准的一项更改是 如果函数的声明的返回类型包含占位符类型,则从函数主体中的return语句(如果有)中推断出函数的返回类型. 很容易看出,当函数体与声明位于同一文件中时,它是如何工作的;但是考虑头文件使用auto占位符声明方法但不定义的情况. 包含该头文件但不的翻译单元如何成功定义该方法的文件? 例如,给定文件foo.hpp: class foo {
..
要求容器提供一个iterator类型,该类型可以隐式转换为const_iterator.鉴于此,我尝试使用auto通过vector::begin()初始化对象,并在RHS为const_iterator的std::distance中使用该结果对象.这是行不通的.这是一个完整的示例: #include #include #include
..
所以我有一个返回类型为auto的lambda,并且在initializer_list的数组支持方面存在问题,在这里被破坏: const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c}; }; 我将像这样使用lambda: auto bar = foo(1, 2, 3); f
..
假设我有一个简单的c ++类,其中包含一个私有成员和一个getter: class MyClass { private: double m_testValue = 1; public: double& getTestValue(){return m_testValue;} } 现在让我们说我要调用getter来获取我的引用并编辑该值(并
..
2011 C ++标准引入了新的关键字auto,该关键字可用于定义变量而不是类型,即 auto p=make_pair(1,2.5); // pair auto i=std::begin(c), end=std::end(c); // decltype(std::begin(c)) 在第二行中,i和end具有相同的类型,
..
C ++ 20允许将auto用作函数参数类型. 它是否还允许将auto用作模板参数占位符(不相似,但是本着因此,以下代码是C ++ 20之前的版本: template void printPair(const std::pair& p) { std::cout
..
我正在尝试在自动功能上使用decltype关键字: struct Thing { static auto foo() { return 12; } using type_t = decltype(foo()); }; 我收到以下错误(gcc 7.4): :6:25: error: use of 'static auto Th
..
例如,我想拥有类型为auto的变量,因为我不确定它将是哪种类型. 当我尝试在类/结构声明中声明它时,出现此错误: 无法推断自动类型.需要初始化器 有办法解决吗? struct Timer { auto start; }; 解决方案 可以,但是必须声明static和const: struct Timer { static const auto
..
可能重复: 为什么vector :: reference不返回对bool的引用? 我曾经认为,使用std::vector::operator[]可以获取所访问项目的深副本,但似乎并非总是如此.至少,对于vector,以下测试代码将给出不同的结果: #include #include using namespace st
..
具有: struct Value { template static constexpr T value{0}; }; (0) ideone template struct Something { void x() { static_assert(TValue::template v
..
我认为(认为)我了解auto.关于decltype也是一样.但是,在C ++ 14中,可以将诸如decltype(auto)之类的双合成对象作为函数的返回类型.请考虑以下内容: decltype(auto) foo() { int m = 1; return m; } 返回类型为int,一切都有道理. 但是, decltype(auto) foo() {
..
我在SUSE Enterprise Linux 11上使用GCC 4.7.2和Boost 1.58.0.我有以下代码片段,该代码片段基本上通过多边形列表来计算其长度/宽度.在std :: minmax函数中使用'auto'关键字时,我看到奇怪的输出.为了进行比较,我还声明了第二个变量,在其中明确声明了类型(即dim vs dim1). namespace gtl = boost::polyg
..
我正在从C ++ 98迈向C ++ 11,并且已经熟悉auto关键字.我想知道为什么如果编译器能够自动推断类型,我们为什么需要显式声明auto.我知道C ++是一种强类型的语言,这是一条规则,但是如果不显式声明变量auto,是否不可能实现相同的结果? 解决方案 删除显式auto会破坏语言: 例如 int main() { int n; { aut
..
如何将自动推论应用于班级成员?例如,以下代码 struct A { auto foo(); // foo is defined in another file }; int main() { A a; a.foo(); } 其中foo具有返回类型auto的结果导致以下错误: error: function 'foo' with deduced return typ
..
在斯科特·迈耶(Scott Meyer)的书中auto timeFuncInvocation = [](auto&& func, auto&&... params) { // start timer; std::forward(func)( std::forward(params)... ); // stop timer and
..
我已经使用C++14在GCC中编译了以下程序. #include using namespace std; auto func(int i); int main() { auto ret = func(5); return 0; } auto func(int i) { if (i == 1) return i;
..
我一直在玩auto,我注意到在大多数情况下,您可以用auto替换变量定义,然后分配类型. 在下面的代码中,w和x是等效的(默认初始化为int,但不允许进入潜在的副本中).有没有办法声明z使其具有与y相同的类型? int w{}; auto x = int{}; int y[5]; auto z = int[5]; 解决方案 TL; DR template
..
如果我有一个功能: Foo& Bar() { return /// do something to create a non-temp Foo here and return a reference to it } 这是为什么: auto x = Bar(); /// probably calls copy ctor - haven't checked 与此不同吗?
..
创建局部变量时,使用(const) auto&或auto是否正确? 例如: SomeClass object; const auto result = object.SomeMethod(); 或const auto& result = object.SomeMethod(); 其中SomeMethod()返回非原始值-可能是另一个用户定义的类型. 我的理解是const au
..
(这是") 请考虑以下情形-我要将一个函数f传递给另一个函数invoke_log_return,该函数将: 调用f; 打印一些内容到 stdout ; 返回f的结果,避免不必要的复制/移动并允许复制省略. 请注意,如果抛出f,则不应将任何内容打印到 stdout .这是我到目前为止的内容: template decltype(auto)
..