草庐IT

cplusplus

全部标签

c++ - c++ new 运算符可以在 Windows 上自动使用大页面吗?

假设我使用VisualStudio编写了一个C++程序,它使用new运算符分配内存。我想知道是否有一种方法可以让new自动使用大页面而不是标准的4KB页面(即,我的程序无需显式调用VirtualAlloc)。感谢您的宝贵时间。 最佳答案 您可以覆盖所有new和delete运算符。例如void*operatornew(size_tsize){returnmalloc(size);}voidoperatordelete(void*pointer){free(pointer);}此外,您应该覆盖此运算符的所有变体:http://www.c

c++ - 打破封装是个好主意吗?

我刚开始学习封装,我偶然发现std::string使用的两个函数似乎破坏了它的封装。关于http://www.cplusplus.com/reference/string/string/c_str/中的c_str()和data()和http://www.cplusplus.com/reference/string/string/data/“返回的指针指向字符串对象当前使用的内部数组,用于存储符合其值的字符”。对于刚刚学习OO编程的人来说,打破封装是个好主意吗?对于更高级的人呢?顺便说一句,这似乎是与C++98不同的行为。为什么您认为他们做出了这些改变?感谢您的宝贵时间。

c++ - 在cplusplus中使用fstream时,这个程序有什么问题

下一个程序有什么问题吗?我希望文件到达结尾。ifstreamfile("main.cpp",ios::binary|ios::ate);if(file){//fstream::pos_typesize=file.tellg();file.seekg(100,fstream::cur);if(file.eof()){coutfstream到达文件末尾,但为什么不回显“eof为真”。 最佳答案 只有当实际读取操作由于到达文件末尾而失败时,eof位才会被设置(因此eof()仅返回true)。搜索操作(显然)是不够的。

c++ - "__cplusplus"宏扩展成什么?

C++宏__cplusplus包含和扩展到什么?即使在最古老的C++实现中,宏__cplusplus是否始终包含并扩展为一个数字值?使用#if__cplusplus是否安全还是我们应该使用#ifdef__cplusplus?结论(稍后添加)来自评论和接受的答案:__cplusplus扩展为代表标准版本的数字,90年代初的准标准C++除外(它简单地扩展为1)。是的,即使是在最古老的C++实现中(扩展为数值)。不,#ifdef应该在头文件与C语言共享时使用(因为某些C编译器会在#if检查未定义的宏时发出警告). 最佳答案 是的,它总是扩

c++ - 计算没有循环 C++ 的数字位数

我必须计算数字中的位数。我将数字除以10,直到得到0。每次迭代都会递增计数器。intnum;cin>>num;while(num>0){counter++;num=num/10;}挑战在于不使用任何循环或递归,只是一个if语句。这可能吗? 最佳答案 计数器=log(num)/log(10)在C++中:#include....counter=num==0?1:log10(std::abs(num))+1;你要的是日志功能cplusplus-log10cplusplus-std::abs 关

c++ - cplusplus.com 说 std::string "shall not be dereferenced"的结尾

如果你能为我澄清一些困惑,我会很高兴。我正在编写一个函数来删除字符串中的重复字符,例如"AB-->"AAABB"。voidremove_dups(std::string&str){std::string::iteratorit=str.begin();while(it!=str.end()){if(*(it+1)==*it){str.erase(it+1);}else{++it;}}}我测试的时候好像能用。但是,我想知道,不应该有栅栏柱问题吗?当“it”是字符串的末尾时,if语句查看不存在的下一个字符。根据cplusplus.com,尾后字符是一个理论字符,将跟在字符串中的最后一个字符

c++ - __cplusplus 是否可以被定义并等于零?

这个问题在这里已经有了答案:Howarethe__cplusplusdirectivedefinedinvariouscompilers?(4个答案)关闭5年前。问题是是否应该使用#if或#ifdef包装extern"C"。即:#if__cplusplusextern"C"{#endif或#ifdef__cplusplusextern"C"{#endif这引出了一个问题:是否存在__cplusplus被定义为等于零的情况?

c++ - 扩展 rand() 最大范围

我创建了一个测试应用程序,它生成0到250000范围内的10k个随机数。然后我计算了MAX和min值,并注意到MAX值始终在32k左右...你知道如何扩展可能的范围吗?我需要一个MAX值在250000左右的范围! 最佳答案 这是根据rand()的定义,见:http://cplusplus.com/reference/clibrary/cstdlib/rand/http://cplusplus.com/reference/clibrary/cstdlib/RAND_MAX/如果您需要更大的随机数,您可以使用外部库(例如http://w

c++ - Visual Studio 2012 中的 round()、rint()(等等)C++ 函数在哪里?

这些页面:http://www.cplusplus.com/reference/cmath/round/http://www.cplusplus.com/reference/cmath/rint/暗示这些函数是C++11的一部分,而VisualStudio2012似乎基本上支持C++11中的所有内容……所以四舍五入函数到底在哪里(更不用说其他附加数学函数了)?!我知道如何滚动我自己的舍入函数,但在这一点上它看起来很荒谬。我是否只是在这里遗漏了一些东西并且有一些特殊的std::和tr1::组合或另一个头文件来访问这些? 最佳答案 正如

c++ - 在 C++ 中使用 srand()

我是C++的新手,所以这个疑问可能看起来很基本,但我不明白rand()和srand()之间的区别,以及srand()中的“种子”是什么意思?当我写srand(time(NULL))时,它生成随机数是做什么的,time(NULL)在这里做什么?还有,这是什么?提前致谢 最佳答案 随机数生成器需要一个数字(称为种子)来生成随机数。如果随机数生成器被赋予相同的种子,那么每次它都会生成相同的随机数序列。例如:-如果您运行该程序,它会生成随机序列2,78,45,60。如果您第二次运行该程序,您将再次获得相同的序列2,78,45,60。sran