我写了一个小问题来检查const数据成员上const_cast的行为.
using namespace std;
class myString{
public:
myString(char * str)
{
p=str;
}
const char * getString(){
return p;
}
private:
const char *p;
} ;
int main()
{
char *p=(char*)malloc(8);
cin>>p;
myString *m= new myString(p);
char *s =const_cast<char*>(m->getString());
s[6]='y';
cout<<s<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行此程序后,我将其作为"yogendra"(8个字母的字符串).我把输出称为"yogendya"现在我怀疑了.通过const_cast <>我们可以覆盖数据成员本身的行为,因为这里的字符串是const char*仍然在转换后我可以修改它.
我有一些文件类型为"文件"我的意思是代替"资源\ sample.txt",他们的名字是"资源\样本"现在我想用c ++读取它们并将它们存储在一个字符串中.这是我的代码:
std::stringstream textBuffer;
std::fstream fileHandle;
std::string content
fileHandle.open("Resource\sample", std::ios::in);
textBuffer << fileHandle.rdbuf();
content = textBuffer.str();
fileHandle.close();
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时,"content"变量的值等于"".帮助我.提前致谢.请注意,唯一的问题是文件没有任何扩展名,例如.txt或.dat或.bin.
我有一些代码,这里有一些看起来像这个的代码(我当然简化了)
#define ERROR 0
namespace lib{
class Logger{
public:
typedef enum {ERROR = 1} LogLevel;
};
}
Run Code Online (Sandbox Code Playgroud)
在visual studio中编译我得到错误:syntax error: 'constant'.很明显,问题是我重新使用了ERROR这个词作为define和typedef枚举.
有没有人知道定义的逻辑影响一些变量名称,它实际上包含在命名空间和类中.我的意思是,怎么可能ERROR混淆,lib::Logger::ERROR因为我的猜测是他们有完全不同的范围.
我有一个类似于以下内容的类:
class A : std::enable_shared_from_this<A> {
public:
static std::shared_ptr<A> create() {
return std::shared_ptr<A>(new A());
}
void f() {
shared_from_this();
}
private:
A() { }
};
Run Code Online (Sandbox Code Playgroud)
它的用法类似于:
std::shared_ptr<A> pt = A::create();
pt->f();
Run Code Online (Sandbox Code Playgroud)
尽管在pt创建shared_ptr之后调用了shared_from_this()的调用,但对该调用的调用f()仍然会bad_weak_ptr引发异常。运行它可以gdb确认对的调用引发了异常,f()而不是在教师未在此处包括的某些代码中引发了异常。
我必须从只有少数数字的文件中读取.阅读它,总结它们就是这样.(学习C++).如果我使用fstream :: eof()函数,它会读取最后一个数字两次,所以我这样做:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream file;
int a = 0, sum = 0;
file.open("nums.txt",fstream::in);
if (!file.is_open()) {
cout << "Unable to open file!\n" << endl;
}
while (file >> a) {
cout << a << endl;
sum += a;
}
cout << "Sum: " << sum << endl;
file.close();
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在它不会读取最后一个数字两次,但我不明白while()括号中发生了什么,我想如果我读0就会停止,但它也会读取它.文件>> a实际返回的内容类似于"托管阅读"= 1和"失败"= 0 ??
谢谢
在Python中,对成员函数或方法的任何绑定调用都会转换为未绑定调用,即:obj.method()相当于method(obj).这就是为什么每个成员函数的第一个参数本身.
在C++中是否有类似的概念解释了为什么使用点运算符访问成员函数?
c++ ×7
file ×2
c++11 ×1
const-cast ×1
fstream ×1
inheritance ×1
istream ×1
ostream ×1
shared-ptr ×1
while-loop ×1