草庐IT

initializing

全部标签

c++ - 如何使用带有 std::initializer_list 的构造函数设计类?

当类具有采用std::initializer_list的构造函数重载时,此重载将优先,即使其他构造函数重载看起来更匹配。Sutter的GotW#1中详细描述了这个问题。,第2部分,以及迈耶斯的EffectiveModernC++,第7项。出现此问题的典型示例是在对std::vector进行大括号初始化时:std::vectorvec{1,2};//Isthisavectorwithelements{1,2},oravectorwithasingleelement2?Sutter和Meyers都建议避免在类设计中initializer_list构造函数重载会导致程序员产生歧义。萨特:Gu

c++ - 有人给我一个使用 QVector::QVector(std::initializer_list<T> args) 的例子吗?

谁能给我一个使用以下构造函数intQt的例子?QVector::QVector(std::initializer_listargs); 最佳答案 采用std::initializer_list的构造函数使用列表初始化时会考虑。这是一个涉及花括号初始化列表的初始化:QVectorv{1,2,3,4,5};//orequivalentlyQVectorv={1,2,3,4,5};请注意,这是C++11的特性。事实上,第一种语法是C++11的新语法,而第二种语法可以在C++03中用于聚合初始化。您还可以使用直接初始化并将初始化列表作为参数

c++ - 针对 "initialize()"方法而不是构造函数的参数

我目前负责查找我们代码库中的所有不良做法,并说服我的同事修复有问题的代码。在我的探索过程中,我注意到这里的很多人都使用以下模式:classFoo{public:Foo(){/*Donothinghere*/}boolinitialize(){/*Doalltheinitializationstuffandreturntrueonsuccess.*/}~Foo(){/*Doallthecleanup*/}};现在我可能是错的,但对我来说这个initialize()方法很糟糕。我相信它取消了拥有构造函数的全部目的。当我问我的同事为什么做出这个设计决定时,他们总是回答说他们别无选择,因为你不

c++ - 成员初始化列表 : initialize two members from a function returning a tuple

memberinitializerlist中的多个成员是否可以从函数获得的元组中初始化?随着通过元组返回多个值变得越来越流行,我希望有一个解决方案。除了语言限制,我看不出有什么其他原因无法做到这一点。这是我所拥有的mcve:autonew_foo(std::size_tsize)->std::tuple,int*>{autobuffer=std::make_unique(size*sizeof(int)+8);autobegin=static_cast(static_cast(buffer.get()+4));returnstd::make_tuple(std::move(buffer

c++ - Goto before variable initialization 导致编译错误

考虑这段代码(VS2008):voidWordManager::formatWords(std::stringconst&document){document_=document;unsignedintcurrentLineNo=1;size_toldEndOfLine=0;size_tendOfLine=document_.find('\n');while(endOfLine!=std::string::npos){std::stringline=document_.substr(oldEndOfLine,(endOfLine-oldEndOfLine));if(line.size(

c++ - 在编译时验证 std::initializer_list 的内容

我试图在编译时确定std::initializer_list中的所有值是否都是唯一的。我能够找到valiatethesize的解决方案的列表,但无法将其应用于内容。我尝试过使用自由函数和构造函数,但这两种方法都导致GCC4.7.2出现以下错误。error:non-constantconditionforstaticassertionerror:'begin'isnotaconstantexpression我意识到std::initializer_list的成员没有被声明为constexpr但我希望有一个像大小验证这样的解决方案。是否可以在编译时使用类似以下内容验证内容?#include

c++ - “Default member initializer needed within definition of enclosing class outside of member functions” - 我的代码格式不正确吗?

structfoo{structbar{~bar(){}//noerrorw/othisline};bar*data=nullptr;//noerrorw/othislinefoo()noexcept=default;//noerrorw/othisline};是的,我知道,还有一个题目完全相同,但有点不同的问题(涉及noexceptoperator和没有嵌套类型)。那里建议的解决方案(将foo的构造函数替换为foo()noexcept{})改变了语义,这里没有必要:这里我们有一个更好的答案(因此问题不是重复的)。编译器:AppleLLVM版本9.0.0(clang-900.0.37)

c++ - 使用 C++11 initializer_list 实现类 std::array 容器

std::array唯一和imo非常不方便的警告是它不能像内置C数组一样从初始化列表中推断出它的大小,它的大小必须作为模板传递.是否可以使用C++11initializer_list实现类似std::array的容器(围绕内置C数组的薄包装器)?我问是因为,与std::array不同,它会自动从初始化列表中推导出数组的大小,这要方便得多。例如://il_arrayisthehypotheticalcontainer//automaticallydeducesitssizefromtheinitalizerlistil_arraymyarr={2,4,6,7,8};如果没有提供初始化列表

c++ - 空括号调用默认构造函数还是采用 std::initializer_list 的构造函数?

以下引自EffectiveModernC++(第55页):"Supposethatyouuseanemptysetofbracestoconstructanobjectthatsupportsdefaultconstructorandalsosupportsstd::initializer_listconstruction.Whatdoyouremptybracesmean?etc.Theruleisthatyougetdefaultconstruction."我用std::array试过这个:std::arrayarr{};并收到来自g++(版本4.8.2)的警告:warning:m

c++ - std::make_unique(以及 emplace、emplace_back)对 initializer_list 参数的笨拙推导

假设我有这个结构:structposition{intx,y;};和另一个将this作为构造函数参数的类:classpositioned{public:positioned(positionp):pos(p){}private:positionpos;};我怎样才能得到简单的autobla=std::make_unique({1,2});上类?目前,编译器试图通过initializer_list匹配并调用make_unique的数组变体,这很愚蠢,因为positioned只有一个构造函数。emplace出现同样的问题和emplace_back功能。几乎所有将其可变模板参数转发给类的构造