auto 相关问题

`auto`关键字在C ++ 11中用于推导类型。当用于替换初始化变量声明中的类型名称时,该变量的类型与初始化程序相同。当用作返回类型时,返回类型被指定为尾随返回类型,或者从return-expression推导出。

可以在不提供参数的情况下基于函数进行类型推断吗?

有时,在您不想显式指定类型的情况下创建正确类型的变量非常有用,特别是当类型是复杂类型(例如 std::map)时 有时,在您不想显式指定类型的情况下创建正确类型的变量非常有用,特别是当类型是复杂类型时,例如std::map<std::string, std::tuple<int, SomeStructure>>(1)。这是几乎总是自动指南的核心。 对于初始化变量的情况,可以使用: auto a = 3.14159f; // float. auto a = function_returning_type(1, 2, 3); // whatever that function returns. 如果你不想初始化它,你可以使用decltype来定义它: int a; decltype(a) b; // integer float c(); decltype(c()) d; // float 如果您希望将类型基于某个函数返回的内容而不是基于已经存在的变量,那么最后一个特别方便。但是,如果该函数的唯一重载需要很多参数,则似乎需要您提供它们: int a(const char *, int, float); decltype(a("", 7, 4.2)) b; // okay decltype(a()) c; // not okay 第二个示例给出了类似的内容: error: too few arguments to function ‘int a(const char *, int, float)’ decltype(a()) c; ^ 尽管事实上在这种情况下不应该“需要”参数,因为编译器可以在没有参数的情况下确定参数。无论如何为其提供了许多重载,函数的返回类型都是相同的。 所以我的第一个问题是:我是否误解了这样做的必要性?换句话说,我需要提供参数是否有实际原因? 第二(这是真正的问题),有没有一种方法可以做到这一点不需要我提供这些人工参数? (1) 是的,我知道我可以做类似 using ShortType = std::map<std::string, std::tuple<int, SomeStructure>>; 的事情,但这并不总是我的代码。 无论为函数提供多少个重载,其返回类型都是相同的。 不,无论如何都不是。以下是完全有效的重载。 int getValue(float); float getValue(int);

回答 1 投票 0

使用返回函数类型声明未初始化的自动变量

我喜欢尽可能多地使用auto,但有一种情况到目前为止我还没有解决方案。 这种情况是我必须在范围之外声明变量,但在...中初始化它

回答 1 投票 0

如何克隆android自动源代码? android auto 开源吗?

我是aosp的新手。我正在尝试克隆 android auto 的源代码。 我想克隆谷歌提供的 android auto 源代码。 我还想确认一下 android auto 是否开源? 我们可以吗

回答 1 投票 0

decltype 和 auto 作为变量的占位符类型有什么区别?

据我了解, decltype 和 auto 都会尝试找出某物的类型。 如果我们定义: int foo () { 返回 34; } 那么这两个声明都是合法的: 自动 x = foo(); c...

回答 6 投票 0

为什么C++11中需要decltype? [重复]

我正在学习 C++ 11 中的 decltype。 auto 和 decltype 的功能似乎是重复的,我不明白为什么我们需要 decltype。 根据维基,它的主要用途是通用程序......

回答 3 投票 0

为什么这里不允许迭代集合和修改元素

在下面的代码中,我们无法使用非常量引用来迭代集合 s1。为什么? #包括 结构体{ 无符号整型 f; std::set s2; }; 结构体{ 布尔运算符()(

回答 1 投票 0

C++ 中强化的“auto”

