理解歧义解决的示例代码
Understanding example code of ambiguity resolution
以下代码引用自c++ 11标准N3485节6.8.3关于歧义解决的代码:
struct T1 {
T1 operator()(int x)
{
return T1(x);
}
int operator=(int x)
{
return x;
}
T1(int) { }
};
struct T2
{
T2(int){ }
};
int a, (*(*b)(T2))(int), c, d;
void f() {
// disambiguation requires this to be parsed as a declaration:
T1(a) = 3,
T2(4), // T2 will be declared as
(*(*b)(T2(c)))(int(d)); // a variable of type T1
// but this will not allow
// the last part of the
// declaration to parse
// properly since it depends
// on T2 being a type-name
}
我不知道如何解析这个代码:
T1(a) = 3,
T2(4),
(*(*b)(T2(c)))(int(d));
在这种情况下是什么意思?你能给我解释一下吗?这个示例代码对我来说似乎相当模糊。
这意味着当某些东西可以被解析为声明时,它就应该被解析为声明。在本例中,
T1(a) = 3
是一个有效的声明,它声明了一个T1
类型的对象a
,从值3
初始化(而不是构造一个从a
初始化的T1
类型的临时对象,然后将3
赋值给该临时对象)。这实际上相当于以下内容:
T1 a = 3
现在剩下的声明符:
T2(4)
这里的T2
是从值4
初始化的T1
类型对象的名称,如:
T1 a = 3, T2(4)
因此,T2
是对象的名称,而不是类型,与下面的情况类似:
int x = 42, y(1729)
其中x
是由42
初始化的int
类型对象,y
是由值1729
初始化的另一个int
类型对象。
则不能正确解析最后一个声明符,因为T2
不是类型的名称,而是对象的名称。
相关文章:
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 在java中解决这段代码时面临循环中的问题
- visual c++,如何获取解决方案目录中的代码
- 为什么这段代码不起作用,我该如何解决?
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 从代码力解决 dp 问题 - 剪彩
- 卡在代码中,同时在代码厨师中解决可能会烹饪
- C++ LeetCode #377 的 DP 解决方案中,此代码是否有错误?
- 给定使用 Bitmask 的解决方案,我无法理解代码中标记的条件评估
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 如何在代码问题中解决此问题 代码强制
- 我最近更改了编译器路径以运行 c++ 代码,但现在我无法运行任何 python 代码。我该如何解决这个问题?
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 如何解决以下代码中的函数重载歧义
- 使用多态性解决代码重复问题
- 寻找一个代码解决方案来导入.mdb表到另一个.mdb表
- 如何用c++代码解决这个问题