gpt4 book ai didi

c++ - 对隐式模板实例化感到困惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:54 25 4
gpt4 key购买 nike

这是 C++03 标准 §14.7.1p5 中的声明:

If the overload resolution process can determine the correct function to call without instantiating a class template definition, it is unspecified whether that instantiation actually takes place. [Example:

template <class T> struct S {
operator int();
};

void f(int);
void f(S<int>&);
void f(S<float>);

void g(S<int>& sr) {
f(sr); // instantiation of S<int> allowed but not required
// instantiation of S<float> allowed but not required
};

end example]

我无法理解这一点。它有未定义的行为吗?

我找到了另一个 similar problem ,我也不明白。那里解释说正确的行为是未定义的,但这意味着什么?

在这里: MSVC: Implicit Template Instantiation, though templated constructor not used

最佳答案

未指定意味着

  1. 是否实际实例化模板类取决于编译器
  2. 编译器设计者必须选择一些策略来处理这种情况,并且
  3. 编译器设计者无需记录他们的选择。

无论如何,这是正确的行为,不同于未定义的行为,后者是错误的行为。参见 this related question详细解释。

关于c++ - 对隐式模板实例化感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3880683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com