草庐IT

implicit-conversion

全部标签

c++ - 无法将 'int (*)[size]' 转换为 'int**'

我有一个256x256的二维float组,我试图将其传递给函数,但g++给我错误消息:无法将'int(*)[256]'转换为'int**'。我该如何解决这个问题?voidhaar2D(int**imgArr);intimageArray[256][256];haar2D(imageArray);我曾尝试将函数参数更改为int[256][256]和int*[256]类型,但没有成功。 最佳答案 必须按照编译器的要求声明函数参数。所以声明它要么像voidhaar2D(intimgArr[256][256]);或voidhaar2D(in

使用 shared_ptr 到 const T 的 C++ 模板实例化

假设我有一个类templateclassA{public:templatevoidf(std::tr1::shared_ptr>v1,std::tr1::shared_ptr>v2){}};以下不编译:Aa;std::tr1::shared_ptr>v1(newstd::vector());std::tr1::shared_ptr>v2(newstd::vector());a.f(v1,v2);编译错误是:error:nomatchingfunctionforcallto'A,std::allocator>>::f(std::tr1::shared_ptr>>&,std::tr1::s

c++ - 显式/隐式类型转换 C++

我有一行代码doublei=1+(long)1.5*5.0f我的问题是转换顺序和结果是什么?一直在寻找这样的例子,但无济于事。有什么好的指南可以帮助我理解它吗? 最佳答案 Myquestioniswhatistheconversionorderandtheresult?转换应用于1.5,给出一个long,值为1。将其转换为float以与5.0f相乘,得到值为5.0f的float。1被转换为float以与该值相加,得到一个float值为6.0f。最后,将其提升为double(保留值6.0)以分配给i。这假定了一种可以精确表示小整数的非

C++:隐式转换顺序

我有一个像这样重载的(成员)函数:boolfoo(bool);intfoo(int);floatfoo(float);...std::stringfoo(std::stringconst&);用于一些内置类型,但不适用于constchar*。调用foo("beautyisonlyskin-deep");,令我大吃一惊的是,调用了foo函数的bool变体。这引出了我的问题:问题:是否有明确定义的内置类型隐式转换顺序不是问题:如何避免隐式转换。隐式转换是多么邪恶。...编辑:删除了关于用户定义问题的隐式转换顺序的问题 最佳答案 根据:h

c++ - C++ 中的除法

这个问题在这里已经有了答案:Integerdivisionalwayszero[duplicate](1个回答)关闭6年前。我是C++的新手,我尝试了这个简单的代码:#include#includeusingnamespacestd;intmain(){doublea;a=1/6;cout但结果是0。据我了解,double应该与实数一起使用,所以结果不应该是1/6或0.1666666吗?谢谢!

c++ - VS 编译警告 : result of 32-bit shift implicitly converted to 64 bits

VisualStudio2013发出恼人的(看似无关紧要的)编译警告:#include#definePRECISION16uint64_thi=0;for(uint8_ti=0;i这是编译警告:warningC4334:'改1好像解决了至1.所以我一直在尝试找出1中可能出现的问题.显然,如果i>=PRECISION,那么左移操作将产生未定义的行为。但是,变量i不超过PRECISION-1的值.此外,即使我们假设编译器无法推断出这个事实,我也看不出这个编译警告与左移操作数导致的潜在未定义行为有什么关系。也许它假定PRECISION-1-i的无符号值可以大于31。但是我应该如何告诉编译器它

c++ - 复制初始化: why move or copy constructor was not called even if copy-elision is turned off?

我的问题不同,因为我可能“知道”复制省略。我正在学习复制初始化。但是,以下代码让我感到困惑,因为我已经使用-fno-elide-contructors-O0选项关闭了复制省略。#includeusingnamespacestd;classtest{public:test(inta_,intb_):a{a_},b{b_}{}test(consttest&other){cout我首先使用命令构建:g++-std=c++11-fno-elide-constructors-O0main.cpp-omain得到如下结果:**showelideconstructors**moveconstruct

c++ - 隐式构造函数可用于从 Base 派生的所有类型,但当前类型除外?

以下代码总结了我的问题:templateclassBase{};templateclassDerived1:publicBase{};templateclassDerived2:publicBase{public://CopyconstructorDerived2(constDerived2&x);//AnEXPLICITconstructorthatdoesaspecialconversionforaDerived2//withothertemplateparameterstemplateexplicitDerived2(constDerived2&x);//Nowtheproble

c++ - 析构函数 : triviality vs implicit definition

根据我对标准的理解,普通析构函数是一种隐式声明的析构函数,其类只有基本和非静态成员以及普通析构函数。鉴于此定义的递归性,在我看来,唯一的“递归停止”条件是找到具有非隐式声明的析构函数(即用户声明的)的基类或非静态成员。如果那是对的,那应该意味着一个普通的析构函数是一个“不需要做任何事情”的析构函数,因此它将被声明(隐式地)但不被定义。换句话说:根据标准定义,隐式定义析构函数(即“它做某事”)不能是微不足道的说法是否正确?很抱歉提出这种愚蠢的问题,但我想澄清一下我的想法...... 最佳答案 没有。隐式定义的平凡析构函数根据定义是平凡

c++ - 为什么可以存在两个仅在返回常量上有所不同的隐式转换?

考虑以下代码:#includeclassWrapperString{public:WrapperString(conststd::string&str):str_(str){}operatorstd::string()const{returnstr_;}operatorconststd::string()const{returnstr_;}std::stringget()const{returnstr_;}//errorC2373:'WrapperString::get':redefinition;differenttypemodifiers//conststd::stringget(