gpt4 book ai didi

c++ - 即使在 Visual C++ 编译器中,在模板中传递 "const char"参数也会遇到一些问题 2013 年 11 月 CTP

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:13 25 4
gpt4 key购买 nike

大家好,新年快乐

即使在 Visual C++ 编译器 2013 年 11 月 CTP 的最新版本中,我在模板中传递“const char”参数时也遇到了一些麻烦!这是一个简单的代码,在最新的 Visual C++ 编译器中不起作用,但可以使用带有选项“std=c++x0”的“g++”,

#include <stdlib.h>


template<char _parameterChar>
class A
{
char varChar;
public:
A(){ varChar = _parameterChar; }
~A(){}
};


int main(int argc, char* argv[])
{
const char a_1 = 'a';
const char a_2 = "abcdef"[0]; // This instruction gets a constant 'a'.


A<'a'> first_A; // compile ok!
A<a_1> second_A; // compile ok!
A<a_2> third_A; // ---> This not compiles!! Why not ?!?!?!

return 0;
}

Visual C++ 编译器给出了该错误,

error C2971: 'A' : template parameter '_parameterChar' : 'a_2' : a local variable cannot be used as a non-type argument

我认为这是编译器的限制,因为“abcdef”[0],你可以在编译时得到 const char 'a',不是吗?

最佳答案

简单的答案是,标准表明 "abcdef"[0] 不是常量表达式。从逻辑上讲,编译器可能会解决它,但标准并未将其列在允许的操作中。表达式的计算涉及左值到右值的转换,并且只允许非常有限数量的左值到右值转换。 (实际上,它在 C++11 中可能是合法的。但如果是这种情况,它将是一个新功能,并且可能不会由您的编译器实现。)

关于c++ - 即使在 Visual C++ 编译器中,在模板中传递 "const char"参数也会遇到一些问题 2013 年 11 月 CTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20968026/

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