class 中带有 const getter 的 c++ 成员初始值设定项
c++ member initializer with const getter in a class
您好,我在尝试 运行 以下内容时遇到内存访问冲突的 运行 时间错误:
class MyMutable{
private :
std::string m_name;
mutable int m_DebugCount;
public:
MyMutable()
: m_name(" "), m_DebugCount(0) {}
MyMutable(std::string& newName)
: m_name(newName), m_DebugCount(0) {}
std::string getName() const
{
++m_DebugCount;
return m_name;
}
};
int main()
{
const MyMutable k((std::string&)("Hello"));
std::cout << k.getName() << std::endl;
}
我得到的错误在下面,我在 m_debugcount:
之后的第二个构造函数中得到它
在 ConsoleApplication1.exe 中的 0x7C1436C0 (vcruntime140d.dll) 抛出异常:0xC0000005:访问冲突读取位置 0x011FDFA0。发生
您应该避免 c-style 转换并使用 static_cast
因为它更安全。更改您的代码以使用 static_cast
:
const MyMutable k(static_cast<std::string&>("Hello"));
错误结果:
error: non-const lvalue reference to type 'std::string' (aka 'basic_string<char>') cannot bind to a value of unrelated type 'const char [6]'
const MyMutable k(static_cast<std::string&>("Hello"));
解决方案是更改您的构造函数以采用 const
引用,然后您根本不需要转换,因为字符串文字会自动转换为 std::string
:
#include <string>
#include <iostream>
class MyMutable{
private :
std::string m_name;
mutable int m_DebugCount;
public:
MyMutable()
: m_name(" "), m_DebugCount(0) {}
MyMutable(const std::string& newName)
: m_name(newName), m_DebugCount(0) {}
std::string getName() const
{
++m_DebugCount;
return m_name;
}
};
int main()
{
const MyMutable k("Hello");
std::cout << k.getName() << std::endl;
}
您好,我在尝试 运行 以下内容时遇到内存访问冲突的 运行 时间错误:
class MyMutable{
private :
std::string m_name;
mutable int m_DebugCount;
public:
MyMutable()
: m_name(" "), m_DebugCount(0) {}
MyMutable(std::string& newName)
: m_name(newName), m_DebugCount(0) {}
std::string getName() const
{
++m_DebugCount;
return m_name;
}
};
int main()
{
const MyMutable k((std::string&)("Hello"));
std::cout << k.getName() << std::endl;
}
我得到的错误在下面,我在 m_debugcount:
之后的第二个构造函数中得到它在 ConsoleApplication1.exe 中的 0x7C1436C0 (vcruntime140d.dll) 抛出异常:0xC0000005:访问冲突读取位置 0x011FDFA0。发生
您应该避免 c-style 转换并使用 static_cast
因为它更安全。更改您的代码以使用 static_cast
:
const MyMutable k(static_cast<std::string&>("Hello"));
错误结果:
error: non-const lvalue reference to type 'std::string' (aka 'basic_string<char>') cannot bind to a value of unrelated type 'const char [6]'
const MyMutable k(static_cast<std::string&>("Hello"));
解决方案是更改您的构造函数以采用 const
引用,然后您根本不需要转换,因为字符串文字会自动转换为 std::string
:
#include <string>
#include <iostream>
class MyMutable{
private :
std::string m_name;
mutable int m_DebugCount;
public:
MyMutable()
: m_name(" "), m_DebugCount(0) {}
MyMutable(const std::string& newName)
: m_name(newName), m_DebugCount(0) {}
std::string getName() const
{
++m_DebugCount;
return m_name;
}
};
int main()
{
const MyMutable k("Hello");
std::cout << k.getName() << std::endl;
}