gpt4 book ai didi

c++ - 为什么不允许全局的 struct/union 子项作为模板引用参数 - 但全局变量本身?

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

我尝试使用模板参数来引用全局变量的子元素 - 它确实适用于全局变量但不适用于全局变量的子元素 - 为什么在编译时无法解析子元素的位置?

typedef unsigned char byte_t;
typedef unsigned short word_t;

struct byte_reg_t
{
byte_t low;
byte_t high;
};

union word_reg_t
{
word_t value;
byte_reg_t part;
};

word_t rax;
byte_t rah;
word_reg_t r16;
byte_reg_t r8;

template<typename ValueType, ValueType& Ref>
ValueType ret_ref()
{
return Ref;
}

int main()
{
word_t x = ret_ref<word_t,rax>();
byte_t h = ret_ref<byte_t,rah>();
//word_t sx = ret_ref<word_t,r16.value>(); // compile error
//byte_t sh = ret_ref<byte_t,r16.part.low>(); // compile error
//byte_t sh2 = ret_ref<byte_t,r8.low>(); // compile error

return 0;
}

VS2010 和 clang 3.1 编译器不允许//编译错误行

感谢任何清晰的描述,因为我没有看到编译器这种行为的任何技术原因

最佳答案

答案就在 C++ 标准中。抱歉已经过时了,但我的版本(ISO/IEC 14882,第 2 版,2003 年)说(第 246 页):

§14.3.2 Template non-type arguments

   [..]

3 [Note: Addresses of array elements and names or addresses of non-static class members are not acceptable template-arguments.[..]]

关于c++ - 为什么不允许全局的 struct/union 子项作为模板引用参数 - 但全局变量本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222519/

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