C++ 制作';常数';与类型特征的结果一起工作 intmain(intargc,char*argv[]){ 常数i=10; 使用Type=typename std::conditional::Type; const Type r=i;//这个“const”似乎没有任何效果。 std::cout
在第一个示例中,C++ 制作';常数';与类型特征的结果一起工作 intmain(intargc,char*argv[]){ 常数i=10; 使用Type=typename std::conditional::Type; const Type r=i;//这个“const”似乎没有任何效果。 std::cout,c++,c++11,std,typetraits,C++,C++11,Std,Typetraits,在第一个示例中,const无效,因为它绑定到了错误的类型:在引用之后,而不是之前。有关可能有帮助的一些详细信息,请参阅,但基本上: int main(int argc, char* argv[]) { const int i = 10; using Type = typename std::conditional<false, const int, const int&>::type; Type r = i; std::cout << r <
const
无效,因为它绑定到了错误的类型:在引用之后,而不是之前。有关可能有帮助的一些详细信息,请参阅,但基本上:
int main(int argc, char* argv[]) {
const int i = 10;
using Type = typename std::conditional<false, const int, const int&>::type;
Type r = i;
std::cout << r << std::endl;
}
当然,所有引用都是不可变的(无法重置),所以最后一个引用有点无用。之所以会出现这种情况,是因为在引用应用于类型之后应用了const
,这就给出了我编写的第三个示例,而不是第一个或第二个示例。您也可以更改
const int& // reference to immutable int
int const& // reference to immutable int
int& const // immutable reference to int
到
让它工作
当你说
int i = 10;
typedef int& Type;
当你说
int i = 10;
typedef int& Type;
你说的是
const Type r = i;
这和我的想法不一样
int& const r = i;
John Zwinck在他的回答中解释了它们之间的差异。(尽管这样键入
int&const
是无效的。只有当const
应用于恰好是引用类型的typedef或模板参数时,才允许这样做。)
int& const r = i;
const int& r = i;