Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么boost::是相同的<;int const&;,boost::添加常量<;国际及>;::值等于假?_C++_Boost_Metaprogramming - Fatal编程技术网

C++ 为什么boost::是相同的<;int const&;,boost::添加常量<;国际及>;::值等于假?

C++ 为什么boost::是相同的<;int const&;,boost::添加常量<;国际及>;::值等于假?,c++,boost,metaprogramming,C++,Boost,Metaprogramming,“我正在努力” 这实际上不在第二章中,而是我在进行第一个练习(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

“我正在努力” 这实际上不在第二章中,而是我在进行第一个练习(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;
}
#包括
#包括
标准::字符串显示(布尔b)
{
返回(b?“真”:“假”);
}
int main()
{
使用名称空间std;

cout不能向引用中添加常量,这将是
int&const
,这是不可能的


与typedef一样,添加限定符不是文本替换,而是对整个类型有效的操作。

如果您对指针尝试了相同的操作,如

boost::is_same<int const *, boost::add_const<int *>::type>::value
boost::值是否相同
您会发现它也是错误的,因为
boost::add_const::type
生成
int*const
type,这显然与
int const*
不同


基本上是相同的事情发生在引用,即<代码> Boo::Addioconst::类型< /COD>是试图生成<代码> int和const 。形式上,类型<代码> int和const <代码>在C++中是非法的。hat

boost::add_const::type
再次生成
int&

含义是(如果不清楚)正如官方文档的示例所示,
boost::add_const::type
仍然是
int&
。事实上,
int&const
是非法的。如果允许的话,这将是多余的,因为引用已经隐式常量了。顺便说一句,您可以通过设置
std>来避免
显示
函数::我现在能得到它吗。我以为add_const会给我int const&但它试图在另一边添加const,谢谢