Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模板:名称解析-->;有人能为这句话再举几个例子吗? 这是ISO C++标准14.6/7:< /P>的陈述。_C++_Templates - Fatal编程技术网

模板:名称解析-->;有人能为这句话再举几个例子吗? 这是ISO C++标准14.6/7:< /P>的陈述。

模板:名称解析-->;有人能为这句话再举几个例子吗? 这是ISO C++标准14.6/7:< /P>的陈述。,c++,templates,C++,Templates,知道哪些名称是类型名称 允许每个模板的语法 要检查的定义。不 应针对以下情况发布诊断: 模板定义,其中 可以生成有效的专门化。 如果没有有效的专门化,则可以 为模板定义生成, 而这个模板不是 实例化的模板定义 是病态的,没有诊断 必修的。如果某个类型用于 非依赖名称在处不完整 创建模板的点 已定义,但在点处已完成 实例化完成时,以及 如果该类型的完整性 影响程序是否正常运行 格式正确或影响语义 在这个节目中,这个节目是 畸形的;无需诊断。 [注意:如果模板是 实例化后,将诊断错误 根据其他规则

知道哪些名称是类型名称 允许每个模板的语法
要检查的定义。不 应针对以下情况发布诊断: 模板定义,其中 可以生成有效的专门化。 如果没有有效的专门化,则可以 为模板定义生成, 而这个模板不是 实例化的模板定义 是病态的,没有诊断 必修的。如果某个类型用于 非依赖名称在处不完整 创建模板的点 已定义,但在点处已完成
实例化完成时,以及 如果该类型的完整性
影响程序是否正常运行 格式正确或影响语义
在这个节目中,这个节目是 畸形的;无需诊断。 [注意:如果模板是 实例化后,将诊断错误 根据其他规则 这是标准。这些 诊断错误是一种品质 执行问题的解决办法。]

例如:

    int j;
    template<class T> class X {
               // ...
               void f(T t, int i, char* p)
               {
                                         // diagnosed if X::f is instantiated
                           t = i;
                                         // and the assignment to t is an error
                                         // may be diagnosed even if X::f is
                           p = i;
                                         // not instantiated
                                         // may be diagnosed even if X::f is
                           p = j;
                                         // not instantiated
               }
               void g(T t) {
                                         // may be diagnosed even if X::g is
                           +;
                                         // not instantiated
               }
    };
intj;
模板类X{
// ...
空f(T T,int i,char*p)
{
//如果实例化了X::f,则进行诊断
t=i;
//对t的赋值是一个错误
//即使X::f为
p=i;
//未实例化
//即使X::f为
p=j;
//未实例化
}
空隙g(T){
//即使X::g为
+;
//未实例化
}
};
(大部分为失败案例) 有人能为这句话再举几个例子吗..像这样..请?

void f()“我是一个格式错误的在T上参数化的‘模板定义’”;
void f<T>() "I am an ill-formed 'template definition' parameterized on T.";
允许实现将上述内容作为语法格式错误的模板定义接受,并且在实际实例化之前不会对其进行诊断。希望这能解释。(当然我是在开玩笑,但我并不是完全不认真。它显示了上面引用的文本的一个缺陷:没有可以包含“+;”的“模板定义”)

关于不完整类型的另一件事是,以下内容格式不正确,但不需要诊断

struct foo;

template<typename T>
void f() { foo x; }
  // foo is incomplete here

struct foo { };
  // foo is complete here

int main() { f<int>(); }
structfoo;
模板
void f(){foo x;}
//福在这里是不完整的
结构foo{};
//福在这里完成了
int main(){f();}
标准中的“无需诊断”规则允许实现以其认为合适的任何方式进行操作(这使得任何违反无需诊断的规则的程序都具有有效的未定义行为)。因此,你引用的文本真的是(IMHO)糟糕的律师


请参阅和(以数字火星闻名)

我认为您关于所有这些“检查编译器标准符合性”的整个方法完全是错误的。。。