Thực ra lỗi phân đoạn xảy ra trong chương trình khác mà tôi đã cố biên dịch xảy ra do hành vi này.Trình xây dựng ủy nhiệm cho lỗi phân đoạn khi sử dụng trường lớp cho đối số
Câu hỏi của tôi là:
Đây là một lỗi hoặc lỗi của tôi?
tái sản xuất trong bất kỳ cách nào (thậm chí nếu lĩnh vực something
là private hay protected) và đây là ví dụ của tôi:
main.cc:
#include <iostream>
class Test {
public:
const char* something = "SOMETHING HERE!!!";
Test(const int& number) : Test(something, number) { }
// XXX: changed `something` to `_something` to make it different
Test(const char* _something, const int& number) {
std::cout << _something << std::endl;
std::cout << number << std::endl; }
~Test() { }
};
int main(int argc, char* argv[]) {
Test te1(345);
Test te2("asdasdad", 34523);
return 0;
}
Và đây là những gì sẽ xảy ra khi biên soạn với:
g++ main.cc -Os -o main
và chạy với:
./main
đầu ra là:
[email protected]:~/ $ ./main
A"�~ <-- this is random
345
asdasdad
34523
Nhưng khi tôi cho phép tối ưu hóa với -O0
hoặc -O1
hoặc -O2
... đầu ra chỉ là một dòng sản phẩm mới:
[email protected]:~/ $ ./main
[email protected]:~/ $
G ++ phiên bản:
[email protected]:~/ $ g++ --version
g++ (Raspbian 6.3.0-18+rpi1) 6.3.0 20170516
Trong dòng tiếp theo 'const char * something =" SOMETHING HERE !!! ";' bạn có nghĩa là '_something'? Nếu không, thì biến này chưa được đặt. – Mixhab
Mọi thứ đều như tôi đã giải thích trong phần câu hỏi. –
Khá thú vị. – 0x499602D2