草庐IT

c++ - 如果没有必要,是否应该使用无符号整数?

如果不需要额外的值范围,是否应该将变量声明为无符号整数?例如,在for循环中声明变量时,如果您知道它不会是负数,这有关系吗?一个比另一个快吗?像在C++中一样声明unsignedint是不是很糟糕?重申一下,是否应该这样做即使不需要额外的范围?我听说应该避免使用它们,因为它们会引起混淆(IIRC这就是Java没有它们的原因)。 最佳答案 使用uints的原因是它为编译器提供了更广泛的优化。例如,如果它知道x是正数,它可以用'x'替换'abs(x)'的实例。它还开辟了各种仅适用于正数的按位“强度减少”。如果您总是将一个int乘以/除以

C++ 方法调用和类型范围解析歧义

我希望标题确实描述了我想问的......我写了一段代码,用gcc编译并按我的预期工作。但是,它不能用llvm编译,并且用icc编译时代码执行不同!这是一个问题的例子:#includeusingstd::cout;usingstd::endl;classA{public:virtualvoidfoo(){coutbase::foo();}gcc输出:A::foo()icc输出:B::foo()有人能解释一下标准对这个案例的看法吗? 最佳答案 来自C++11,§3.4.5/4:Iftheid-expressioninaclassmemb

C++ 方法调用和类型范围解析歧义

我希望标题确实描述了我想问的......我写了一段代码,用gcc编译并按我的预期工作。但是,它不能用llvm编译,并且用icc编译时代码执行不同!这是一个问题的例子:#includeusingstd::cout;usingstd::endl;classA{public:virtualvoidfoo(){coutbase::foo();}gcc输出:A::foo()icc输出:B::foo()有人能解释一下标准对这个案例的看法吗? 最佳答案 来自C++11,§3.4.5/4:Iftheid-expressioninaclassmemb

c++ - 引用类型可以用作 STL 映射中的键类型吗

我可以构造一个std::map,其中键类型是引用类型,例如Foo&如果没有,为什么不呢? 最佳答案 根据C++标准23.1.2/7,key_type应该是可分配的。引用类型不是。 关于c++-引用类型可以用作STL映射中的键类型吗,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1796046/

c++ - 引用类型可以用作 STL 映射中的键类型吗

我可以构造一个std::map,其中键类型是引用类型,例如Foo&如果没有,为什么不呢? 最佳答案 根据C++标准23.1.2/7,key_type应该是可分配的。引用类型不是。 关于c++-引用类型可以用作STL映射中的键类型吗,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1796046/

c++ - 将大数字类型转换为较小类型

我环顾四周,找不到类似的问题,如果以前有人问过,请道歉。我只是在玩类型和数字,我想知道是否可以保证以下行为。如果我将2个变量声明为unsignedcharBIT_8=0;unsignedshortintBIT_16=0xFF01;然后执行以下操作(暂时忽略C样式转换,除非这会影响它?)cout>8;cout我得到了输出BIT_16:65281BIT_8:0BIT_8after:1BIT_8aftershift:255如果我将16位类型转换为8位类型,是否保证会丢失前导字节?还是未定义,上面的结果是运气? 最佳答案 Isitguara

c++ - 将大数字类型转换为较小类型

我环顾四周,找不到类似的问题,如果以前有人问过,请道歉。我只是在玩类型和数字,我想知道是否可以保证以下行为。如果我将2个变量声明为unsignedcharBIT_8=0;unsignedshortintBIT_16=0xFF01;然后执行以下操作(暂时忽略C样式转换,除非这会影响它?)cout>8;cout我得到了输出BIT_16:65281BIT_8:0BIT_8after:1BIT_8aftershift:255如果我将16位类型转换为8位类型,是否保证会丢失前导字节?还是未定义,上面的结果是运气? 最佳答案 Isitguara

c++ - int & 是什么意思

一个C++问题,我知道int*foo(void)foo将返回一个指向int类型的指针怎么样int&foo(void)它返回什么?非常感谢! 最佳答案 它返回一个对int的reference。引用类似于指针,但有一些重要的区别。我建议您阅读指针、引用、对象和原始数据类型之间的区别。“EffectiveC++”和“MoreEffectiveC++”(均由ScottMeyers撰写)对差异以及何时使用指针与引用进行了很好的描述。编辑:有很多答案说“引用只是为了更容易处理指针而使用的语法糖”。他们肯定是不是。考虑以下代码:inta=3;in

c++ - int & 是什么意思

一个C++问题,我知道int*foo(void)foo将返回一个指向int类型的指针怎么样int&foo(void)它返回什么?非常感谢! 最佳答案 它返回一个对int的reference。引用类似于指针,但有一些重要的区别。我建议您阅读指针、引用、对象和原始数据类型之间的区别。“EffectiveC++”和“MoreEffectiveC++”(均由ScottMeyers撰写)对差异以及何时使用指针与引用进行了很好的描述。编辑:有很多答案说“引用只是为了更容易处理指针而使用的语法糖”。他们肯定是不是。考虑以下代码:inta=3;in

c++ - 如何从模板类 typedef 方法的返回类型?

我有一个模板类Helper看起来像这样:templateclassHelper{public:usingmappedType=...;};我需要mappedType为map(constint&)返回的类型Mapper中的方法类(class)。给定Mapper的有效类型像下面这样:classDMapper{public:doublemap(constint&val){...}};Helper::mappedType应该是double.有没有办法在不实例化Mapper的情况下做到这一点??我得到的最接近的是:usingmappedType=typenamestd::result_of::t