Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

10
将32位循环计数器替换为64位会在Intel CPU上使用_mm_popcnt_u64引起疯狂的性能偏差
我一直在寻找处理popcount大量数据的最快方法。我遇到了一个非常奇怪的效果:将loop变量从更改为unsigned,uint64_t使PC上的性能下降了50%。 基准测试 #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in MB" << endl; return -1; } uint64_t size = atol(argv[1])<<20; uint64_t* buffer = new uint64_t[size/8]; char* charbuffer = reinterpret_cast<char*>(buffer); for (unsigned i=0; i<size; …

11
什么是rvalue,lvalue,xvalue,glvalue和prvalue?
在C ++ 03中,表达式是rvalue或lvalue。 在C ++ 11中,表达式可以是: 右值 左值 值 总值 前值 两个类别已变成五个类别。 这些新的表达类别是什么? 这些新类别与现有的右值和左值类别有何关系? C ++ 0x中的rvalue和lvalue类别与C ++ 03中的类别相同吗? 为什么需要这些新类别?是WG21神只是想迷惑我们凡人?
1356 c++  expression  c++-faq  c++11 


25
为什么我们需要C ++中的虚函数?
我正在学习C ++,并且刚开始使用虚函数。 从我阅读的内容(在书中和在线上)中,虚函数是基类中的函数,您可以在派生类中重写这些函数。 但是在本书的前面,当学习基本继承时,我无需使用即可在派生类中覆盖基本函数virtual。 那我在这里想念什么?我知道虚函数还有很多,这似乎很重要,所以我想弄清楚到底是什么。我只是无法在网上找到直接的答案。

6
为什么必须在何处以及为什么要放置“模板”和“类型名”关键字?
在模板,在那里,为什么我必须把typename和template上依赖的名字呢? 无论如何,从属名称到底是什么? 我有以下代码: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ... template<typename U> struct inUnion { // Q: where to add typename/template here? typedef Tail::inUnion<U> dummy; }; template< > struct inUnion<T> { }; }; template <typename T> // …



1
C ++ 17的新功能是什么?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 C ++ 17现在已完成功能,因此不太可能经历大的更改。针对C ++ 17提出了数百个建议。 其中哪些功能是在C ++ 17中添加到C ++的? 使用支持“ C ++ 1z”的C ++编译器时,当编译器更新到C ++ 17时,哪些功能将可用?
1007 c++  standards  c++-faq  c++17 

5
未定义的行为和顺序点
什么是“序列点”? 未定义行为与序列点之间有什么关系? 我经常使用诸如的有趣且令人费解的表情a[++i] = i;来使自己感觉更好。为什么我应该停止使用它们? 如果您已阅读本文,请确保访问后续问题未定义行为和重载序列点。 (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,那么开始所有这些工作的meta上的发布将是这样做的地方。该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)



23
为什么不能在switch语句中声明变量?
我一直想知道-为什么您不能在switch语句中的case标签之后声明变量?在C ++中,您几乎可以在任何地方声明变量(并且声明它们接近首次使用显然是一件好事),但是以下操作仍然无效: switch (val) { case VAL: // This won't work int newVal = 42; break; case ANOTHER_VAL: ... break; } 上面给了我以下错误(MSC): “ newVal”的初始化被“ case”标签跳过 这似乎也是其他语言的限制。为什么会有这样的问题?


6
C ++ 11中的'typedef'和'using'有什么区别?
我知道在C ++ 11中,我们现在可以using用来编写类型别名,例如typedefs: typedef int MyInt; 据我了解,相当于: using MyInt = int; 并且这种新语法是通过努力表达“ template typedef” 的方式而出现的: template< class T > using MyType = AnotherType< T, MyAllocatorType >; 但是,对于前两个非模板示例,标准中是否还有其他细微差别?例如,typedefs以“弱”方式进行别名。也就是说,它不会创建新类型,而只会创建一个新名称(这些名称之间的转换是隐式的)。 与它相同using还是会生成新类型?有什么区别吗?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.