草庐IT

long-lines

全部标签

c++ - 在 visual studio 中使用 __LINE__ 宏作为模板参数

我希望下面的代码可以工作,但我收到了一个编译错误:errorC2975:'n':invalidtemplateargumentfor'foo',expectedcompile-timeconstantexpression#includeusingnamespacestd;templatestructfoo{foo(){coutf;}为什么会这样?我虽然__LINE__会在模板实例化发生之前粘贴行号?如果我想这样做,我应该只引入一个staticconstint来保存行号还是有标准的解决方案? 最佳答案 在VS201010.0.4021

c++ - 用 unsigned long 替换 size_t 的缺点是什么

我正在开发的库需要在32位和64位机器上使用;我有很多编译器警告,因为在64位机器上unsignedint!=size_t。将所有unsignedint和size_t替换为“unsignedlong”有什么缺点吗?我很欣赏它看起来不是很优雅,但是,在这种情况下,内存不是太大的问题......我想知道是否有可能由这样的替换产生任何错误/不需要的行为等all操作(你能举个例子吗)?谢谢。 最佳答案 什么警告?我能想到的最明显的一个是“缩小转换”,也就是说你正在将size_t分配给unsignedint,并收到一条警告信息可能迷路了。用u

c++ - 将 NULL 转换为 long 是不是有歧义?

我正在尝试使用NULL与nullptr的示例。由于NULL可以转换为整数类型,因此它应该与下面的示例显示出歧义,但事实并非如此!它显示不明确的候选编译错误,如果它是unsignedlong,但不是signedlong。谁能解释一下原因!!#includeusingnamespacestd;//NOTE://"long"or"signedlong"isnotshowingambiguouscandidates//but"unsignedlong"doesvoidfunc(longst){cout 最佳答案 在C++中,NULL被定义为

报错:JSON parse error: Cannot deserialize value of type `long` from String “1,2“: not a valid `long` v

详细报错信息JSON parse error: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value at [Source: (org.springframe

c++ - 为什么 64 位 GCC 在分配数组时警告将 const int 转换为 long unsigned int?

我有一个如下所示的文件test.cpp:voidf(constintn){unsignedchar*a=newunsignedchar[n];delete[]a;}intmain(){f(4);return0;}使用-Wsign-conversion在64位GCC中编译它标志产生警告:test.cpp:2:39:warning:conversionto‘longunsignedint’from‘constint’maychangethesignoftheresult[-Wsign-conversion](第2行是调用new的行)。我觉得GCC应该发出关于分配数组的警告似乎很奇怪,但下面

c++ - 以 long long 数字打印位 (C++)

我想打印一个longlong数字的所有位。当我在main()中执行时,一切都很好,但在printBits()函数(代码相同)中,第32位有一个额外的1。代码:#includevoidprintBits(longlongnumber){std::cout";for(chari=63;i>=0;--i){std::cout";for(chari=63;i>=0;--i){std::cout结果是:1->00000000000000000000000000000000000000000000000000000000000000011->0000000000000000000000000000

c++ - 我可以通过 reinterpret_cast 将 int 的空指针转换为 long 类型吗

int*pt=0;longi=reinterpret_cast(pt);我保证为0吗?这是明确定义的还是实现定义的?我检查了c++标准,但它只说明了Apointertoadataobjectortoafunction(butnotapointertomember)canbeconvertedtoanyintegertypelargeenoughtocontainit.在这种情况下,pt不指向任何数据对象。该规则适用于这种情况吗? 最佳答案 否,i不一定是任何值。结果是实现定义的。†在C++中,指针的表示是实现定义的,包括空指针的表示

c++ - 为什么在我的 64 位机器上 double 和 long double 完全一样?

这个问题听起来像是针对初学者的,但是当我发现这个问题时,我想我要么是初学者,要么我的comp缺少一些东西:intmain(){cout程序输出:881515我以为longdouble是10个字节,有18个十进制数字,而double是8个字节,有15个数字,但看来我错了。为什么会这样?在64位机器上使用MSVC2010。 最佳答案 如您所知,在MSVC++中,longdouble是double的同义词。显然这是为了利用仅限于64位操作的SSE/SSE2/SSE3指令集。另见here获取更多信息。

c++ - 新的 __LINE__ 什么时候开始?

我不明白以下程序的输出:#include#defineFOOstd::cout第一个输出是7和7,说明FOO的展开是单逻辑行,但是第二个输出是9和10,表示两条不同的逻辑行。为什么会有差异? 最佳答案 因为1:#include2:3:#defineFOOstd::cout__LINE__扩展为物理行,而不是逻辑行:Thelinenumberofthecurrentsourcelineisonegreaterthanthenumberofnew-linecharactersreadorintroducedintranslationph

c++ - 添加符号时出错 : DSO missing from command line

尝试在Qt项目中使用Ogre。Ogre构建成功。运行项目它给我三个错误:/usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0:-1:error:erroraddingsymbols:DSOmissingfromcommandline-1:error:main.o:undefinedreferencetosymbol'_ZN5boost6system15system_categoryEv'当我搜索错误时,它说要编辑makefile并添加:LIBS=-lp线程但它已经存在了。如何解决这个错误? 最佳答案