草庐IT

c++ - 为什么不同类型的变量可以用作 C++ 中 const 引用参数的参数的参数

voidfoo(constint&v){intx=v;std::cout正在传递y来代替C++中合法的constint& 最佳答案 有两个因素可以让您的代码正常工作。首先,如果允许函数参数匹配重载,则允许函数参数最多进行一次隐式转换。其次,const引用可以绑定(bind)到临时对象。这里发生的是y隐式转换为int,创建一个临时拷贝。v然后绑定(bind)到那个临时的。考虑以下示例:#includevoidfoo(constunsignedint&v){std::cout您会发现foo(y)打印出与y相同的地址,而bar(y)打印出

c++ - 是否可以将 MongoDB 用作嵌入式数据库?

正如标题所说,我喜欢将MongoDB服务器嵌入到我自己的C++应用程序中。我没有在文档中找到这种模式。我正在寻找的是嵌入式模式下的SQLite或Firebird之类的东西。MongoDB也可以做到这一点吗?(无需自己编程)。 最佳答案 目前无法嵌入MongoDB-但在许多人的愿望list上。 关于c++-是否可以将MongoDB用作嵌入式数据库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que

c++ - 指针可以安全、便携地用作对象 ID 吗?

假设我有一堆指向类A实例的有效指针。我可以安全且便携地假设指针在整个对象生命周期内保持不变吗?换句话说,我可以使用指向对象的指针作为唯一对象ID吗? 最佳答案 当然;我不明白为什么不。内存地址几乎就是对象标识的定义(暂时不考虑类型)。 关于c++-指针可以安全、便携地用作对象ID吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6409127/

c++ - 为什么 endl 被用作 "\n"的同义词,即使它会导致显着的性能损失?

这个程序:#include#include#includeintmain(intargc,constchar*argv[]){using::std::cerr;using::std::cout;using::std::endl;if(argc3){cerr]\n";return1;}unsignedlongcount=10000;if(argc>2){char*endptr=0;count=::std::strtoul(argv[1],&endptr,10);if((argv[1][0]=='\0')||(*endptr!='\0')){cerr]\n";return1;}}const

c++ - 没有初始值设定项或显式默认构造函数的空类是否可用作 constexpr 变量?

给定以下代码:structf{};intmain(){constexprff1;//constff1;//Thisalsohasthesameissue//constexprff1={};//Thisworks}clang和gcc不同意它是否有效,clang提供以下诊断(seeitlive):error:defaultinitializationofanobjectofconsttype'constf'withoutauser-provideddefaultconstructorconstexprff1;^{}据我所知,f是一种文字类型,它由隐式默认构造函数初始化,该构造函数应允许将其

c++ - 是否可以限制类实例仅用作临时实例?

是否可以限制类实例仅用作右值(例如临时值)?例如,我有一个Wrapper类,其构造函数采用Aconst&并将此引用保存在其成员中。这很危险,因为Wrapper实例的生命周期不能长于A实例的生命周期,但如果Wrapper是temporary. 最佳答案 我认为即使想要这样做也是设计非常糟糕的标志。但是,您可以将所有构造函数设为私有(private),并创建一个返回右值的友元函数。这应该可以解决问题。 关于c++-是否可以限制类实例仅用作临时实例?,我们在StackOverflow上找到一个

c++ - 我可以将 stringstream 用作 C# 中的 `MemoryStream` 之类的内存流吗?

在C/C++中,字符串以NULL结尾。我可以像C#中的MemoryStream那样使用stringstream作为内存流吗?内存流的数据中间可能有\0值,但C++字符串以NULL结尾。 最佳答案 当在std::string中存储字符序列时,您可以包含空字符。相应地,std::stringstream也可以处理嵌入的空字符。但是,流上的各种格式化操作不会通过空字符。此外,当使用内置字符串为std::string赋值时,空字符很重要,即,您需要使用各种重载,将字符序列的大小作为争论。你到底想达到什么目的?可能有一种比在字符串流中旅行更简

c++ - 为什么逗号表达式用作放置参数时不能按预期工作?

#includeusingnamespacestd;voidf(void*){}structA{};intmain(){Aa;f((a.~A(),&a));//OKnew(&a)A();//OKnew((a.~A(),&a))A();//errorC2059:syntaxerror:'type'}我认为(a.~A(),&a)是一个有效的表达式,可以计算为一个指针值,所以它应该被接受为放置参数,为什么结果不是这样?我的编译器是VC++2013RC。这是编译器错误吗?更新:我已经向connect.microsoft.com提交了一个错误 最佳答案

c++ - 是否可以在 C++ 中声明一个将自身用作参数的函数类型?

例如,是否有与此等效的法律?typedefvoid(*SelfReferencingFnPtr)(int,SelfReferencingFnPtr);使用clang,这会导致错误“未知名称SelfReferencingFnPtr”。我能想出的最好办法是一个仿函数,它的operator()接受它自己的类型。 最佳答案 不,请参阅GotW#57.这确实是一个递归问题。 关于c++-是否可以在C++中声明一个将自身用作参数的函数类型?,我们在StackOverflow上找到一个类似的问题:

c++ - 将 std::unique_ptr<void> 与自定义删除器一起用作智能 void*

我有一个通用类myClass有时需要根据用途存储额外的状态信息。这通常是通过void*完成的。,但我想知道我是否可以使用std::unique_ptr以便在类实例被析构时自动释放内存。问题是我需要使用自定义删除器,因为删除void*会导致未定义的行为。有没有办法默认构造一个std::unique_ptr,这样我就不用先用一个虚拟删除器构造它,然后在我使用void*时设置一个真正的删除器。对于状态结构?或者是否有更好的方法在类中存储状态信息?下面是一些示例代码:voiddummy_deleter(void*){}classmyClass{public:myClass():m_extraD