gpt4 book ai didi

c++ - 为什么局部变量实例化失败但静态实例化失败?

转载 作者:太空狗 更新时间:2023-10-29 19:43:10 26 4
gpt4 key购买 nike

我正在尝试找到一种简单的方法(使用 C++11 之前的版本,即没有 decltype )来记录模板对类型的正常工作的要求。也许有更好的方法来做到这一点。但是,这是我的问题:

#include <iostream>

template <typename T> struct Foo {
static const int test = sizeof(T::size);
};

template <typename T> struct DetectAndError {
DetectAndError() { int test = sizeof(T::size); }
};

struct Bar {};

int main() {
Foo<Bar> x; // NO ERROR ? :/
// std::cout << x.test << std::endl; // ERROR :)
// DetectAndError<Bar> y; // ERROR :)
}

为什么是Foo<Bar> x;不是错误?对于其他行,我得到了我想要的:

error: 'size' is not a member of 'Bar' 

最佳答案

这是因为标准要求 test 只有在使用时才会被实例化。模板类的成员变量/成员函数/静态成员在没有被使用的情况下不会被实例化。

在您的情况下,当您尝试执行 x.test 时,编译器会尝试查找 test,但随后无法将其作为 x::size 丢失。

该行为几乎被接受且普遍,当然符合标准。

关于c++ - 为什么局部变量实例化失败但静态实例化失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40377100/

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