小编Rai*_*Sia的帖子

无论是否初始化,使用sizeof(p [0])真的无害吗?

如果我们定义了一个数组/指针,我正和我的一个朋友争论:

sometype * p;
Run Code Online (Sandbox Code Playgroud)

如果我们想知道类型的大小,他说应该使用:

sizeof(sometype)
Run Code Online (Sandbox Code Playgroud)

我说过一个人也可以用:

sizeof(p[0]),
Run Code Online (Sandbox Code Playgroud)

它应该是一样的.他不同意,他的观点是如果p没有初始化,那么这种用法p[0]可能会引起问题.

但据我所知,只有当我们改变或依赖其价值时p[0],这才是有害的.既然我们不改变p[0]也不p[0]使用价值,这是完全合情合理的.

既然我们不能说服对方,任何人都可以清楚地说明这个概念.

我知道这个问题没用,几乎所有的开发人员都会使用sizeof(sometype),包括我:).但这个问题很有趣,我真的很想知道是否有任何sizeof(p [0])会有害的情况.

=================================
让我稍微扩展这个问题.如果我确实使用了一些不相关的值(或被视为随机或其他类型).我可以一直p[0]用来获取价值吗?

为了使问题更清楚,如果我不更改未初始化指针的值,只需使用它指向的值,我是否可以始终获取值而不会导致问题?

c++ sizeof

4
推荐指数
3
解决办法
243
查看次数

未定义的引用

可能重复:
C++模板,未定义的引用

我有一个非常简单的程序,由三个文件组成,它们从普通数组构建向量:

//create.hpp

#ifndef CREATE_HPP_
#define CREATE_HPP_

#include <vector>

using namespace std;

template<class T>
vector<T> create_list(T uarray[], size_t size);

#endif /* CREATE_HPP_ */
Run Code Online (Sandbox Code Playgroud)
//create.cpp

#include "create.hpp"

template<class T>
vector<T> create_list(T uarray[], size_t size){
    vector<T> ulist(uarray, uarray + size);
    return ulist;
}
Run Code Online (Sandbox Code Playgroud)
//main.cpp

#include <vector>
#include <iostream>

#include "create.hpp"

using namespace std;


int main(){
    char temp[] = { '/', '>' };
    vector<char> uvec = create_list<char>(temp, 2);

    vector<char>::iterator iter=uvec.begin();
    for(;iter != uvec.end();iter++){
        cout<<*iter<<endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建过程如下:

g++ -O0 -g3 …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors build-error undefined-reference

1
推荐指数
1
解决办法
4839
查看次数