有一次我意识到我希望能够编写这样的代码而不重复代码: 模板 std::ostream& 运算符<< (std::ostream& o, const

回答 1 投票 0

如何将数据从一个工作表提取到另一列包含特定日期的工作表?

我正在努力使用 Excel 电子表格,希望有人可以提供帮助。 它有两个工作表,“数据库”和“打印表” 数据库中有几列,A:A cont...

回答 1 投票 0

为什么我可以在 c++11 中使用推导的返回类型而不使用尾随返回类型?

我了解到自动推导返回类型是c++14的一个特性,就像下面一样 模板 自动发布(Func func, Args...args); 有人告诉我,如果我愿意我们...

回答 1 投票 0

为什么“自动”和显式引用变量声明的行为不同?

我有这样的事情: 酒吧类; 类 Foo() { 民众: Foo() : 酒吧(新酒吧()); Bar& GetBar() { return *bar.get(); } } 私人的: std::unique_ptr 栏; }; 无效主() {...

回答 3 投票 0

为什么自动变量在用字符串初始化时会推导为指针?

#包括 #包括 int main() { const char a[] = "你好世界"; const char * p = "你好世界"; 自动x =“你好世界”; ...

回答 3 投票 0

将多个 EC2 实例从 IMDSv1 转换到 IMDSv2

有没有一种方法可以更新一个帐户上的 100 个 EC2 实例,而不必在每个实例上使用带有 --instance-id 的修改实例元数据选项? 我环顾四周,心想肯定是……

回答 1 投票 0

我可以在cpp中使用模板或auto关键字来创建一个变量,我可以将其与std::cin一起使用以从用户那里获取值吗?

这行代码是错误的,无法编译,但我想知道是否可以修复它。 #包括 模板 自动获取值() { std::cout << "Enter an

回答 1 投票 0

用户退出后如何自动登录?

我正在为客户构建一个信息屏幕。有时,用户可能会被注销,例如更新我们的系统时。如何保证用户立即自动重新登录? ...

回答 1 投票 0

为什么将函数指针指向 `operator new` 在 C++14 中可以编译,但在 C++17 中却不能编译?

考虑以下代码(godbolt 链接): #包括 int main() { 自动 foo = 运算符 new; 无效* mem = foo(1); printf("%p", 内存); } 该代码在 GCC 上编译,...

回答 1 投票 0

google-services.json 用于 Google-play-services:ads - 我应该生成吗?

我在旧应用程序中使用 Google Play 服务(广告),更新库后遇到问题 自动点击(停留时间) 什么地方出了错: 任务 ':app:processLiteReleaseGoogleService... 执行失败...

回答 1 投票 0

Range-for-loops 和 std::vector<bool>

为什么这段代码有效 std::vector intVector(10); for(自动& i : intVector) std::cout << i; And this doesn't? std::vector boolVector(10); 对于(自动&我:

回答 3 投票 0

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

如果非静态数据成员在声明中被初始化,C++11 是否允许将它们声明为“auto”?例如: 结构S { 汽车 x = 5; // 代替 'int x = 5;',这绝对是...

回答 3 投票 0

为什么 std::integral auto&& 参数不适用于左值参数

我不确定为什么下面的代码不能编译: #包括 #包括 #包括 #包括 #包括 #包括 我不确定为什么下面的代码不能编译: #include <array> #include <algorithm> #include <type_traits> #include <concepts> #include <cstdio> #include <cwchar> template <typename T> concept Character = std::same_as< std::remove_cv_t<T>, char > || std::same_as< std::remove_cv_t<T>, signed char > || std::same_as< std::remove_cv_t<T>, unsigned char > || std::same_as< std::remove_cv_t<T>, wchar_t > || std::same_as< std::remove_cv_t<T>, char8_t > || std::same_as< std::remove_cv_t<T>, char16_t > || std::same_as< std::remove_cv_t<T>, char32_t >; template <std::size_t N> consteval auto create_character_array( std::integral auto&& fill_character ) noexcept { std::array<std::remove_cvref_t<decltype( fill_character )>, N> dashes { }; std::fill( std::begin( dashes ), std::end( dashes ), fill_character ); return dashes; } int main( ) { const char ch { '^' }; auto dashes { create_character_array<128>( ch ) }; dashes.back( ) = '\0'; std::fputs( std::data( dashes ), stdout ); } 我不确定,但由于某种原因,通用参考(auto&&)和概念std::integral似乎效果不佳。用我自己更精确的概念 std::integral 替换 Character 也无济于事。 出现以下错误: <source>: In function 'int main()': <source>:30:46: error: no matching function for call to 'create_character_array<128>(const char&)' 30 | auto dashes { create_character_array<128>( ch ) }; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~ <source>:19:16: note: candidate: 'template<long unsigned int N, class auto:16> requires integral<auto:16> consteval auto create_character_array(auto:16&&)' 19 | consteval auto create_character_array( std::integral auto&& fill_character ) noexcept | ^~~~~~~~~~~~~~~~~~~~~~ <source>:19:16: note: template argument deduction/substitution failed: <source>:19:16: note: constraints not satisfied In file included from /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/compare:37, from /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/array:38, from <source>:1: /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/concepts: In substitution of 'template<long unsigned int N, class auto:16> requires integral<auto:16> consteval auto create_character_array(auto:16&&) [with long unsigned int N = 128; auto:16 = const char&]': <source>:30:46: required from here /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/concepts:100:13: required for the satisfaction of 'integral<auto:16>' [with auto:16 = const char&] /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/concepts:100:24: note: the expression 'is_integral_v<_Tp> [with _Tp = const char&]' evaluated to 'false' 100 | concept integral = is_integral_v<_Tp>; | ^~~~~~~~~~~~~~~~~~ ASM generation compiler returned: 1 <source>: In function 'int main()': <source>:30:46: error: no matching function for call to 'create_character_array<128>(const char&)' 30 | auto dashes { create_character_array<128>( ch ) }; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~ <source>:19:16: note: candidate: 'template<long unsigned int N, class auto:16> requires integral<auto:16> consteval auto create_character_array(auto:16&&)' 19 | consteval auto create_character_array( std::integral auto&& fill_character ) noexcept | ^~~~~~~~~~~~~~~~~~~~~~ <source>:19:16: note: template argument deduction/substitution failed: <source>:19:16: note: constraints not satisfied In file included from /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/compare:37, from /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/array:38, from <source>:1: /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/concepts: In substitution of 'template<long unsigned int N, class auto:16> requires integral<auto:16> consteval auto create_character_array(auto:16&&) [with long unsigned int N = 128; auto:16 = const char&]': <source>:30:46: required from here /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/concepts:100:13: required for the satisfaction of 'integral<auto:16>' [with auto:16 = const char&] /opt/compiler-explorer/gcc-trunk-20230509/include/c++/14.0.0/concepts:100:24: note: the expression 'is_integral_v<_Tp> [with _Tp = const char&]' evaluated to 'false' 100 | concept integral = is_integral_v<_Tp>; | ^~~~~~~~~~~~~~~~~~ 当'^'作为参数传递时编译。然而ch使它失败。这是在将 std::integral 添加到函数定义之后发生的。没有它,代码编译。 万一这不是一个好的设计,我应该如何定义上述功能以使其尽可能通用?我希望它接受任何值类别。

回答 0 投票 0

Yii 2 注销 Yii 2 注销

我正在寻找一种在 30 秒或 1 分钟不活动后注销用户的方法。 我是 Yii 2 的新手。请帮助我。 提前致谢。

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.