ISO标准3.1美元声明:第1点
n3242说:
声明(第7条)可以 在a中引入一个或多个名字 翻译单位或重新声明的名称 由先前的声明引入。 如果是,则声明指定 解释和这些属性 名。声明也可能有 效果包括: - 静态断言(第7条), - 控制模板实例化(14.7.2), - 使用属性(第7条),和 - 没有(在空声明的情况下)。
ISO 2003 DOC说:
声明(第7条)介绍 姓名到翻译单位或
重新声明的名字由 以前的声明。声明
指定解释和 这些名字的属性。
可以解释有什么区别。
他们说“声明也可能产生影响,包括:”......任何人都可以解释这些效果在编程方面是什么
请用编程方式解释这些效果(使用示例程序)?
答案 0 :(得分:3)
我认为只是一些新功能改变了声明的工作方式 - 在细节上。
例如,这不仅会引入一些名称,还会影响代码的编译。
struct A
{
int x;
};
struct B
{
A a;
static_assert(sizeof(a) > 10, "Wrong member size");
};
我们还有空声明(我相信它只能在一个类中使用):
struct C
{
void f()
{ }; // Semicolon here is allowed, but is an empty declaration
};
空声明是一个声明,不引入一个名称(因为它是空的)。
我想:“影响模板实例化”,我认为:
template<class T>
class X
{
// some members
};
extern template class X<int>;
extern template class X<char>;
告诉编译器X<int>
和X<char>
将在其他地方实例化,而不必在此处生成。