Questions tagged «c++»

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

5
在if语句的条件部分中定义变量?
我很震惊,这是允许的: if( int* x = new int( 20 ) ) { std::cout << *x << "!\n"; // delete x; } else { std::cout << *x << "!!!\n"; // delete x; } // std:cout << *x; // error - x is not defined in this scope 那么,这是标准允许的还是仅仅是编译器扩展? 附言:由于对此有很多评论,请忽略此示例“不好”或危险。我知道 例如,这只是我想到的第一件事。

10
UTL8与STL中的宽字符转换
是否可以以平台无关的方式将std :: string中的UTF8字符串转换为std :: wstring,反之亦然?在Windows应用程序中,我将使用MultiByteToWideChar和WideCharToMultiByte。但是,代码是为多个操作系统编译的,我仅限于标准C ++库。

5
shared_ptr和weak_ptr的区别
我正在阅读Scott Meyers的“ Effective C ++”书。有人提到,有tr1::shared_ptr并且tr1::weak_ptr像内置指​​针一样工作,但是它们会跟踪tr1::shared_ptrs指向一个对象的数量。 这称为参考计数。这样可以很好地防止非循环数据结构中的资源泄漏,但是,如果两个或多个对象包含tr1::shared_ptrs一个循环,则该循环可以使彼此的引用计数保持在零以上,即使指向该循环的所有外部指针都已被破坏。 那就是tr1::weak_ptrs进来的地方。 我的问题是循环数据结构如何使引用计数大于零。我请一个示例C ++程序。问题如何解决weak_ptrs?(再次,请举个例子)。

9
C ++中高效的线程安全单例
单例课程的通常模式如下 static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) inst = new Foo(...); return *inst; } 但是,据我了解,此解决方案不是线程安全的,因为1)Foo的构造函数可能被多次调用(可能无关紧要),并且2)inst在返回到另一个线程之前可能未完全构建。 一种解决方案是在整个方法周围包裹一个互斥体,但是在我真正需要同步后很长一段时间内,我就要为同步开销付出代价。另一种方法是 static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) { pthread_mutex_lock(&mutex); if(inst == NULL) inst = new Foo(...); pthread_mutex_unlock(&mutex); } return *inst; } 这是正确的方法,还是我应该注意的陷阱?例如,是否可能发生任何静态初始化顺序问题,即inst总是在首次调用getInst时始终保证为NULL?

8
Pedantic GCC警告:函数返回类型上的类型限定符
当我第一次使用GCC 4.3编译我的C ++代码时(成功地在4.1、4.0、3.4上使用-Wall -Wextra选项进行了警告的情况下成功编译了它)之后,突然出现了一系列错误warning: type qualifiers ignored on function return type。 考虑temp.cpp: class Something { public: const int getConstThing() const { return _cMyInt; } const int getNonconstThing() const { return _myInt; } const int& getConstReference() const { return _myInt; } int& getNonconstReference() { return _myInt; } void setInt(const int newValue) …

4
使用与C ++标准允许的成员变量相同的构造函数参数名称来初始化成员变量吗?
我发现可以使用与下面的示例所示名称相同的构造函数参数来初始化成员变量。 #include <cstdio> #include <vector> class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} void printVec() { for(unsigned int i=0; i<vec.size(); i++) printf("%i ", vec.at(i)); printf("\n"); } }; int main() { std::vector<int> myVector(3); myVector.at(0) = 1; myVector.at(1) = 2; myVector.at(2) = 3; Blah blah(myVector); blah.printVec(); return 0; } 带参数的g …
76 c++ 

4
如何将二进制文件读入无符号字符的向量
最近我一直在问编写一个函数读取二进制文件到std::vector<BYTE>哪里BYTE是unsigned char。我很快就想到了这样的东西: #include <fstream> #include <vector> typedef unsigned char BYTE; std::vector<BYTE> readFile(const char* filename) { // open the file: std::streampos fileSize; std::ifstream file(filename, std::ios::binary); // get its size: file.seekg(0, std::ios::end); fileSize = file.tellg(); file.seekg(0, std::ios::beg); // read the data: std::vector<BYTE> fileData(fileSize); file.read((char*) &fileData[0], fileSize); return fileData; } 这似乎不必要地复杂,并且char*在调用时被迫使用的显式强制转换file.read不会使我对此有所改善。 另一种选择是使用std::istreambuf_iterator: std::vector<BYTE> …


5
.cpp文件中的C ++内联成员函数
我知道,按定义,内联成员函数应该放在标题中。但是,如果不可能将函数的实现放到标题中怎么办?让我们来考虑这种情况: 文件啊 #pragma once #include "B.h" class A{ B b; }; 文件Bh #pragma once class A; //forward declaration class B{ inline A getA(); }; 由于包含了通知,我不得不将实施getA纳入 丙型肝炎 #include "B.h" #include "A.h" inline A B::getA(){ return A(); } 编译器会内联getA吗?如果是这样,哪个内联关键字是有效的关键字(标题中的关键字还是.cpp文件中的关键字)?还有另一种方法可以将内联成员函数的定义放入其.cpp文件中吗?
76 c++  function  inline  member 

2
如何在C ++中重载一元负运算符?
我正在实现向量类,我需要得到一些向量的反义词。是否可以使用运算符重载来定义此方法? 这就是我的意思: Vector2f vector1 = -vector2; 这是我希望该运算符完成的操作: Vector2f& oppositeVector(const Vector2f &_vector) { x = -_vector.getX(); y = -_vector.getY(); return *this; } 谢谢。

12
从C / C ++代码中删除注释
有没有一种简便的方法可以在不进行任何预处理的情况下从C / C ++源文件中删除注释。(即,我认为您可以使用gcc -E,但这将扩展宏。)我只希望除去注释的源代码,没有其他更改。 编辑: 偏爱现有工具。我不想自己用正则表达式编写代码,我预见代码中会出现太多惊喜。
76 c++  c  comments 




1
为什么不支持串联std :: string和std :: string_view?
从C ++ 17开始,我们可以std::string_view轻松查看连续的字符序列,从而避免了不必要的数据复制。const std::string&现在通常建议使用而不是有参数来代替std::string_view。 但是,人们很快发现,从切换const std::string&到std::string_view使用字符串连接的代码会中断,因为不支持连接std::string和std::string_view: std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile) std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile) 为什么要为串联不支持std::string和std::string_view标准?

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.