是否可以在 C++ 的 for 循环的初始化体中声明两个不同类型的变量?
例如:
for(int i=0,j=0 ...
定义两个整数。我可以在初始化正文中定义一个 int
和一个 char
吗?这将如何完成?
原文由 Nathan Osman 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否可以在 C++ 的 for 循环的初始化体中声明两个不同类型的变量?
例如:
for(int i=0,j=0 ...
定义两个整数。我可以在初始化正文中定义一个 int
和一个 char
吗?这将如何完成?
原文由 Nathan Osman 发布,翻译遵循 CC BY-SA 4.0 许可协议
有关嵌套多个 for 循环的另一种方法,请参阅“ 有没有办法在 for 循环中定义两种类型的变量? ”。与 Georg 的“结构技巧”相比,另一种方式的优势在于它 (1) 允许您混合使用静态和非静态局部变量,以及 (2) 它允许您拥有不可复制的变量。缺点是它的可读性要差得多,而且效率可能较低。
原文由 tgoodhart 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答2.9k 阅读✓ 已解决
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
C++17 : 是的! 您应该使用 结构化绑定声明。自 gcc-7 和 clang-4.0 ( clang live example ) 以来,gcc 和 clang 就支持该语法。这允许我们像这样解包一个元组:
以上将为您提供:
int i
设置为1
double f
设置为1.0
std::string s
设置为"ab"
确保
#include <tuple>
进行此类声明。如果你想命名一个类型,你可以指定
tuple
中的确切类型,就像我用std::string
一样全部输入。例如:一个具体的应用是遍历一个映射,获取键和值,
在此处 查看实时示例
C++14 :您可以与 C++11(如下)相同,添加基于类型的
std::get
。因此,在下面的示例中,您可以使用 --- 代替std::get<0>(t)
std::get<int>(t)
。C++11 :
std::make_pair
允许你这样做,以及std::make_tuple
用于两个以上的对象。std::make_pair
将返回std::pair
中的两个参数。可以使用.first
和.second
访问这些元素。对于两个以上的对象,您需要使用
std::tuple
std::make_tuple
是一个可变参数模板,它将构造一个包含任意数量参数的元组(当然有一些技术限制)。元素可以通过索引访问std::get<INDEX>(tuple_object)
在 for 循环体中,您可以轻松地为对象设置别名,尽管您仍然需要使用
.first
或std::get
用于 for 循环条件和更新表达式C++98 和 C++03 您可以显式命名
std::pair
的类型。但是,没有标准的方法可以将其推广到两种以上的类型: