Questions tagged «c++»

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

3
覆盖单个文件的编译标志
我想使用一组全局标志来编译项目,这意味着在我的顶级CMakeLists.txt文件中,我指定了: ADD_DEFINITIONS ( -Wall -Weffc++ -pedantic -std=c++0x ) 但是,对于子目录中的特定文件(例如“ foo.cpp”),我想将编译标志切换为不应用-Weffc ++(包括我无法更改的商业库)。为了简化仅使用-Wall的情况,我尝试: SET_SOURCE_FILES_PROPERTIES( foo.cpp PROPERTIES COMPILE_FLAGS -Wall ) ADD_EXECUTABLE( foo foo.cpp ) ,这没有用。我也试过 SET_PROPERTY( SOURCE foo.cpp PROPERTY COMPILE_FLAGS -Wall ) ADD_EXECUTABLE( foo foo.cpp ) 和 ADD_EXECUTABLE( foo foo.cpp ) SET_TARGET_PROPERTIES( foo PROPERTIES COMPILE_FLAGS -Wall ) ,但两者都不起作用。 最后,我尝试删除此定义: REMOVE_DEFINITIONS( -Weffc++ ) ADD_EXECUTABLE( …

5
是否有C ++的在线名称分解器?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 我收到了一个相当长且令人困惑的链接错误,如果我可以将其粘贴到某个网站的某些文本框中,并为我保留名称,则将不胜感激。 有人知道这样的服务吗?
109 c++  demangler 


4
如何使用Visual Studio Express 2005制作完全静态链接的.exe?
我当前首选的C ++环境是免费且功能强大的Microsoft Visual Studio 2005 Express版本。我不时将发布的.exe文件发送给其他人,并获得了令人满意的结果。但是最近我令人不安的发现是,令人愉悦的结果是基于我想要的更多运气。试图在旧的(2001年份,未认真更新)XP机上运行这些程序之一,但给我什么却只有讨厌的“系统无法运行x.exe”(或类似)消息。 一些谷歌搜索发现,使用此工具集,甚至指定静态链接也会导致简单的hello-world.exe实际上依赖于额外的.dll文件(msvcm80.dll等)。一个精心设计的版本计划系统(是否显示任何文件?)然后会在没有完全正确的.dll版本的情况下运行.exe。我不需要或不需要这些东西,我只想要一个老式的自包含.exe,它只执行最低公分母Win32操作,并且可以在任何旧的win32 OS上运行。 有谁知道我现有的工具集是否有可能做我想做的事情? 谢谢。

7
启用优化的不同浮点结果-编译器错误?
以下代码在经过优化和未经优化的情况下均适用于Visual Studio 2008。但是,它仅适用于未经优化(O0)的g ++。 #include <cstdlib> #include <iostream> #include <cmath> double round(double v, double digit) { double pow = std::pow(10.0, digit); double t = v * pow; //std::cout << "t:" << t << std::endl; double r = std::floor(t + 0.5); //std::cout << "r:" << r << std::endl; return r / …
109 c++  optimization  g++  c++-faq 

5
LPCSTR,LPCTSTR和LPTSTR
什么区别LPCSTR,LPCTSTR和LPTSTR? 为什么我们需要这样做将字符串转换为LV/ _ITEM结构变量pszText: LV_DISPINFO dispinfo; dispinfo.item.pszText = LPTSTR((LPCTSTR)string);
109 c++  windows  visual-c++  mfc 

8
CMAKE中特定于操作系统的说明:如何?
我是CMAKE的初学者。下面是一个简单的cmake文件,在mingw环境窗口中效果很好。问题显然与target_link_libraries()我链接libwsock32.a的CMAKE函数有关。在Windows中,这行得通,我得到结果。 但是,正如预期的那样,在Linux中,/usr/bin/ld将查找-lwsock32Linux OS上没有的遗嘱。 我的问题是:如何指示CMAKE避免在Linux OS中链接wsock32库??? 任何帮助将不胜感激。 我的简单CMake文件: PROJECT(biourl) set (${PROJECT_NAME}_headers ./BioSocketAddress.h ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h ./BioSocketListener.h ./BioSocketPrivate.h ./BioSocketStream.h ./BioUrl.h BioDatabase.h ) set (${PROJECT_NAME}_sources BioSocketAddress.C BioSocketBase.C BioSocketCommon.C BioSocketStream.C BioUrl.C BioDatabase.C ) add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} ) # linkers #find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH) target_link_libraries(${PROJECT_NAME} bioutils wsock32) install (TARGETS ${PROJECT_NAME} RUNTIME …
109 c++  linux  cmake  mingw  portability 

