gpt4 book ai didi

c++ - 为什么 boost::is_same::value 等于 false?

转载 作者:可可西里 更新时间:2023-11-01 17:09:21 27 4
gpt4 key购买 nike

我正在处理 "C++ Template Metaprogramming" by Abrahams & Gurtovoy “这实际上不在第二章中,而是我在做第一个练习(2.10、2.0)时尝试过的,这让我很困惑:

#include <iostream>
#include <boost/type_traits.hpp>

std::string display(bool b)
{
return (b ? "true" : "false");
}

int main()
{
using namespace std;

cout << display(boost::is_same<int const&, boost::add_const<int &>::type >::value) << "\n";

return 0;
}

输出为“假”。但是,如果我删除引用,即“int const”和“int”。输出为“真”。

最佳答案

如果你用指针尝试过同样的事情,如

boost::is_same<int const *, boost::add_const<int *>::type>::value

你会发现它也是错误的,因为 boost::add_const<int *>::type生成 int *const类型,这显然与int const *不一样.

基本上相同的事情发生在引用上,即 boost::add_const<int &>::type是试图生成 int &const .正式地,输入 int &const在 C++ 中是非法的 - cv 限定不能应用于引用本身。所以,boost::add_const在这种情况下被设计为空操作,这意味着 boost::add_const<int &>::type生成 int &再次。

关于c++ - 为什么 boost::is_same<int const&, boost::add_const<int &>::value 等于 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217453/

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