有人可以解释一下这段代码中发生了什么:
这里的例子: https : //ideone.com/1cFb4N
#include <iostream>
using namespace std;
class toto
{
public:
bool b;
toto(bool x)
{
cout<< "constructor bool:" << (x ? "true": "false")<<endl;
b = x;
}
~toto() {}
};
int main()
{
toto t = new toto(0);
cout << "t.b is " << (t.b ? "true": "false")<<endl;
t = new toto(false);
cout << "t.b is " << (t.b ? "true": "false")<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
constructor bool:false
constructor bool:true
t.b is true
constructor bool:false
constructor …Run Code Online (Sandbox Code Playgroud) 只是为了好玩,我有一个std::list的const char*,每个元素都指向一个空结束的文本字符串,并跑了std::list::sort()就可以了.碰巧的是,它(没有双关语意)没有对字符串进行排序.考虑到它正在研究指针,这是有道理的.
根据文档的std::list::sort(),它(默认)使用operator <的元件之间的比较.
暂时忘记这个列表,我的实际问题是:这些(>,<,> =,<=)运算符如何处理C++和C中的指针?他们只是比较实际的内存地址吗?
char* p1 = (char*) 0xDAB0BC47;
char* p2 = (char*) 0xBABEC475;
Run Code Online (Sandbox Code Playgroud)
例如,在32位小端系统上,p1> p2因为0xDAB0BC47> 0xBABEC475?
测试似乎证实了这一点,但我认为将它放在StackOverflow上以供将来参考是件好事.C和C++都对指针做了一些奇怪的事情,所以你真的不知道......
我在使用C++重载方法时遇到了一些麻烦.作为问题的一个例子,我有一个类,其中有许多方法被重载,并且每个方法都有一个具有不同数据类型的参数.我的问题:这些方法应该出现在类中的特定顺序,以确保根据其参数数据类型调用正确的方法?
class SomeClass{
public:
...
void Method(bool paramater);
void Method(std::string paramater);
void Method(uint64_t paramater);
void Method(int64_t paramater);
void Method(uint8_t paramater);
void Method(int8_t paramater);
void Method(float paramater);
void Method(double paramater);
void Method(ClassXYZ paramater);
}
Run Code Online (Sandbox Code Playgroud)
我注意到有问题,因为在运行时:
Method("string");
Run Code Online (Sandbox Code Playgroud)
它在呼唤:
Method(bool paramater);
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <iostream>
#include <string>
void foo(bool a)
{
std::cout << "bool" << std::endl;
}
void foo(long long int a)
{
std::cout << "long long int" << std::endl;
}
void foo(const std::string& a)
{
std::cout << "string" << std::endl;
}
int main(int argc, char* args[])
{
foo("1");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行时我得到这个输出:
bool
Run Code Online (Sandbox Code Playgroud)
我原以为输出:
string
Run Code Online (Sandbox Code Playgroud)
为什么g ++ 4.9隐式将此字符串转换为bool?
是否有推荐/正确/更安全的方法将 bool 参数传递给您的主函数?
这是
$ ./my_software true
Run Code Online (Sandbox Code Playgroud)
与此为my_software:
int main(argc, argv* []){
bool my_bool = argv[1];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和这个
$ ./my_software 1
Run Code Online (Sandbox Code Playgroud)
与此为my_software:
int main(argc, argv* []){
bool my_bool = atoi(argv[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
相等的?我错过了第一个转换吗?
c++ ×5
boolean ×2
pointers ×2
c ×1
comparison ×1
constructor ×1
function ×1
g++ ×1
g++4.9 ×1
methods ×1
operators ×1
overloading ×1
types ×1