Questions tagged «c++»

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

8
memset()或值初始化以将结构归零?
在Win32 API编程中,通常将Cstruct与多个字段一起使用。通常,其中只有几个具有有意义的值,而所有其他值都必须归零。这可以通过以下两种方式之一来实现: STRUCT theStruct; memset( &theStruct, 0, sizeof( STRUCT ) ); 要么 STRUCT theStruct = {}; 第二个变体看起来更干净-它是单线的,它没有任何可能被错误键入并导致植入错误的参数。 与第一个变体相比,它有什么缺点吗?使用哪个变体,为什么?

7
C ++头文件如何包含实现?
好的,无论如何都不是C / C ++专家,但是我认为头文件的目的是声明函数,然后C / CPP文件是定义实现。 但是,今晚复习一些C ++代码,我在类的头文件中找到了它。 public: UInt32 GetNumberChannels() const { return _numberChannels; } // <-- Huh?? private: UInt32 _numberChannels; 那么,为什么在标头中有实现?与const关键字有关吗?内联类方法吗?与在CPP文件中定义实现相比,以这种方式实现的目的/好处到底是什么?
76 c++  header-files 



5
联合与类型搭配
我已经搜索了一段时间,但找不到明确的答案。 许多人说,使用union来进行pun-pun是不确定的,也是不好的做法。为什么是这样?考虑到您将原始信息写入的内存,它不会做任何未定义的事情,而不会改变它的任何原因(除非它超出了堆栈范围,但这不是联合问题) ,那将是不好的设计)。 人们引用了严格的别名规则,但是在我看来,这就像在说您不能执行,因为您无法执行。 如果不键入pun,联合的意义是什么?我在某处看到应该在不同的时间将相同的内存位置用于不同的信息,但是为什么不删除信息然后再使用呢? 总结一下: 为什么使用联合进行类型修剪是不好的? 如果不是这样,他们的目的是什么? 额外信息:我主要使用C ++,但想了解有关C和C的信息。特别是,我使用联合在浮点数和通过CAN总线发送的原始十六进制之间进行转换。
76 c++  c  unions  type-punning 

7
c ++中c_str函数的用途是什么
我刚刚开始阅读C ++,发现c ++具有丰富的字符串操作功能,而C语言则没有。我正在阅读这些函数并且遇到了c_str(),据我所知是c_str将可能以null终止或可能不是null终止的字符串转换为字符串。 谁能建议我一些示例,以便我可以理解c_str函数的使用?
76 c++  c  string 

3
如何有效地为std :: string的子字符串获取`string_view`
使用http://en.cppreference.com/w/cpp/string/basic_string_view作为参考,我认为没有办法更优雅地做到这一点: std::string s = "hello world!"; std::string_view v = s; v = v.substr(6, 5); // "world" 更糟糕的是,幼稚的方法是一个陷阱,并留下v了对临时对象的悬挂: std::string s = "hello world!"; std::string_view v(s.substr(6, 5)); // OOPS! 我似乎记得类似的东西,可能在标准库中添加了一个将子字符串作为视图返回的内容: auto v(s.substr_view(6, 5)); 我可以想到以下解决方法: std::string_view(s).substr(6, 5); std::string_view(s.data()+6, 5); // or even "worse": std::string_view(s).remove_prefix(6).remove_suffix(1); 坦白说,我认为这些都不是很好。现在,我能想到的最好的事情就是使用别名来使事情变得不再那么冗长。 using sv = std::string_view; sv(s).substr(6, 5);
76 c++  view  c++17  stdstring 

2
不推荐使用std :: iterator的准备
3月21日,标准委员会投票通过了弃用P0174中std::iterator提议的建议: 与读者typedef在类定义本身中简单地提供期望的s相比,冗长的void参数序列对读者而言并不十分清楚,这是当前工作草案采用的方法,遵循的c + + 14 之前 C ++ 17std::iterator鼓励从继承继承,以从迭代器样板实现中删除乏味。但是弃用将需要以下其中一项: 迭代器样板现在将需要包含所有必需的typedefs 使用迭代器的算法现在将需要使用auto而不是依赖迭代器来声明类型 Loki Astari建议在std::iterator_traits不继承的情况下进行更新以使其正常工作std::iterator 在设计自定义迭代器时,有人可以启发我应该选择哪些选项吗? C ++ 17 兼容性?

5
如何排序STL向量?
我想排序一个 vector vector<myClass> object; 其中myclass包含许多int变量。如何vector对的任何特定数据变量进行排序myClass。
76 c++  sorting  stl 


4
为什么在C和C ++中有图?
我今天了解到,C99和C ++中有图。以下是有效的程序: %:include <stdio.h> %:ifndef BUFSIZE %:define BUFSIZE 512 %:endif void copy(char d<::>, const char s<::>, int len) <% while (len-- >= 0) <% d<:len:> = s<:len:>; %> %> 我的问题是:为什么它们存在?
76 c++  c  c99  digraphs 


5
pinvokestackimbalance —如何解决此问题或将其关闭?
我刚从vs2008切换到vs2010。完全相同的解决方案,除了现在每次对C ++ dll的每次调用都会产生“ pinvokestackimbalance”异常。 在2008年不会触发此异常。我具有对C ++ dll和调用应用程序的完全访问权限。pinvoke似乎没有任何问题,但是这个问题使调试其他问题变得不可能。IDE经常停止向我介绍这些事情。 例如,这是C#签名: [DllImport("ImageOperations.dll")] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage, int inTotalSize, int inWindow, int inLevel); 这是C ++方面的样子: #ifdef OPERATIONS_EXPORTS #define OPERATIONS_API __declspec(dllexport) #else #define OPERATIONS_API __declspec(dllimport) #endif extern "C" { OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, unsigned char* …

5
结构初始化向量
我想知道如何使用该push_back方法将值添加到结构向量中 struct subject { string name; int marks; int credits; }; vector<subject> sub; 那么,现在如何向其中添加元素? 我有初始化字符串名称的函数(以它的主题名称为准) void setName(string s1, string s2, ...... string s6) { // how can i set name too sub[0].name= "english", sub[1].name = "math" etc sub[0].name = s1 // gives segmentation fault; so how do I use push_back …
76 c++  vector  struct  push-back 


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.