6
(A + B + C)≠(A + C + B)和编译器重新排序
将两个32位整数相加会导致整数溢出: uint64_t u64_z = u32_x + u32_y; 如果首先将32位整数之一转换为64位整数或将其添加到64位整数,则可以避免这种溢出。 uint64_t u64_z = u32_x + u64_a + u32_y; 但是,如果编译器决定重新排序添加项: uint64_t u64_z = u32_x + u32_y + u64_a; 整数溢出仍可能发生。 是否允许编译器进行这种重新排序,还是我们可以信任它们以注意到结果不一致并按原样保留表达式顺序?

6
是什么使这种指针的使用无法预测?
我目前正在学习指针,我的教授提供了以下代码作为示例: //We cannot predict the behavior of this program! #include <iostream> using namespace std; int main() { char * s = "My String"; char s2[] = {'a', 'b', 'c', '\0'}; cout << s2 << endl; return 0; } 他在评论中写道,我们无法预测程序的行为。究竟是什么使得它不可预测?我认为没有错。
108 c++  pointers 

6
为什么可以从函数中返回“向量”?
请考虑此代码。我已经看过几次这种类型的代码。words是局部向量。如何从函数返回它? 我们可以保证它不会死吗? std::vector<std::string> read_file(const std::string& path) { std::ifstream file("E:\\names.txt"); if (!file.is_open()) { std::cerr << "Unable to open file" << "\n"; std::exit(-1); } std::vector<string> words;//this vector will be returned std::string token; while (std::getline(file, token, ',')) { words.push_back(token); } return words; }

11
GCC编译错误,代码> 2 GB
我有大量的功能,总计约2.8 GB的目标代码(不幸的是,科学计算无法实现...) 当我尝试链接它们时,我遇到了(预期的)relocation truncated to fit: R_X86_64_32S错误,希望通过指定编译器标志来规避-mcmodel=medium。除了链接之外,所有我可以控制的库都使用-fpic标志进行编译。 仍然,错误仍然存​​在,并且我假定链接到某些库不是使用PIC编译的。 这是错误: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x19): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_init' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function …
108 c++  c  gcc  compiler-errors 

7
在类定义中定义静态const整数成员
我的理解是,C ++允许在类内部定义静态const成员,只要它是整数类型即可。 那么,为什么以下代码给我一个链接器错误? #include <algorithm> #include <iostream> class test { public: static const int N = 10; }; int main() { std::cout << test::N << "\n"; std::min(9, test::N); } 我得到的错误是: test.cpp:(.text+0x130): undefined reference to `test::N' collect2: ld returned 1 exit status 有趣的是,如果我注释掉对std :: min的调用,则代码可以编译并很好地链接(即使在上一行中也引用了test :: N)。 关于发生了什么的任何想法? 我的编译器是Linux上的gcc 4.4。

2
使用clang更快地完成代码
我正在研究使用clang的代码完成机制时潜在的代码完成加速。下面描述的流程是我在Anders Bakken的rtags中找到的。 守护程序监视文件分析转换单元的更改。这是通过调用clang_parseTranslationUnit和相关函数(reparse*,dispose*)完成的。当用户请求源文件中给定行和列的完成时,守护程序会将源文件的最后保存版本和当前源文件的缓存翻译单元传递给clang_codeCompleteAt。(Clang CodeComplete docs)。 传递给clang_parseTranslationUnit(从CompletionThread :: process,第271行的)标志是CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes。传递给clang_codeCompleteAt(从CompletionThread :: process,行305)的标志是CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns。 调用clang_codeCompleteAt非常慢-即使完成位置是合法的成员访问代码(的文档中提到的预期用例的子集),也要花费3-5秒才能获得完成clang_codeCompleteAt。根据IDE代码完成标准,这似乎太慢了。有加速的方法吗?



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.