构造函数创建const对象
Constructor creates const object
为什么我得到错误
../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
时
根据我的理解,构造函数返回的不是常量值。
代码
// 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] == ' ') {
_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
对象(通过调用隐式转换构造函数)。并且不能将非常量左值引用绑定到临时值。
将main中的函数调用更改为func(s)将起作用。但我不知道你想要什么样的最终输出。
相关文章:
- 被解释为低级别const的const对象的地址
- 使用共享指针的函数调用,其对象应为 const
- 如何从构造函数副本 T(const T&)调用对象 T?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- "this"指向的对象是否与 const 对象相同?
- const auto & 和 auto & if reference 对象之间的区别是 const
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 为什么 const YAML::Node 对象的行为不像 yaml-cpp 中的类似值的对象?
- 从 const 对象访问非 const 方法
- 将非 const 对象用于 const 参数
- 如何键入用于const对象的自定义io操纵器
- 对临时对象的Const引用不会延长其生存期
- 正在通过const-ref未定义的行为捕获新构造的对象
- 具有成员变量的对象 Const 数组 = 先前索引成员变量的总和
- 为什么我构建的临时对象const不可变
- 强制用户声明对象const