草庐IT

int_void

全部标签

c++ - boost::lexical_cast<std::string>(Int_Type) 可以抛出吗?

有没有可能boost::lexical_cast(Int_Type)扔?我唯一能想到的是字符串没有内存的地方,但是还有其他更合理的选择吗? 最佳答案 根据documentation,lexical_cast可以扔bad_lexical_cast.最重要的是,正如您已经提到的,可能存在动态分配,它总是会导致bad_alloc异常。编辑:至于具体情况lexical_cast,除了分配错误之外,链上的任何部分似乎都不太可能失败,但文档并不(据我所知)保证不会出现“错误转换”异常。 关于c++-

c++ - std::atomic 将一对原子 int32 视为一个原子 int64?

我有一对unsignedint32std::atomic_start;std::atomic_end;有时我想通过比较交换来设置开始或结束,所以我不希望在整个64位对上使用CAS可能导致虚假故障。我只想使用32位CAS。_end.compare_exchange_strong(old_end,new_end);现在我可以将开始和结束作为一个64位原子读取来获取。或者两个单独的32位读取。执行一次64位原子提取(编译器添加适当的内存栅栏)而不是使用两个内存栅栏进行两次单独的32原子位读取(或者编译器会优化它吗?)会不会更快?如果是这样,我将如何在C++11中做到这一点?

c++ - C++ 中将默认变量类型设置为 int 的任何选项

在c++代码中是否有任何选项省略变量类型或将变量类型设置为int以使用g++编译器编译Linux.constbufLen=2000;在solaris中编译顺利(因为我正在从solaris移植到linux)。还有一件事,我无法控制文件,因为它是由某些解析器生成的(由某些第三方以二进制形式提供)由于我无法更改c++文件(因为它每次在编译前生成),我需要一些选项(g++)以便我可以在编译期间包含以抑制/解决错误:error:ISOC++forbidsdeclarationof`bufLen`withnotype编辑:INFO:目前我正在使用的选项-c-fPIC-Wno-deprecated-

c++ - 未解析的外部符号 boost::chrono::system_clock::now(void)

谷歌一直不友善...我最近取消了boost1.50,并尝试使用它来构建我的项目。这是一个大型项目,使用了多种boost功能(线程、信号、指针类、spirit等)。一些细节:-MSVC9.0(2008)-静态链接boost我在链接每个生成的exe时遇到错误,但是对于chrono,我没有直接链接它。错误是:libboost_thread-vc90-mt-sgd-1_50.lib(thread.obj):errorLNK2019:unresolvedexternalsymbol"public:staticclassboost::chrono::time_point>>__cdeclboost

c++ - 在 C/C++ 中将非常大的 int(写为字符串)转换为二进制字符串

我有一个基数为10的数字,大约有10k位。我想将它转换成基数2(1010101001...)。我能想到的就是原始算法:取最后一位mod2->记下位数字除以2;在字符串上实现小学分部应该不难,但我认为它非常低效。如果我是对的,它将是O(l^2),其中l表示以10为基数的数字长度。可以更快地完成吗? 最佳答案 据我了解,您的大数字表示为十进制数字序列。如果是这样,您可以使用乘法和加法计算“二进制”表示:value=sum(iin0...n-1)10i*digiti此计算可以分而治之的方式拆分成多个部分,但我不确定您是否可以得出O(nlo

c++ - 如何将 std::unique_ptr<T> 与返回 int 的接口(interface)一起使用?

我想将open/closePOSIXAPI包装到一个RAII兼容对象中,例如std::unique_ptr。但是open函数返回一个int(即不是HANDLE,它是指向void的指针),并且我不确定如何将std::unique_ptr模板类与int一起使用。有人可以帮帮我吗? 最佳答案 真的,您想要的只是让close(intfileHandle)为您管理,对吗?为什么不创建一个带有为您调用close()的析构函数的简单C++类?我认为这就是您要寻找的行为。std::shared_ptr,friend只处理用new创建的堆指针,会调用

C++ - 如何正确地将 double 转换为 int

我目前正在编写一个需要对平方根取底的程序。因为我取平方根的值是正数,所以我只是将它转换为int。所以说下面的例子:inti=16;intj=std::sqrt(i)j应该是4。不过我想知道,sqrt是否有可能返回3.9999999991而不是4.000000001或其他什么,而j的结果是3?是否有定义浮点行为的规则?我怎样才能正确地将其转换为int? 最佳答案 几乎所有广泛使用的硬件都使用IETF754float,尽管C++不需要它。假设IETF754float和::std::sqrt到IETF754浮点平方根运算的直接映射,您可以

c++ - 安全地将 int 转换为枚举

我想知道是否有任何巧妙的技巧可以安全地将整数转换为枚举。在您投票认为这是重复之前,我不是在问如何转换(inti;Enume=static_cast(i)很简单)。我问的是如何安全地执行此操作,验证结果值确实在枚举中。代码如下enumclassE{A=1,B=2};intmain(int,char**){inti=3;Ee=static_cast(i);}将编译(AFAIK)但是e将不包含枚举中的有效值。我想到的最好的方法是类似switch(i){case1:returnE::A;case2:returnE::B;default:throwinvalid_argument("");}哪个

c++ - 获取 std::set 元素地址时从 ‘const int*’ 到 ‘int*’ 的无效转换

我收到以下错误error:invalidconversionfrom‘constint*’to‘int*’以下是我的程序#includeintmain(intargc,char**argv){std::setintSet;intSet.insert(1);intSet.insert(2);intSet.insert(3);intSet.insert(4);intSet.insert(5);int*pAddress=&(*(intSet.find(4)));}我想要std::set中元素的地址,此代码不会给Microsoft编译器带来任何编译错误,但g++会给出此编译错误。

c++ - eclipse c++ 中的 "control reaches end of non-void function"警告但没有编译或运行时错误

这是我的代码:Composer&Database::GetComposer(stringin_last_name){for(inti=0;i想法是遍历Composer对象数组并返回对其last_name字段与“in_last_name”匹配的对象的引用。我明白警告在告诉我什么,即函数可能不会返回任何内容(如果用户提供了无效的姓氏)。我的问题是,我怎样才能避免这种情况?我尝试在for循环之后添加“return0”和“returnNULL”,但它无法编译。如果此方法什么也没找到,是否应该抛出异常? 最佳答案 您的函数被声明为返回一个Co