草庐IT

c++ - 让模板通过指定 bitesize 在 char/short/int 之间进行选择?

我有这样的东西:templatestructbin{private:public:struct{int_value:SIZE;};}是否可以根据SIZE更改_value的数据类型?如果SIZE=8且 最佳答案 这不是特别优雅,但是:templatestructbest_integer_type{typedefbest_integer_type::typetype;};templatestructbest_integer_type{typedefchartype;};templatestructbest_integer_type{ty

c++ - C++语句 'delete [] Q;'的Big-O是O(1)还是O(n)?

标题是不言自明的。很简单的问题。我认为这是O(n),但我想在明天的期末考试前验证一下。 最佳答案 简短的回答是……视情况而定。如果Q是指向具有析构函数的对象数组的指针,则delete[]Q将需要调用所有这些析构函数。这将调用O(n)个析构函数,其中n是数组中元素的数量。另一方面,如果Q指向没有析构函数的对象数组(例如,int或简单的struct),那么就不需要调用析构函数,这只需要O(1)的时间。现在请注意,这些析构函数不必每次都在O(1)时间内运行。例如,如果对象是std::vector对象,那么每个析构函数都必须依次触发更多的释

c++ - "int *a = new int"和 "int *a = new int()"有什么区别?

这个问题在这里已经有了答案:Dotheparenthesesafterthetypenamemakeadifferencewithnew?(7个答案)关闭9年前。下面两行有什么区别?int*a=newint;int*a=newint();

c++ - `class template Example<int>;` 语句对 C++11 意味着什么?

有人提到我"ExplicitTemplateInstantiation"在cplusplus.com,它给出了以下示例:templateclassExample{public:Example(Ttest){_data=test;}voidsetTest(Ttest){_data=T;}private:T_data;};classtemplateExample;classtemplateExample;classtemplateExample;除了在我看来是一个遗漏错误之外,试图将类型分配给成员变量--_data=T而不是我认为应该是_data=test--我不明白的是最后3行究竟声明或

c++ - C++ 中函数参数作为 (const int &) 和 (int & a) 的区别

我知道如果你写voidfunction_name(int&a),那么函数将不会对作为参数传递的变量进行本地复制。在文献中也遇到过你应该写voidfunction_name(constint&a)以便编译器说我不希望作为参数传递的变量被复制。所以我的问题是:这两种情况有什么区别(除了“const”确保传递的变量不会被函数更改!!!)??? 最佳答案 当你不需要写的时候,你应该在签名中使用const。将const添加到签名有两个作用:它告诉编译器您希望它检查并保证您不会在函数内部更改该参数。第二个效果是使外部代码能够使用您的函数传递对象

c++ - 为什么 boost::is_same<int const&, boost::add_const<int &>::value 等于 false?

我正在处理"C++TemplateMetaprogramming"byAbrahams&Gurtovoy“这实际上不在第二章中,而是我在做第一个练习(2.10、2.0)时尝试过的,这让我很困惑:#include#includestd::stringdisplay(boolb){return(b?"true":"false");}intmain(){usingnamespacestd;cout::type>::value)输出为“假”。但是,如果我删除引用,即“intconst”和“int”。输出为“真”。 最佳答案 如果你用指针尝试

c++ - 我什么时候应该使用 vector<int>::size_type 而不是 size_t?

在thisquestion我看到以下内容:for(vector::size_typeix=0;ix!=ivec.size();++ix){ivec[ix]=0;}我明白为什么int这里没有使用,但为什么不直接使用size_t?什么情况下应该用vector::size_type而不是size_t? 最佳答案 初级使用时间size_type在模板中。虽然std::vector::size_type通常是size_t,some_other_container::size_type可能是其他类型1。允许用户添加到std的少数内容之一命名空间

c++ - 关于 "int const *p"和 "const int *p "

#includeusingnamespacestd;intmain(intargc,char*argv[]){inti1=0;inti2=10;constint*p=&i1;intconst*p2=&i1;constintconst*p3=&i1;p=&i2;p2=&i2;p3=&i2;cout代码可以用VC6.0和VC2010编译。但我有以下问题:constint*p=&i1;意思是“p”点不能修改,但是p不能修改,对吗?所以p=&i2;这条线可以遵守,是吗?这一行:intconst*p2=&i1;在我看来,这意味着p2不能修改,而p2点可以更改,对吗?为什么p2=&i2;可以编译吗

c++ - 将 int 转换为 float : how it is done

我刚接触C语言,想请教一个问题。此处的整数i转换为float,然后f(以某种方式)成功表示5.0:inti=5;floatf=i;//Somethinghappenedhere...但是如果我们尝试这种方法:inti=5;floatf=*(float*)&i;f不会得到5.0,因为它以“float方式”解释存储在i中的位。那么编译器在第一种情况下实际上做了什么魔术呢?这似乎是一项相当费力的工作......有人可以具体说明吗?谢谢。 最佳答案 这是一项费力的工作,但任何支持float的CPU都会提供执行此操作的指令。如果您必须自己将2

c++ - 如果函数返回一个 int,是否可以将 int 分配给它?

如果一个函数返回一个int,它可以被赋值一个int值吗?我认为为函数赋值没有多大意义。intf(){}f()=1;我注意到,如果函数返回对int的引用,则没问题。它仅限于int吗?其他类型呢?或任何其他规则?int&f(){}f()=1; 最佳答案 第一个函数返回一个整数值,它是一个r-value。一般来说,您不能分配给r值。第二个f()返回对整数的引用,它是一个左值-因此您可以分配给它。inta=4,b=5;int&f(){returna;}...f()=6;//ais6now注意:你没有给函数赋值,你只是给它的返回值赋值。请注意