任何人都可以从ISON3242§3.2第二点 解释这一说法
除非是未评估的操作数(第5条)或其子表达式,否则可能会对表达式进行求值.名称显示为潜在评估表达式的变量或非重载函数是odr使用的,除非它是满足出现在常量表达式(5.19)中的要求的对象,并且左值到右值转换(4.1)是立即申请.如果它看起来像一个潜在评估的表达式(包括作为非静态成员函数(9.3.1)的主体中的隐式转换的结果),则使用odr.
ISO标准2003:说
表达式可能被评估,除非它出现在需要整数常量表达式的地方(见5.19),是sizeof运算符的操作数(5.3.3),或者是typeid运算符的操作数,并且表达式没有指定左值多态类型(5.2.8).如果对象或非重载函数的名称出现在可能已评估的表达式中,则使用该函数.
这些陈述的实际差异是什么?
任何人都可以借助示例/程序来解释这一点吗?
n3035说:(2010-02-16)
变量由对象的声明引入.变量的名称表示对象.
n3090说:(2010-03-29)
通过声明除非静态数据成员或对象之外的引用引入变量.变量的名称表示引用或对象.
n3242说:(2011-02-28)
通过声明除非静态数据成员或对象之外的引用引入变量.变量的名称表示引用或对象.
任何人都可以在一个程序的帮助下解释这些差异(或者说是什么)
这是ISO标准C++的声明
我看到了这个链接:
但这不是(完全意义)我的问题......
任何人都可以从ISON3242§3.2第二点解释这一说法
类的非放置分配或释放函数由该类的构造函数的定义使用.类的非放置释放函数通过该类的析构函数的定义来使用,或者通过在虚拟析构函数的定义点处的查找来选择(12.4).26类的复制赋值函数由12.8中指定的另一个类的隐式定义的复制赋值函数使用.类的移动赋值函数由12.8中指定的另一个类的隐式定义的移动赋值函数使用.
ISO标准2003说:
类的复制赋值函数由12.8中指定的另一个类的隐式定义的复制赋值函数使用.
这些陈述的实际差异是什么?
任何人都可以用示例/程序来解释上面添加的内容......?
我知道移动构造函数/移动分配函数 - >添加了新功能.
任何人都可以借助示例/程序来解释这一点吗?
请.............
请回答
任何人都可以从ISON3242§3.2第二点解释这一说法
如果从可能被评估的表达式引用时通过重载决策选择了一组候选函数的成员,则使用该函数.[注意:这包括对命名函数(5.2.2)的调用,运算符重载(第13节),用户定义的转换(12.3.2),放置新的分配函数(5.3.4),以及非默认初始化(8.5).
ISO标准2003:说
如果从可能已评估的表达式引用时通过重载决策选择了重载函数,则使用该函数.[注意:这包括对命名函数(5.2.2)的调用,运算符重载(第13节),用户定义的转换(12.3.2),放置新的分配函数(5.3.4),以及非默认初始化(8.5).
这些陈述的实际差异是什么?
任何人都可以借助示例/程序来解释这一点吗?
任何人都可以从ISON3242§3.2第4点解释这一说法
与ISO Standard 2003相比,n3242的附加部分:
4如果以需要类类型完整的方式使用类,则在翻译单元中需要一个类的正确定义.在以下情况下,类类型
T必须完整:
T声明类型的非静态类数据成员(9.2),或T用作new-expression中的对象类型或数组元素类型- 类型
T是alignof表达式的主语(5.3.6),或- 异常声明具有类型
T,引用T或指向T
任何人都可以解释当前C++ 0x标准草案的这一段吗?
在这些陈述中添加这个的实际含义是什么?
任何人都可以借助示例/程序来解释这一点吗?
来自ISO标准草案:§ 3.0/9:
n3234说:
在多个翻译单元中使用的名称可能会在这些翻译单元中引用相同的实体,具体取决于每个翻译单元中指定的名称的链接(3.5).
有人可以用一个例子解释这一点吗?
这句话到底在说什么?任何人都可以用程序来证明这一点吗?
这是错的吗?为什么?我可以知道标准说的是什么吗?
namespace N{
namespace N1{
namespace N2{
struct A{
struct B{
void fun();
};//B
}; //A
} //n2
}//n1
namespace N3{
void N1::N2::A::B::fun(){} //error
}//n3
}//n
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以知道为什么会失败吗?