草庐IT

initialization

全部标签

c++ - 初始化字符串时额外的大括号

根据问题Whatdoesstringarray[]="";meanandwhydoesitwork?我想问一下下面代码中s1和s2有什么区别:intmain(){constchar*s1={"Hello"};//strangebutworkasfollowedconstchar*s2="Hello";//ordinarycasereturn0;}为什么允许额外的大括号?任何对C++标准的引用都会很有用。 最佳答案 在C++98(和C++03)中这很简单;在第8.5条中:14-IfTisascalartype,thenadeclara

c++ - 静态局部变量中的竞争条件

我目前正在阅读EffectiveC++。有一个关于使用静态局部变量的部分,它说如果多个线程访问一个静态变量,则在该变量的初始化期间可能会出现竞争条件。至少这是我的解释。这是真的?例如,在C#中,类静态变量的初始化永远不会出现竞争条件。例如,此代码在静态变量初始化期间是否存在竞争条件?FileSystem&tfs(){staticFileSystemfs;returnfs;}以下是书中的异常(exception)情况。Here'sthetechniqueappliedtobothtfsandtempDir:classFileSystem{...};//asbeforeFileSystem

c++ - initializer_list 和参数相关的查找

我正在尝试将std::initializer_list用作使用参数相关查找(ADL)的函数中的参数。但我没有让它工作,我不明白为什么。以下是一个最小的失败示例:#include#includeclassFoo{public:inlinefriendvoidbar(std::initializer_listv){std::coutv){std::cout如上所示,等效的全局函数工作得很好。为什么以上不起作用?我在OSX10.10上使用clang。 最佳答案 我认为问题在于子表达式1{a,a}没有真正的类型,因此它没有关联的类型或命名空

c++ - 有没有办法在编译时检查 std::initializer_list 参数的数量?

我正在尝试创建一个可以接受多个给定类型参数的函数,但是参数的类型和数量都应该通过模板指定。我发现在这种情况下使用C++11的initializer_list可能是一个很好的技术,但是是否可以在编译时检查它的大小?有没有其他技术可以解决这个问题?#include//HereIwanttodefinetypeandnumberofcomponentsforeachpointtemplateclassGeometry{public:voidaddPoint(std::initializer_listcoords){assert(coords.size()==DIM);//Workinggoo

c++ - 我可以在不使用原始指针的情况下避免在 std::initializer_list 初始化期间进行复制吗?

假设我有几个在本地声明的对象,我想使用基于范围的for语法对其进行迭代。这似乎运作良好,但是,似乎要将本地对象放入initializer_list,执行复制。这对于像std::shared_ptr这样的对象来说是个坏消息,据我所知,增加引用计数是一个原子操作。我认为可以避免这种情况的唯一方法是使用原始指针。#include#includeintmain(){std::shared_ptrptrInt1=std::make_shared(1);std::shared_ptrptrInt2=std::make_shared(2);/*inthisloop,ptrInt1andptrInt2

c++ - 嵌入式 C++ : Initialization of an array member of a struct within a class, 大小省略

您好,在此先感谢您对以下问题的任何帮助。编辑:我忘了补充一点,这是在无法访问STL功能的嵌入式系统上。我很抱歉遗漏了这条非常重要的信息。这是我第一次广泛使用C++进行编码,所以我忘了提及显而易见的事情。我回来补充这个事实,这个问题已经收到了一些回复。感谢大家这么快的回复!我正在尝试初始化结构的数组成员,该结构又是C++类的公共(public)成员。结构中省略了数组大小。这是一个例子://ClassA.hClassA{public:structStructA{StructBstructs[];};structStructB{//stuff};ClassA();//etc};//Class

c++ - 如何(重新)调用初始化对象的构造函数?

我正在编写一些代码来检查是否插入了特定的MIDI设备,如果未插入,则代码每5秒重新检查一次,直到插入。我的问题出现在检查设备列表时——外部库没有重新检查端口的功能,因为它只在类的构造函数中执行。我认为让我的代码重新检查设备列表的唯一方法是重新初始化类对象。类对象在头文件中声明为ofxMidiInmidiIn;,因为它在cpp文件中全局使用。问题是,如果我在cpp的一个函数内“重新声明”,它似乎不会替换全局范围内的对象,即使它在本地是好的。用伪代码来说明:在.h中:classfoo{ofxMidiInmidiIn;//firstinitializationdoesaportscan};在

C++ 构造函数调用和对象创建

classTest{public:intx;Test(){x=0;cout输出:程序编译输出constructorwithsingleintargumentcalledconstructorwithsingleintargumentcalled但是现在classTest{public:intx;Test(){x=0;cout编译失败。constructorinvokings.cc:36:7:error:noviableconstructorcopyingvariableoftype'Test'Testaa=10;^~~constructorinvokings.cc:23:3:note:

c++ - initializer_list 和默认构造函数重载决议

#include#includeusingnamespacestd;structY{};structX{X(initializer_list){cout这会打印出“boo”。为什么它不打印出“yay”?无论如何要区分以下两种结构:X()X{}或returnX();返回{};或voidg(constX&)g(X())g({})谢谢。 最佳答案 Isthereanywaytodifferentiatethefollowingtwoconstructions:没有。它们不是不同的结构。{}构造函数语法的主要目的是引入统一初始化,让初始化工

C++构造函数理解

考虑这个构造函数:Packet():bits_(0),datalen_(0),next_(0){}注意bits_、datalen_和next_是Packet类中的字段,定义如下:u_char*bits_;u_intdatalen_;Packet*next_;构造函数的这部分是什么意思?bits_(0)、datalen_(0)、next_(0) 最佳答案 这是一个初始化列表,它将值设置为指定的值。Packet():bits_(0),datalen_(0),next_(0){assert(bits_==0);assert(datalen