草庐IT

expose_used

全部标签

c++ - "Swapping values of two variables without using a third variable"中的潜在问题

我最近发现了这种方法,可以在不使用第三个变量的情况下交换两个变量的值。a^=b^=a^=b但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些没有。代码有什么严重错误吗? 最佳答案 Isanythingterriblywrongwiththecode?是的!a^=b^=a^=b实际上调用C和C++中的未定义行为,因为您试图更改a的值在两个序列点之间不止一次。尝试写作(虽然不是万无一失)a^=b;b^=a;a^=b;而不是a^=b^=a^=b.P.S:切勿尝试在不使用第三个变量的情况下交换两个变量的

c# - 是否有比嵌套 "using"更好的确定性处置模式?

在C#中,如果我想确定性地清理非托管资源,我可以使用“using”关键字。但是对于多个依赖对象,这最终会越来越嵌套:using(FileStreamfs=newFileStream("c:\file.txt",FileMode.Open)){using(BufferedStreambs=newBufferedStream(fs)){using(StreamReadersr=newStreamReader(bs)){//usesr,andhaveeverythingcleanedupwhendone.}}}在C++中,我习惯于像这样使用析构函数:{FileStreamfs("c:\fil

c# - 是否有比嵌套 "using"更好的确定性处置模式?

在C#中,如果我想确定性地清理非托管资源,我可以使用“using”关键字。但是对于多个依赖对象,这最终会越来越嵌套:using(FileStreamfs=newFileStream("c:\file.txt",FileMode.Open)){using(BufferedStreambs=newBufferedStream(fs)){using(StreamReadersr=newStreamReader(bs)){//usesr,andhaveeverythingcleanedupwhendone.}}}在C++中,我习惯于像这样使用析构函数:{FileStreamfs("c:\fil

函数: "illegal use of explicit template arguments"的C++模板特化

以下模板特化代码:templatevoidspec1(){}测试用例1:template//compileerrorvoidspec1(){}测试用例2:template//compileerrorvoidspec1(){}产生以下编译错误:errorC2768:'spec1':illegaluseofexplicittemplatearguments有人知道为什么吗? 最佳答案 函数模板不能部分特化,只能完全特化,即:templatevoidspec1(){}为什么函数模板不能部分特化,你可能想readthis.当您部分特化(仅可

函数: "illegal use of explicit template arguments"的C++模板特化

以下模板特化代码:templatevoidspec1(){}测试用例1:template//compileerrorvoidspec1(){}测试用例2:template//compileerrorvoidspec1(){}产生以下编译错误:errorC2768:'spec1':illegaluseofexplicittemplatearguments有人知道为什么吗? 最佳答案 函数模板不能部分特化,只能完全特化,即:templatevoidspec1(){}为什么函数模板不能部分特化,你可能想readthis.当您部分特化(仅可

C++ STL : Can arrays be used transparently with STL functions?

在我看到这段代码之前,我一直认为STL函数只能用于STL数据容器(如vector):#include#include#includeusingnamespacestd;intmain(){inta[]={9,8,7};cerr())使用g++编译和运行时没有任何警告或错误,正确的输出总和为24。C++/STL标准允许使用带有STL函数的数组吗?如果是的话,像数组这样的古老结构如何适应模板化迭代器、容器和函数的宏伟STL计划?此外,在这种用法中是否有任何需要程序员小心注意的警告或细节? 最佳答案 好吧,你问的是数组。您可以轻松地获得指

C++ STL : Can arrays be used transparently with STL functions?

在我看到这段代码之前,我一直认为STL函数只能用于STL数据容器(如vector):#include#include#includeusingnamespacestd;intmain(){inta[]={9,8,7};cerr())使用g++编译和运行时没有任何警告或错误,正确的输出总和为24。C++/STL标准允许使用带有STL函数的数组吗?如果是的话,像数组这样的古老结构如何适应模板化迭代器、容器和函数的宏伟STL计划?此外,在这种用法中是否有任何需要程序员小心注意的警告或细节? 最佳答案 好吧,你问的是数组。您可以轻松地获得指

c++ - _GNU_SOURCE 和 __USE_GNU

我想使用CPU_SET,这是一个glibclinux特定的宏,应该在sched.h中定义手册页明确指出_GNU_SOURCE必须定义以便定义宏。但是,查看标题,CPU_SET仅当__USE_GNU时才定义已定义(有#ifdef保护)。我好像记得几年前_GNU_SOURCE需要。问题:1)很明显,联机帮助页已关闭。如何通知维护人员手册页不正确?2)从_GNU_SOURCE转换的时间是什么时候?至__USE_GNU发生(根据版本或时间)3)是否存在新版本的glibc仍然使用_GNU_SOURCE的情况??或者我可以安全地假设定义__USE_GNU够了吗? 最佳答

c++ - _GNU_SOURCE 和 __USE_GNU

我想使用CPU_SET,这是一个glibclinux特定的宏,应该在sched.h中定义手册页明确指出_GNU_SOURCE必须定义以便定义宏。但是,查看标题,CPU_SET仅当__USE_GNU时才定义已定义(有#ifdef保护)。我好像记得几年前_GNU_SOURCE需要。问题:1)很明显,联机帮助页已关闭。如何通知维护人员手册页不正确?2)从_GNU_SOURCE转换的时间是什么时候?至__USE_GNU发生(根据版本或时间)3)是否存在新版本的glibc仍然使用_GNU_SOURCE的情况??或者我可以安全地假设定义__USE_GNU够了吗? 最佳答

c++ - 为什么 shared_ptr<T>::use_count() 返回 long 而不是 unsigned 类型?

shared_ptr观察者20.8.2.2.5C++14最终草案(n4296)longuse_count()constnoexcept;Returns:thenumberofshared_ptrobjects,*thisincluded,thatshareownershipwith*this,or0when*thisisempty.[Note:use_count()isnotnecessarilyefficient.—endnote] 最佳答案 根据这个页面http://www.open-std.org/jtc1/sc22/wg21