gpt4 book ai didi

c++ - 构造函数创建 const 对象

转载 作者:行者123 更新时间:2023-11-30 02:50:41 28 4
gpt4 key购买 nike

为什么会报错

../implicit-explicit.cpp:44:10: error: invalid initialization of non-const reference of type ‘BWSize&’ from an rvalue of type ‘char’
../implicit-explicit.cpp:36:6: error: in passing argument 1 of ‘void func(BWSize&)’

当我从函数 void func(const BWSize & s) 中删除 const

根据我的理解,构造函数返回的不是 const 值。

代码

// implicit-explicit.cpp by Bill Weinman <http://bw.org/>
#include <iostream>

const std::size_t maxlen = 1024; // maximum length of bwString

class BWSize {
std::size_t _size;
public:
BWSize(std::size_t); // constructor: size from int
BWSize(const char *); // constructor: size from c-string
std::size_t size() const;
};

BWSize::BWSize(const std::size_t n) {
std::cout << "BWSize from int" << std::endl;
_size = (n <= maxlen) ? n : 0;
}

BWSize::BWSize(const char * s) {
std::cout << "constructor: BWSize from c-string" << std::endl;
for(std::size_t i = 0; i < maxlen; i++) {
if(s[i] == '\0') {
_size = i;
return;
}
}
_size = 0;
}

std::size_t BWSize::size() const {
return _size;
}

using namespace std;

void func(const BWSize & s) {
cout << "s.size() is " << s.size() << endl;
}

int main( int argc, char ** argv ) {
BWSize s = 'x';
cout << "s.size() is " << s.size() << endl;
func('x');
return 0;
}

最佳答案

这个调用:

func('x');

要求创建临时 BWSize 对象(通过调用隐式转换构造函数)。并且您不能将非常量左值引用绑定(bind)到临时值。

关于c++ - 构造函数创建 const 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20241091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com