草庐IT

auto-commit-interval

全部标签

C++11 auto 和 size_type

鉴于auto的以下用法:std::vectorv;for(autoi=0;i对于C++来说,推导i将是理想的选择作为std::vector::size_type,但如果它只查看i的初始化程序,它会看到一个整数。i的推导类型是什么?在这种情况下?这是auto的适当用法吗?? 最佳答案 使用decltype而不是auto来声明i。for(decltype(v.size())i=0;i更好的是,如@MarkB的回答所示,使用迭代器迭代vector。 关于C++11auto和size_type,

c++ - 'auto' 关键字有什么意义?

所以我理解在C#中使用var是有意义的,因为你有编译器派生的匿名类型。C++似乎没有此功能(除非我错了),那么使用auto关键字有什么意义呢?(这有点酷,与C#不同,auto确实适用于成员/全局变量,我想这很酷,但似乎不足以证明它的存在)。 最佳答案 auto归结为通用编程和节省程序员的输入时有很多用途。例如,考虑这个。你愿意输入:std::unique_ptrg=std::make_unique(1,2,3,4)或:autog=std::make_unique(1,2,3,4)是的,它们都很长,但我们知道返回类型并再次指定它输入起

c++ - 使用 auto 重载模板函数的解析

使用以下3个重载templateautofoo(){return1;}templateintfoo(){return2;}templateTfoo(){return3;}以下是病态的吗?static_cast(&foo)();Clang选择重载#2,而gcc编译失败(Demo)当删除重载#1时,双方都同意选择重载#2(Demo)。删除重载#2时,gcc选择重载#1并且clang编译失败(Demo) 最佳答案 根据[over.over]/2,我们执行模板参数推导。这对于所有三个重载都会成功:在第一个重载中,保留[temp.deduct

c++ - C++14 中 decltype(auto) 的转换函数

classA{public:intnum;A(intparam):num(param){}operatordecltype(auto)(){returnnum;}};classB{public:intnum;AobjA;B(intparam):num(param),objA(param){}//operatorA(){returnobjA;}//Works//#1//operatorint(){returnobjA;}//Works//#2//operatorchar(){returnobjA;}//ActuallyNotNeeded//#3//operatordouble(){ret

从命令行向’git commit -m’添加换行符------转

关于bash:从命令行向’gitcommit-m’添加换行符bashgitshellAddlinebreakto'gitcommit-m'fromthecommandline我从命令行使用Git,并尝试在提交消息中添加换行符(使用gitcommit-m"")而不进入Vim。这可能吗? 相关讨论作为一个注释,这里有一个链接,它总结了良好的提交消息约定-github.com/erlang/otp/wiki/Writing-good-commit-messages,如果它可以帮助某人。像GIT_EDITOR="emacs"gitcommit-m'paragraph1'-m'paragraph2'-e

c++ - boost interval_map 是否有 operator [] 或 .at() 方法?

我正在使用BOOST库中的interval_map。typedefsetTpopulations;interval_mappopulations;假设我在人群中有这个[1006311,1006353)1611,1653,[1006353,1006432)1031,1611,1653,[1006432,1006469]1031,1387,1523,1611,1653,(1006469,1006484]1031,1387,1611,1653,(1006484,1006496]1031,1387,1611,(1006496,1006506]1031,1611,(1006506,1006547

c++ - 为什么使用 auto 的直接列表初始化被认为是不好的或不受欢迎的?

我已经养成了使用直接列表初始化编写代码的习惯,因为它更有效,而且对于防止隐式narrowing非常有用。:inti{0};strings{""};charc{'a'};boolb{false};autonum{100};//Butthis??但是当涉及到自动说明符时,我听说这样写被认为是不好的或不受欢迎的,这是为什么呢? 最佳答案 这是使用该语法失败的示例:structFoo{};voideatFoo(constFoo&f){}intmain(){Fooa;autob{a};eatFoo(b);}您可能希望这没问题:b应该是Foo并

c++ - 使用 std::iterator traits 和 auto 在函数声明中定义一个函数

今天我尝试实现基数排序。该函数必须有两个变量:开始迭代器和结束迭代器,并且可以有第三个:一些必须返回整数类型以进行排序的函数。默认情况下,它必须是恒等函数。我的尝试看起来像(抱歉,代码看起来又长又脏,但这只是一个尝试):templatevoidradix_sort(ForwardItfirst,ForwardItlast,std::function::value_type)>get_value=[](consttypenamestd::iterator_traits::value_type&x){returnx;}){//...}get_value的返回类型当然会在编译时知道。用法应该

c++ - 为什么 auto_ptr 构造不能使用 = 语法

我遇到了一个对我来说意义不大的编译器错误:#includeusingnamespacestd;auto_ptrtable=db->query("select*fromt");错误:请求从“Table*”到非标量类型“std::auto_ptr”的转换但是,以下行确实有效:auto_ptrtable(db->query("select*fromt"));构造函数的这个定义阻止它按我预期的方式工作的原因是什么?我认为初始化声明使用了构造函数。这是我的auto_ptr的构造函数(来自SGISTL):explicitauto_ptr(element_type*__p=0)throw():_M_

现代C++中的decltype(auto):理解与运用

在C++14及以后的版本中,decltype(auto)成为了编译器和开发者的得力助手。它主要用于在编译时推断表达式的类型,并保证推断出的类型在上下文中是有效的。decltype(auto)比传统的decltype更强大,因为它能够处理更为复杂和动态的类型。decltype(auto)的工作原理decltype(auto)会根据初始表达式的类型进行推断,并在必要时对推断出的类型进行调整,以确保类型安全和一致性。例如,如果初始表达式是一个数组,decltype(auto)将推断出数组的元素类型;如果初始表达式是一个函数,decltype(auto)将推断出函数的返回类型。decltype(aut