草庐IT

c++ - 具有显式模板实例化的未解析外部。什么是声明语法?

这里有一些简化的代码来演示我遇到的问题。我有一个模板函数,我只想为其编译某些固定的实例。函数声明是://***template.h***intsquare(intx);doublesquare(doublex);定义是://***template.cpp***#include"template.h"//(templatedefinitionunusuallyinacoderatherthanheaderfile)templateTsquare(Tx){returnx*x;}//explicitinstantiationstemplateintsquare(intx);templatef

C++ 类型转换与隐式构造函数

我正在实现一个表示分数的C++类。这是我的代码。classFraction{public:Fraction(chari);Fraction(inti);Fraction(shorti);Fraction(longintl);#ifdef__LP64__Fraction(longlongl);#endifFraction(floatf);Fraction(doubled);Fraction(doublex,doubley);Fractionoperator+()const;Fractionoperator-()const;Fraction&operator+=(constFraction

c++ - 如何正确地进行显式模板实例化?

我正在使用模板来实现CRTP模式。使用下面的代码,我得到链接器错误(对于基类CPConnectionBase中定义的所有方法),如下所示:errorLNK2001:unresolvedexternalsymbol"public:void__thiscallCPConnectionBase::start(void)"(?start@?$CPConnectionBase@VTNCPConnection@@@@QAEXXZ)我想这里的解决方案是显式模板实例化。事实上,我可以在添加时构建我的代码#include"TNCPConnection.h"templateclassCPConnectio

C++:初始化变量;重载隐式构造函数?

我想重新实现一个我有头文件的库。我不想更改.h文件,因为这需要更改使用该库的程序(加上一些法律原因)。编辑:我也无法更改使用库和实例化类X的代码!lib.h定义了一个类X(简化版):classX{public:boolFunction(BOOLq,INTp);BOOLa;INTb;};(BOOL和INT只是库使用的一些数据类型,这些类包装了基本数据类型bool和int)。我在my_lib_implementation.cpp中实现了这个类:boolX::Function(BOOLq,INTp){returntrue;}.h文件没有定义构造函数,所以这意味着有一个隐式构造函数(对吧?)。

c++ - 未在 lambda 内部调用显式运算符 bool — MSVC 错误?

#includestructT{explicitoperatorbool(){returntrue;}};intmain(){Tt;if(t){}//OKautol=[&](){if(t){}//Error};}MSVC的行为在这里似乎奇怪地不一致;OK行和Error行之间的唯一区别是它们在lambda中。这是错误吗? 最佳答案 Isthisabug?是的,绝对是。您的程序没有任何问题,bool转换运算符在两种情况下都应被调用。 关于c++-未在lambda内部调用显式运算符bool—M

c++ - 抢占式多任务处理是否会干扰 C++11 发布-获取语义?

线程是否有可能(理论上)在一个CPU上执行acquire,然后立即被抢占并在另一个从未执行过acquire的CPU上恢复执行(因此从不根据发布-获取语义同步)?例如。考虑以下代码,它使用C++11原子和release-acquire内存排序来执行无锁线程安全初始化:if(false==_initFlag.load(memory_order_acquire)){_foo=...;//initializeglobal_bar=...;//initializeglobal...=...;//initializemoreglobals_initFlag.store(true,memory_or

c++ - 是否可以为 std::array 定义隐式转换运算符?

我正在尝试拥有一个可以隐式转换为std::array的C++类。转换有效,但不是隐式的。#includeclassA{private:std::arraydata;public:operatorstd::array&(){returndata;}operatorconststd::array&()const{returndata;}};intmain(){Aa;a[1]=0.5f;//failstocompileautoit=a.begin();//failstocompileAb;static_cast>(b)[1]=0.5f;//okautoit2=static_cast>(b).

c++ - 显式默认和删除的构造函数 : is there any similar functionality available in VS2012?

在VS2012中,“显式默认和删除特殊成员函数”功能(http://en.wikipedia.org/wiki/C++0x#Explicitly_defaulted_and_deleted_special_member_functions、http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm)尚不可用(http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx)。是否有任何解决方法来使用此类功能,即使非常冗长?在实践中,我可以翻译这个吗struc

c++ - 首先发生什么,隐式转换为返回值或破坏局部变量?

我只是碰到了像下面这样的代码,我觉得它很可疑(为了保护无辜者,省略了细节):std::stringMakeString(){charbuf[12]={0};return&buf[0];}这可以还是不安全?是否保证在buf超出范围之前创建std::string? 最佳答案 你写的等同于:std::stringMakeString(){charbuf[12]={0};returnbuf;}并且始终保证此代码是安全的。事实上,这种情况与任何通过复制返回值的函数没有太大区别。 关于c++-首先发

c++ - 为什么显式运算符 bool 让我转换为任何原始类型?

structtest{explicitoperatorbool()const{returntrue;}};intmain(){testa;floatb=static_cast(a);//b=1}这是正确的,还是一个VS错误?如果按照设计,这里的最佳做法是什么?我应该/可以做些什么来防止这种情况发生吗? 最佳答案 这看起来像一个VS错误:显式运算符不应该应用于bool以外的类型。在这两个C++11mode中都无法在gcc中编译和C++98mode.CanIdoanythingtopreventthis?您已经完成了您需要做的事情-这是